dimamichev писал(а):
Тогда можно ограничить в функции pulseIn(pin, value, timeout) значение 3 аргумента до времени возврата на дистанцию не более 40 см и убирать
delay (); из скетча. Или прерывания попробовать использовать.
Да, точно, с таймаутом надо поэкспериментировать... Только нули нужно будет отсекать.
Про прерывания думал. Но не придумал как их использовать, ведь прерывание обрабатывает ограниченный набор событий, связанных с изменением сигнала на цифровом порте. А дальномер этого не даёт. Есть идея как можно сделать?
dimamichev писал(а):
Или спросить на профильном форуме.
А какой форум более профильный? Я тут пока плохо ориентируюсь, показалось, что этот самый подходящий, так как про ардуино.
Добавлено спустя 1 минуту 7 секунд:esisl писал(а):
Нужно по прерываниям.
Есть идея как это сделать? Может, я туплю, но я не придумал как сделать, ведь прерывание обрабатывает ограниченный набор событий, связанных с изменением сигнала на цифровом порте. А дальномер такого типа сигналов не даёт. Найти бы что-то типа цифрового дальномера, который просто сам выдаёт HIGH при расстоянии меньше заданного. Но я не встречал таких. С другой стороны, все пользуются обычными HC-SR04 и вроде, не жалуются. Должно же быть решение...
Добавлено спустя 1 час 33 минуты 21 секунду:dimamichev писал(а):
Тогда можно ограничить в функции pulseIn(pin, value, timeout) значение 3 аргумента до времени возврата на дистанцию не более 40 см и убирать
delay (); из скетча. Или прерывания попробовать использовать. Или спросить на профильном форуме.
Попробовал уменьшить таймаут до примерного соответствия 40 см (при большем расстоянии функция даёт ноль, он заменяется на 100). Действительно, стало гораздо лучше! Теперь линию не теряет, хотя всё же виляет немного больше, чем без обращения к дальномеру. Спасибо за совет, что-то я сам не догадался.
Но всё же если как-то придумать с прерыванием - было бы, наверное, ещё лучше.
Кстати, в прошлый раз забыл ответить про delay. Какой delay вы имели в виду? У меня в скетче вроде бы и нет delay.