Żeby pozbyć się zakłóceń (może nietoperz przeleciał?) zamiast jednego pomiaru wykonamy 100 (#define SERIES 100):
for(i=0;<SERIA;i++) {
Na pinie TRIGPIN ustawiamy 0, potem na 10 milisekund jedynkę i znów 0, HC-SR04 rozpocznie pomiar:
digitalWrite (TRIGPIN,0) ; //LOW Delay(2); digitalWrite (TRIGPIN,1) ; //HIGH Delay(10); digitalWrite (TRIGPIN,0) ; //LOW
Czekamy na impuls na pinie Echo czujnika. Jeśli się pojawi, funkcja int_impuls zmieni wartość zmiennej impuls na zero.
Na wszelki wypadek nie czekamy w nieskończoność, bo jakby impuls na Echo się nie pojawił?
impuls=1; for(k=1;k<9000;k++) { if (impuls==0) break; Delay(1); } if (impuls==1) { printf("Zgubiony impuls\n"); fflush(0); tim2.tv_nsec=tim.tv_nsec+1; }
Wyliczamy czas trwania impulsu Echo, w mikrosekundach, korygując zapamiętane przez int_impuls czasy jeśli trafiliśmy z pomiarem na koniec sekundy:
if(tim2.tv_nsec < tim.tv_nsec) tim2.tv_nsec= tim2.tv_nsec+1000000000; usec[i]=(tim2.tv_nsec -tim.tv_nsec)/1000; usectmp=usec[i];
Jeśli do procesu wysłaliśmy sygnał USR1 wyświetli się wyliczony czas:
if(debug) printf("%4.1f microsec\n",usectmp);
Czekamy 90 milisekund żeby zanikło ewentualne echo ultradźwięków w pomieszczeniu. To na wypadek, gdyby nasz program działał w pętli (tak jak to robi dist.c)
Delay(90000); }