Помогите с кодом на Arduino mega 2560 - ФОРУМ ДВ Робот dvrobot.ru
Пятница, 16.11.2018, 05:46
Главная Мой профиль Регистрация Выход
  • НАШ МАГАЗИН
  • Вы вошли как Гость | Группа "Гости"Приветствую Вас, Гость
    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: Serg, GRACH  
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Помогите с кодом на Arduino mega 2560 (Надо усовуршенствовать код.)
    Помогите с кодом на Arduino mega 2560
    palagnyukvovanДата: Среда, 27.11.2013, 05:23 | Сообщение # 1
    1.5 Вольт
    Группа: Пользователи
    Сообщений: 3
    Репутация: 0
    Статус: Offline
    Здраствуйте!
    Создал робота на 4 колесах + камера .
    К дуине подключена L298N
    Управление реализовано по Wi FI через роутер WR703N.
    Написал код на дуину, вьо работает. НО хотелось бы не так.
    1 реализовать плавний пуск  двигателей.
    2 плавное управление камерой, а не рывками.
    и т.д.
    код:
    Код
    #include <Servo.h>   
       Servo servo1;   
       Servo servo2;   
       const int SERVO1_PIN = 8;   
       const int SERVO2_PIN = 9;   
       const int MAX_POS = 1023;   
       const int MAX_ANGLE = 180;   

       int incomingByte;   
       void setup()   
       {   
       servo1.attach(SERVO1_PIN);   
       servo2.attach(SERVO2_PIN);   

       pinMode(2, OUTPUT); // L298N   
       pinMode(3, OUTPUT); // L298N   
       pinMode(4, OUTPUT); // L298N   
       pinMode(5, OUTPUT); // L298N   
       pinMode(6, OUTPUT); // ШИМ   
       pinMode(7, OUTPUT); // ШИМ   
       pinMode(10, OUTPUT); // Сигнал   
       pinMode(11, OUTPUT); // Фары   
       Serial.begin(115200);   
       }   

       void loop()   
       {   
       if (Serial.available() > 0) {   
       incomingByte = Serial.read();   
       // Установка серво 1 в среднее положение   
       if (incomingByte == '5') {   
       servo1.write(90);   
       }   
       // Установка серво 2 в среднее положение   
       if (incomingByte == '5') {   
       servo2.write(90);   
       }   
       // При нажатой 8 повернуть серво 1 на 180 и при отсуствии возвратить в середину   
       if (incomingByte == '8') {   
       servo1.write(180);   
       delay(150);   
       servo1.write(90);   
       }   
       // При нажатой 2 повернуть серво 1 на 10 и при отсуствии возвратить в середину   
       if (incomingByte == '2') {   
       servo1.write(10);   
       delay(150);   
       servo1.write(90);   
       }   
       // При нажатой 4 повернуть серво 2 на 180 и при отсуствии возвратить в середину   
       if (incomingByte == '4') {   
       servo2.write(180);   
       delay(150);   
       servo2.write(90);   
       }   
       // При нажатой 6 повернуть серво 2 на 10 и при отсуствии возвратить в середину   
       if (incomingByte == '6') {   
       servo2.write(10);   
       delay(150);   
       servo2.write(90);   
       }   
       // При нажатой 7 повернуть серво 1 на 180 и при отсуствии возвратить в середину   
       // При нажатой 7 повернуть серво 2 на 180 и при отсуствии возвратить в середину   
       if (incomingByte == '7') {   
       servo1.write(180);   
       servo2.write(180);   
       delay(150);   
       servo1.write(90);   
       servo2.write(90);   
       }   
       // При нажатой 9 повернуть серво 1 на 180 и при отсуствии возвратить в середину   
       // При нажатой 9 повернуть серво 2 на 10 и при отсуствии возвратить в середину   
       if (incomingByte == '9') {   
       servo1.write(180);   
       servo2.write(10);   
       delay(150);   
       servo1.write(90);   
       servo2.write(90);   
       }   
       // При нажатой 1 повернуть серво 1 на 10 и при отсуствии возвратить в середину   
       // При нажатой 1 повернуть серво 2 на 180 и при отсуствии возвратить в середину   
       if (incomingByte == '1') {   
       servo1.write(10);   
       servo2.write(180);   
       delay(150);   
       servo1.write(90);   
       servo2.write(90);   
       }   
       // При нажатой 3 повернуть серво 1 на 10 и при отсуствии возвратить в середину   
       // При нажатой 3 повернуть серво 2 на 10 и при отсуствии возвратить в середину   
       if (incomingByte == '3') {   
       servo1.write(10);   
       servo2.write(10);   
       delay(150);   
       servo1.write(90);   
       servo2.write(90);   
       }   
       digitalWrite(6, HIGH);// ето в место ШИМ   
       digitalWrite(7, HIGH);// еио в место ШИМ   
       // При нажатой Q двигатся влево передним ходом   
       if (incomingByte == 'Q') {   
       digitalWrite(2, HIGH);   
       digitalWrite(5, HIGH);   
       delay(120);   
       digitalWrite(2, LOW);   
       digitalWrite(5, LOW);   
       }   
       // При нажатой W двигатся вперед   
       if (incomingByte == 'W') {   
       digitalWrite(2, HIGH);   
       digitalWrite(3, HIGH);   
       delay(120);   
       digitalWrite(2, LOW);   
       digitalWrite(3, LOW);   
       }   
       // При нажатой E двигатся вправопередним ходом   
       if (incomingByte == 'E') {   
       digitalWrite(3, HIGH);   
       digitalWrite(4, HIGH);   
       delay(120);   
       digitalWrite(3, LOW);   
       digitalWrite(4, LOW);   
       }   
       // При нажатой A двигатся влево задним ходом   
       if (incomingByte == 'A') {   
       digitalWrite(4, HIGH);   
       digitalWrite(3, HIGH);   
       delay(120);   
       digitalWrite(4, LOW);   
       digitalWrite(3, LOW);   
       }   
       // При нажатой S двигатся назад   
       if (incomingByte == 'S') {   
       digitalWrite(4, HIGH);   
       digitalWrite(5, HIGH);   
       delay(120);   
       digitalWrite(4, LOW);   
       digitalWrite(5, LOW);   
       }   
       // При нажатой D двигатся вправо задним ходом   
       if (incomingByte == 'D') {   
       digitalWrite(5, HIGH);   
       digitalWrite(2, HIGH);   
       delay(120);   
       digitalWrite(5, LOW);   
       digitalWrite(2, LOW);   
       }   
       // При нажатой R посигналить   
       if (incomingByte == 'R') {   
       digitalWrite(10, HIGH);   
       delay(120);   
       digitalWrite(10, LOW);   
       }   
       // При нажатой F включить фари   
       if (incomingByte == 'F') {   
       digitalWrite(11, HIGH);   
       }   
       // При нажатой G виключить фари   
       if (incomingByte == 'G') {   
       digitalWrite(11, LOW);   
       }   
       }   
       }


    Добавлено (27.11.2013, 05:23)
    ---------------------------------------------
    Можно так реализовать ШИМ, но при отпускании кнопки моторы не останавливаются пока не достигнут значения 256. А надо чтоб останавливались при отпускании кнопки, тоисть надо чтоб был разгон тока тогда когда есть команда.
    Код
    void loop()
    {
    int value;
    for(value = 0; value <= 256; value+=5)
    {
    digitalWrite(M1,HIGH);
    digitalWrite(M2, HIGH);
    analogWrite(E1, value);//PWM Speed Control
    analogWrite(E2, value);//PWM Speed Control
    delay(30);
    }
    }

    cry


    Сообщение отредактировал palagnyukvovan - Среда, 27.11.2013, 05:24
     
    SergДата: Среда, 27.11.2013, 19:39 | Сообщение # 2
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Ну, судя по программе, у Вас вообще нет кнопок, а все управление происходит с помощью чтения байтов с порта UART.
    Попробуйте ввести дополнительную переменную-флаг, которая будет сигнализировать о наличии управляющих байтов. Появились байты- установили флаг, прочитали байты. Запустили соответствующую функцию разгона двигателя ШИМ-ом. Как только сбросился флаг- запустили функцию остановки двигателя без ШИМ.
    Ну как-то так....
     
    palagnyukvovanДата: Четверг, 28.11.2013, 03:15 | Сообщение # 3
    1.5 Вольт
    Группа: Пользователи
    Сообщений: 3
    Репутация: 0
    Статус: Offline
    Да управление идет по UART. Набросайте код а то мне тут ниче не понятно...
     
    SergДата: Четверг, 28.11.2013, 18:05 | Сообщение # 4
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Код
    void loop()     
         {     
         if (Serial.available() > 0) { // если есть принятые байты- если нажата кнопка, то байты идут непрерывно
         incomingByte = Serial.read();// читаем эти байты и выполняем команды
           ////тут множество условий проверки байтов (букв A B W E Q R T)
             if
             if
             if
               ...........
               ...........
               ...........
               }
    else {// а если нет байтов, если кнопку отпустили
    ...........//// выполняем функцию торможения двигателей
    ...........
          }
       }
     
    palagnyukvovanДата: Пятница, 29.11.2013, 04:21 | Сообщение # 5
    1.5 Вольт
    Группа: Пользователи
    Сообщений: 3
    Репутация: 0
    Статус: Offline
    Ум....
    Спасибо вам за помощь.
    Интегрируйте пожалуйста свою подсказку в мой код, а то я не справляюсь. Не получается.
    Спасибо!
     
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Помогите с кодом на Arduino mega 2560 (Надо усовуршенствовать код.)
    • Страница 1 из 1
    • 1
    Поиск:

    ДВ Робот - Чат