Есть такой код: Код (C++): #include <AFMotor.h> AF_DCMotor motor3(3); AF_DCMotor motor4(4); #define Trig1 13 #define Trig2 10 #define Echo1 12 #define Echo2 11 long int distance1; long int distance2; int time1; int time2; void setup() { pinMode(Trig1,OUTPUT); pinMode(Echo1,INPUT); pinMode(Trig2,OUTPUT); pinMode(Echo2,INPUT); Serial.begin(9600); } void loop() { measure1(); delay(50); measure2(); delay(50); if(distance1 <= 10 && distance2 <= 10) { backward(); Serial.println("backward"); } if(distance1 <10 && distance2 > 10) { rightward(); Serial.println("rightward"); } if(distance1 >= 10 && distance2 < 10); { leftward(); Serial.println("leftward"); } if(distance1 > 10 && distance2 >= 10) { forward(); Serial.println("forward"); } } void forward() { motor3.run(FORWARD); motor4.run(FORWARD); motor3.setSpeed(255); motor4.setSpeed(255); } void backward() { motor3.run(BACKWARD); motor4.run(BACKWARD); motor3.setSpeed(255); motor4.setSpeed(255); } void leftward() { motor4.run(FORWARD); motor4.setSpeed(255); } void rightward() { motor3.run(FORWARD); motor3.setSpeed(255); } void measure1() { digitalWrite(Trig1, HIGH); delayMicroseconds(10); digitalWrite(Trig1, LOW); time1 = pulseIn(Echo1, HIGH); distance1 = time1/58; } void measure2() { digitalWrite(Trig2, HIGH); delayMicroseconds(10); digitalWrite(Trig2, LOW); time2 = pulseIn(Echo2, HIGH); distance2 = time2/58; } Но при запуске робот работает некорректно и не поворачивает в зависимости от значений датчиков. Добавил монитор порта,чтобы посмотреть в чём проблема.Увидел,что почему-то выполняются сразу две процедуры.Просьба указать на ошибку в коде.
у тебя в коде это явно прописано Если должен выпоняться только один if, то перед всеми (кроме первого) надо поставить else: И вообще, 6 одинаковых функций можно сократить до двух.
Код (C++): if(distance1 <= 10 && distance2 <= 10) Код (C++): if(distance1 >= 10 && distance2 < 10); Пересечение на равенствах при distance1 = 10 и distance2 < 10