работа лазеров от двух ультразвуковых датчиков
- Войдите на сайт для отправки комментариев
Ср, 19/02/2020 - 13:20
Всем привет
Нужно чтобы при обнаружении объекта одним из двух или сразу двух датчиков на определенной дистанции срабатывали 4 лазера. При включении все лазеры горят,и перестают если поставить обе дистанции на 0. Что не так с кодом?
int laser1 = 5; int laser2 = 7; int laser3 = 6; int laser4 = 8; int trig1 = 12; int echo1 = 13; int trig2 = 3; int echo2 = 2; void setup() { pinMode(trig1, OUTPUT); pinMode(trig2, OUTPUT); pinMode(echo1, INPUT); pinMode(echo2, INPUT); pinMode(laser1, OUTPUT); pinMode(laser2, OUTPUT); pinMode(laser3, OUTPUT); pinMode(laser4, OUTPUT); } void loop() { long duration1,distance1; long duration2,distance2; digitalWrite(trig1, LOW); delayMicroseconds(5); digitalWrite(trig1, HIGH); delayMicroseconds(10); digitalWrite(trig1, LOW); digitalWrite(trig2, LOW); delayMicroseconds(5); digitalWrite(trig2, HIGH); delayMicroseconds(10); digitalWrite(trig2, LOW); duration1 = pulseIn(echo1, HIGH); duration2 = pulseIn(echo2,HIGH); distance1 = duration1/ 58.2; distance2 = duration2/ 58.2; if ((distance1 < 10) or (distance2 < 10)) { digitalWrite (laser1,HIGH); digitalWrite (laser2,HIGH); digitalWrite (laser3,HIGH); digitalWrite (laser4,HIGH); } else { digitalWrite (laser1, LOW); digitalWrite (laser2, LOW); digitalWrite (laser3, LOW); digitalWrite (laser4, LOW); } }
комаров будешь испепелять на даче?
Надо начать с того, что бы дистанцию правильно измерять. Нужно работать с датчиками по очереди, а не сразу с обоими. Дал сигнал на первый, померял эхо с него. Потом тоже самое со вторым. А рассчитанные дистанции, для начала, выводи в Serial, что бы было видно правильно ли все сделано. А уж потом лазеры включать будешь, когда с дистанцией все нормально будет
Нет так с автором, который не может объяснить словами что именно должен делать код. А когда не можешь объяснить словами, то программу написать невозможно.
я что-то проспал? давно так можно в С писать, или это особенность Wiring?
Эко ты хитро решил параллельно считывать оба дальномера без корректировки данных.
В С++ - точно можно. В С ... склероз ... щас гляну ... можно и в Си, если включить <iso646.h>.
В С++ - точно можно. В С ... склероз ... щас гляну ... можно и в Си, если включить <iso646.h>.
спасибо Евгений, в вики почитал подробно, че творится, какая то паскализация С
Эко ты хитро решил параллельно считывать оба дальномера без корректировки данных.
Угу.
При этом второй дает "0" в duration2, каковой ноль в строке 80 врубает лазеры.