ультразвуковой датчик без pulseIn
- Войдите на сайт для отправки комментариев
int a, tim; float distance; #define TRIG 7 #define ECHO 8 void setup() { pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT); Serial.begin(9600); } void loop() { digitalWrite(TRIG, LOW); delayMicroseconds(5); digitalWrite(TRIG, HIGH); delayMicroseconds(10); digitalWrite(TRIG, LOW); a=micros(); while(!(digitalRead(ECHO)==1)){ if((micros()-a)>1000000){ break; } } a=micros(); while(digitalRead(ECHO)==1){ if((micros()-a)>1000000){ break; } } tim=micros()-a; Serial.print("time "); Serial.println(tim); //int tim=pulseIn(ECHO, HIGH); //Serial.println(tim); distance=(float)(tim/2.0)/29.0; Serial.println(distance); delay(250); }
вот моя попытка реализовать это. результат:
20:40:22.574 -> time 732
20:40:22.574 -> 12.62
20:40:22.809 -> time 712
20:40:22.809 -> 12.28
20:40:23.043 -> time 704
20:40:23.090 -> 12.14
20:40:23.325 -> time 704
20:40:23.325 -> 12.14
20:40:23.559 -> time 696
20:40:23.559 -> 12.00
20:40:23.793 -> time 8
20:40:23.840 -> 0.14
20:40:24.075 -> time 4
20:40:24.075 -> 0.07
20:40:24.309 -> time 8
20:40:24.309 -> 0.14
20:40:24.544 -> time 4
20:40:24.590 -> 0.07
20:40:24.825 -> time 8
20:40:24.825 -> 0.14
20:40:25.059 -> time 8
20:40:25.059 -> 0.14
20:40:25.294 -> time 12
20:40:25.341 -> 0.21
т.е первые 5 измерений проходят нормально, а дальше что-то не так. проблема не в датчике, так как с pulseIn оно работает
micros() в числе какого типа/размерности результат возвращает?
какие преимущества у предлагаемого решения перед pulseIn()?