Роботезированая платформа на базе Arduino с возможностью р/у правления

Тема в разделе "Arduino & Shields", создана пользователем molalex, 1 июл 2014.

  1. molalex

    molalex Нерд

    Собрал платформу на базе ArduinoUNO+ шилд на 6 реле + 2 двигателя от стеклоподъемников + р/у Futaba 10.

    Создал скетч платформа классно ездит в перед и назад но разворачиваться не хочет. Продолжает двигаться вперед и назад.

    Программ прилогается


    int pin_in_1 = 11;
    int pin_in_2 = 12;
    unsigned long in_1;
    unsigned long in_2;

    int led1 = 2;
    int led2 = 3;
    int led3 = 4;
    int led4 = 5;
    int led5 = 6;
    int led6 = 7;

    void setup()
    {
    Serial.begin(9600);
    pinMode(pin_in_1, INPUT);
    pinMode(pin_in_2, INPUT);

    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(led4, OUTPUT);
    pinMode(led5, OUTPUT);
    pinMode(led6, OUTPUT);

    }

    void loop()
    {
    in_2 = pulseIn(pin_in_2, INPUT);
    in_1 = pulseIn(pin_in_1, INPUT);
    //движение вперед назад
    if (in_1<14200) // Если значение менее 14200 едем вперед
    {
    digitalWrite(led2, HIGH);
    digitalWrite(led4, HIGH);
    }
    else if (in_1>14420)
    {
    digitalWrite(led2, LOW);
    digitalWrite(led4, LOW);
    }
    delay(100);
    if (in_1>14800) // Если значение больше 14800 едем назад
    {
    digitalWrite(led3, HIGH);
    digitalWrite(led1, HIGH);
    }
    else if (in_1>14420)
    {
    digitalWrite(led3, LOW);
    digitalWrite(led1, LOW);
    }
    delay(100);


    //повороты
    if (in_2>14100) // Если значение больше 14100 поворот в право
    {
    digitalWrite(led1, HIGH);
    digitalWrite(led4, HIGH);
    }
    else
    {
    digitalWrite(led1, LOW);
    digitalWrite(led4, LOW);
    }
    delay(100);

    if (in_2>14600) // Если значение больше 14600 поворот в лево
    {
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    }
    else
    {
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    }
    delay(100);


    }
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Вот тут случаем не напутали?
    if (in_2>14100)
    if (in_2>14600)

    Чтобы узнать, чем на самом деле занимается программа, следует вставлять отладочный вывод в последовательный порт интересующих переменных в нужных ветках программы.
     
  3. molalex

    molalex Нерд

    Я выводил значение переменных на экран in_1 и in_2

    значение in_1

    14800 позиция вперед

    14400 средняя позиция

    14100 позиция назад

    значение in_2

    14800 позиция вправо

    14400 средняя позиция

    14100 позиция влево

    функцию IFя изменил

    теперь скетч выглядит так.

    if (in_1<14400 && in_1>14100) // Если значение менее 14200 едем вперед
    {
    digitalWrite(led2, HIGH);
    digitalWrite(led4, HIGH);
    }
    else if (in_1>14420)
    {
    digitalWrite(led2, LOW);
    digitalWrite(led4, LOW);
    }
    delay(100);
    if (in_1>14500 && in_1<14900) // Если значение больше 14800 едем назад
    {
    digitalWrite(led3, HIGH);
    digitalWrite(led1, HIGH);
    }
    else //if (in_1>14420)
    {
    digitalWrite(led3, LOW);
    digitalWrite(led1, LOW);
    }
    delay(100);


    //повороты
    if (in_2<14300 && in_2>13900) // Если значение больше 14100 поворот в право
    {
    digitalWrite(led1, HIGH);
    digitalWrite(led4, HIGH);
    }
    else
    {
    digitalWrite(led1, LOW);
    digitalWrite(led4, LOW);
    }
    delay(100);

    if (in_2>14400 && in_2<14900) // Если значение больше 14600 поворот в лево
    {
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    }
    else
    {
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    }
    delay(100);
    Serial.println(in_2);
     
  4. molalex

    molalex Нерд

    Фото самой платформы IMG_20140702_110129.jpg IMG_20140702_110151.jpg
     
    ИгорьК нравится это.
  5. Morales

    Morales Нерд

    а попробуйте так

    Код (Text):
    //движение
      if (in_1>14700 && in_1<14900 && in_2>14300 && in_2<14500) // едем назад
      {
        digitalWrite(led2, LOW);
        digitalWrite(led4, LOW);
        digitalWrite(led3, HIGH);
        digitalWrite(led1, HIGH);
      }

    if (in_1>14300 && in_1<14500 && in_2>14300 && in_2<14500) // stop
      {
        digitalWrite(led2, LOW);
        digitalWrite(led4, LOW);
        digitalWrite(led3, LOW);
        digitalWrite(led1, LOW);
      }

      if (in_1>14000 && in_1<14200 && in_2>14300 && in_2<14500) // едем вперед
      {
        digitalWrite(led2, HIGH);
        digitalWrite(led4, HIGH);
        digitalWrite(led3, LOW);
        digitalWrite(led1, LOW);
      }

    //повороты
    if (in_1>14300 && in_1<14500 && in_2>14000 && in_2<14200) //поворот вправо
    {
      digitalWrite(led2, HIGH);
      digitalWrite(led3, HIGH);
      digitalWrite(led1, LOW);
      digitalWrite(led4, LOW);
      }

      if (in_1>14300 && in_1<14500 && in_2>14700 && in_2<14900) // поворот влево
      {
      digitalWrite(led1, HIGH);
      digitalWrite(led4, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
      }
     
     
    Последнее редактирование: 3 июл 2014
  6. molalex

    molalex Нерд

    Спасибо заработало, только на зад не идет, но думаю с этим я разберусь.;)
     
  7. Morales

    Morales Нерд

    исправил ошибочку :rolleyes:
     
  8. molalex

    molalex Нерд

    Исправил все работает.:D