Добрый вечер! Помогите разобраться с кодом. В программировании я еще новичок. Объясните, пожайлуста, как сделать, чтобы не выполнялось одновременно 3 условия. Дело в том, что когда робот находит два значения, больше нужного, по идеи он должен развернуться, что он иделает, но при этом выполняются два других условия(поворот направо и налево) и получается, что он разворачивается на 180, потом направо, а уж затем налево. Код (Text): #include <Servo.h> //инцилизация библиотеки серводвигателя const int dangerThresh = 30;//переменная для хранения информации о расстоянии при котором робот остановиться const int patch = 40; int leftDistance, rightDistance; //переменные для хранения информации о расстоянии в двух направлении Servo panMotor; const int Trig = 11; const int Echo = 12; long distance_sm; long time_us; struct MOTOR // структура для хранения номеров pin-ов, к которым подключены моторчики { int in; // INVERTOR INPUT int enable; // ENABLE1 }; // определяем порты, к которым подключены моторчики MOTOR MOTOR1 = { 7, 9 }; MOTOR MOTOR2 = { 8, 10 }; int FORWARD = HIGH; int BACK = LOW; void setup() { panMotor.attach(6); //присоединяем серво к пину ардуино panMotor.write(90); //ставим датчик по центру pinMode(Trig, OUTPUT);//ввод и вывод датчка pinMode(Echo, INPUT); pinMode(MOTOR1.in, OUTPUT); // настраиваем выводы pinMode(MOTOR2.in, OUTPUT); } void loop() { int distanceFwd =ping(); if (distanceFwd>dangerThresh) //если путь чист { motor1(FORWARD,255); motor2(FORWARD,255); //движемся вперед } else //если путь заблокирован { motor1(FORWARD,0);//останавливаемся motor2(FORWARD,0); panMotor.write(0); delay(500); rightDistance = ping(); //сканируем правую сторону delay(500); panMotor.write(180); delay(700); leftDistance = ping(); //сканируем левую сторону delay(500); panMotor.write(90); //возвращаем датчик в центр delay(100); if(rightDistance>patch)//сравниваем правую сторону { motor1(FORWARD,0); motor2(FORWARD,255); delay(100); } if(leftDistance>patch)//сравниваем левую сторону { motor1(FORWARD,255); motor2(FORWARD,0); delay(100); } if(leftDistance && rightDistance<patch)//если правая и левая сторона меньше значению переменной { motor1(BACK,255); motor2(BACK,125); delay(1500); } if(leftDistance && rightDistance>patch)//если правая и левая сторона больше знаения переменной { motor1(BACK,0); motor2(FORWARD,255); delay(800); } } } long ping() { digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера delayMicroseconds(10); // Удерживаем 10 микросекунд digitalWrite(Trig, LOW); // Затем убираем time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=time_us/58; // Пересчитываем в сантиметры return distance_sm; } void motor1(int dir, int pwm) // первый вперёд { digitalWrite(MOTOR1.in, dir); analogWrite(MOTOR1.enable, pwm); } void motor2(int dir, int pwm) // второй вперёд { digitalWrite(MOTOR2.in, dir); analogWrite(MOTOR2.enable, pwm); }
А что вы конкретно хотели проверить в 3 и 4 условии? Код (Text): if((leftDistance<patch) && (rightDistance<patch)) { ... } if((leftDistance<patch) && (rightDistance>patch)) { ... } Может вы это имели ввиду?