Прием значений с у/з датчика расстояния (PulseIn vs attachInterrupt)
- Войдите на сайт для отправки комментариев
Чт, 17/10/2019 - 23:37
Moderator : пожалуйста, вставьте код правильно (новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Конфигурация:
Arduino Uno
Датчик расстояния http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:hc-sr04-ultrasonic-sensor-distance-module
Вывод:
started succesfully
18.73 cm - asyncronous
18.25 cm - syncronous
26.28 cm - asyncronous
18.64 cm - syncronous
26.28 cm - asyncronous
18.25 cm - syncronous
26.22 cm - asyncronous
18.25 cm - syncronous
26.28 cm - asyncronous
18.65 cm - syncronous
...
Как видно после вызова синхронной версии асинхронная выдает неверный результат.
(При вызове 2ух асинхронных версий после синхронной получим, что первый работает некорректно, а второй дает правильный результат.)
В чем проблема?
Заранее спасибо.
Не можешь в параллельные процессы? Сделай двухъядерную ардуину. Одна мерит тем способом который там работает (синхронный?), далее делай восьмибитный ЦАП на резисторах. Подать во вторую под соусом АЦП, усреднить конденсатором по вкусу. Профит.
И да, не надо мне рассказывать что "цап только 0-255 может а датчик до 400 см же", надеяться на "точность" вертя в руках HCSR04 - самообман.
Да, почему самообман? Ультразвук, он и в Африке ... Если аккуратно всё сделать, да ещё добавить температурную компенсацию - очень неплохо получается.
Да это я так. Мутирую в детсимёна.
Да вобщем-то на точность не претендую, да и не про параллельные процессы. Просто интересно, почему такой странный результат получается, что после использования pulseIn на приеме замеры через прерывания становятся неправильными (притом именно неправильными а не неточными т.к. совершенно другой результат: почти в 1,5-2 раза больше.
Да вобщем-то на точность не претендую, да и не про параллельные процессы. Просто интересно, почему такой странный результат получается, что после использования pulseIn на приеме замеры через прерывания становятся неправильными (притом именно неправильными а не неточными т.к. совершенно другой результат: почти в 1,5-2 раза больше.
Когда pulseIn считает длину импульса прерывания запрещены. Вставте код правильно, тогда можно будет посмотреть что у вас там не так.
Извиняюсь
Вот код: