ультразвуковой датчик без 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()?