ультразвуковой датчик без pulseIn

Maksym Karpliuk
Offline
Зарегистрирован: 18.01.2020
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 оно работает

sadman41
Offline
Зарегистрирован: 19.10.2016

micros() в числе какого типа/размерности результат возвращает?

SLKH
Offline
Зарегистрирован: 17.08.2015

 какие преимущества у предлагаемого решения перед pulseIn()?