Ż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);
}
English