Помогите пожалуйста соединить два кода в один.

Тема в разделе "Arduino & Shields", создана пользователем ИВАН 1454, 15 фев 2017.

  1. ИВАН 1454

    ИВАН 1454 Нерд

    Здравствуйте! Я работаю над роботом, который может и ездить по линии и объезжать препятствия. Для его создания понадобилось:
    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();
      }
    }
    Поможете их совместить в один, пожалуйста.
     
  2. qwone

    qwone Гик

    Блин, что за идиоты. Линии на препятсвия наводят, а потом нужны программы, что бы это идиотизм решать.
     
  3. serg_admin

    serg_admin Гик

    Вынеси сценарий объезда препятствия (без проверки его наличия) из loop в отдельную функцию и сценарий следования по линии в другую функцию. В loop:
    1. Проверяешь наличие препятствия
    2. Если препятствие есть -> вызвать функцию объезда
    3. если препятствия нет следовать по линии
    Как ты будешь искать линию после объезда не знаю - нужен третий сценарий.

    Вообще какая привязка задачи к реальному миру? Завал на пути следования?
     
  4. ИВАН 1454

    ИВАН 1454 Нерд

    Да, спасибо, что помогли разобраться