Получение данных на ультразвуковом дальномере

Здравствуйте! Как можно получить и вывести данные без обработки (без использования pulseIn). Я это пробовал это сделать через analogRead(), но он выводит 0 (значит, то что получает пин это 0 и 1). В правильном направлении я мыслю? Что можно ещё использовать для этого?
Заранее спасибо!


int Trig=4;
int Echo=A0;
int r=A1;


float duration;




void setup() {
  Serial.begin (9600);
  duration=0;
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);


}

void loop() {
  
  digitalWrite(Trig, LOW);
  delayMicroseconds(2);
  
  digitalWrite(Trig, HIGH);
  delayMicroseconds(5);
  digitalWrite(Trig, LOW);

  int read=analogRead(r);

  Serial.println(read);
  
  duration= pulseIn(Echo, HIGH);
  Serial.println(duration);

  delay(500);

}

И чем вам поможет то что пин получает 0 и 1 ?

Если Вы хотите обойтись без pulseIn - начните с того что загляните в исходник этой функции и попытайтесь понять, как она работает.
Вкратце - Вам нужно замерить время, проходящее между отправкой сигнала и получения ответа на пин приемника.

Непонятно, что и зачем сделать-то хотите? Что не устраивает в pulseIn? И причём тут analogRead()? Тут вроде как ничего “аналогового”…

Мне интересно как работает сам ультразвуковой дальномер, то есть как на нем формируется сигнал, не как он уже обработан, а исходный, поэтому я и пытался через analogRead что-то там найти. Поэтому я и хочу это попробовать вывести через двоичный сигнал

Вам доступна только ИНТЕРФЕЙСНАЯ часть датчика ! Через ИНТЕРФЕЙС вы можете только попросить начать измерение и получить результат …
А что бы понять как он реально работает - надо лезть внутрь.

Не пробовал сначала прочитатть про него чонить? Или надо сразу на форум бежать, размахивая идиоцкими вопросами?

1 лайк

“Чонить” прочитать я смог, у меня задание такое вытащить “сырые”, то есть без pulseIn. Я найти такие сайты не смог. Поэтому и братился “можете подсказать”.

То есть это как класс? Только через интерфейс и никак иначе?

Ждите момент перехода сигнала ECHO от L к H, засекайте время и ждите момент перехода сигнала ECHO от H к L … вычисляйте длительность/расстояние …

У нас же такой же результат получится как и при pulseIn?

А должен быть другой ??? Расстояние изменилось что ли в зависимости от метода измерения ? Именно pulsein не использовали же !

Но этот результат уже после обработки, на пин подается напряжение, я могу вывести это значение?

На какой ?
Там же не аналоговый выход ! Либо 0 либо Vcc…

Echo, мы же с ним работаем, как ваш метод, так и через pulsein
А можно вывести эту последовательность ?

Выводите digitalRead(ECHO) … кто запрещает то ?

1 лайк

А, я дурак, вспомнил что есть analogRead, а про digital, спасибо!

pulseIn - это не обработка, а измерение.
Вспоминайте физику: скорость звука при нормальных условиях известна. Измерение расстояния основано на том, что посылаем звуковой сигнал и ждем, когда этот сигнал отразится от препятствия и вернется к нам. Замеряем время, делим на скорость звука и получаем расстояние.
Расстояние нельзя прочитать, его нужно измерять.
При том в данном случае измерять нужно время, а не напряжение, поэтому analogRead никак не подходит.
Если Вы не хотите напрямую использовать pulseIn, то Вам придется написать самому его прямой аналог, который делает то же самое.