работа лазеров от двух ультразвуковых датчиков
- Войдите на сайт для отправки комментариев
Ср, 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 врубает лазеры.