Здравствуйте! Я работаю над роботом, который может и ездить по линии и объезжать препятствия. Для его создания понадобилось: 1. два датчика линии(от амперки). 2. роботизированная платформа с 2 ведущими колёсами. 3. Arduino Uno. 4. Motor Drive Shield dual L239D. 5. Инфракрасный датчик препятствий. Мне удалось добиться того, чтобы робот работал по разным программам. Объезжал препятствия 1 код. Код (C++): #include <AFMotor.h> AF_DCMotor motor_b1(2); AF_DCMotor motor_b2(3); const int front_1 = 9; const int time_90 = 305; void set_speed(int speed) { motor_b1.setSpeed(speed); motor_b2.setSpeed(speed); } void robot_forward(){ motor_b1.run(FORWARD); motor_b2.run(FORWARD); } void robot_backward(){ motor_b1.run(BACKWARD); motor_b2.run(BACKWARD); } void robot_release(){ motor_b1.run(RELEASE); motor_b2.run(RELEASE); } void turning_to_the_right(){ motor_b1.run(FORWARD); motor_b2.run(BACKWARD); delay(time_90); } void turning_to_the_left(){ motor_b2.run(FORWARD); motor_b1.run(BACKWARD); delay(time_90); } void setup() { set_speed(255); pinMode(front_1, INPUT); } void loop() { boolean d_front_1; d_front_1 = digitalRead(front_1); if (d_front_1) { robot_forward(); delay(200); } else { robot_release(); delay(1000); turning_to_the_right(); robot_release(); delay(1000); robot_forward(); delay(1000); robot_release(); delay(1000); turning_to_the_left(); robot_release(); delay(1000); robot_forward(); delay(1000); robot_release(); delay(1000); turning_to_the_left(); robot_release(); delay(1000); robot_forward(); delay(1000); robot_release(); delay(1000); turning_to_the_right(); robot_release(); delay(1000); } } Следовал по линии 2 код. Код (C++): #include <AFMotor.h> AF_DCMotor motor_b1(2); AF_DCMotor motor_b2(3); #define LEFT_SENSOR_PIN 9 #define RIGHT_SENSOR_PIN 10 void set_speed(int speed) { motor_b1.setSpeed(speed); motor_b2.setSpeed(speed); } void robot_forward() { motor_b1.run(FORWARD); motor_b2.run(FORWARD); delay(1000); } void robot_backward() { motor_b1.run(BACKWARD); motor_b2.run(BACKWARD); delay(1000); } void robot_release() { motor_b1.run(RELEASE); motor_b2.run(RELEASE); delay(1000); } void turning_to_the_right() { motor_b1.run(FORWARD); motor_b2.run(BACKWARD); delay(1); } // поворот налево void turning_to_the_left() { motor_b2.run(FORWARD); motor_b1.run(BACKWARD); delay(1); } void setup() { set_speed(200); robot_forward(); } void loop() { boolean left = !digitalRead(LEFT_SENSOR_PIN); boolean right = !digitalRead(RIGHT_SENSOR_PIN); if (left == right) { robot_forward(); } else if (left) { turning_to_the_left(); } else if (right) { turning_to_the_right(); } } Поможете их совместить в один, пожалуйста.
Блин, что за идиоты. Линии на препятсвия наводят, а потом нужны программы, что бы это идиотизм решать.
Вынеси сценарий объезда препятствия (без проверки его наличия) из loop в отдельную функцию и сценарий следования по линии в другую функцию. В loop: Проверяешь наличие препятствия Если препятствие есть -> вызвать функцию объезда если препятствия нет следовать по линии Как ты будешь искать линию после объезда не знаю - нужен третий сценарий. Вообще какая привязка задачи к реальному миру? Завал на пути следования?