Помогите разобраться с кодом.

Тема в разделе "Arduino & Shields", создана пользователем ZolbergN, 2 авг 2016.

  1. ZolbergN

    ZolbergN Нерд

    Здравствуйте, я скинул скетч, подскажите, где я не прав, машинка отказывается выполнять команды с пульта, стоит как вкопанная.
     

    Вложения:

  2. acos

    acos Официальный гик Администратор

    Лучше помещать код в специальные теги. Вот так:

    Код (C++):
    #include <IRremote.h>
    #include <AFMotor.h>
    AF_DCMotor motor1(1);//Верхнее леквое колесо
    AF_DCMotor motor2(2);//Нижнее левое колесо
    AF_DCMotor motor3(3);//Верхнее правое колесо
    AF_DCMotor motor4(4);//Нижнее правое колесо
    int RECV_PIN = 2;
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    void setup()
    {
    Serial.begin(9600); // Задаем скорость передачи в COM
    irrecv.enableIRIn(); // Запуск приемника
    }
    void loop()
    {
       if (irrecv.decode(&results)) {
        Serial.println(results.value);
       
        //Движение вперед...
        if (results.value == 810)
        {
         for(int i = 0; i<2; i++)
         {
         motor1.run(FORWARD);
         motor1.setSpeed(255);
         motor2.run(FORWARD);
         motor2.setSpeed(255);
         motor3.run(FORWARD);
         motor3.setSpeed(255);
         motor4.run(FORWARD);
         motor4.setSpeed(255);
         break;
         }
         irrecv.resume(); // Получаем следующее значение
        }
       
        //Движение назад...
        if (results.value == 910)
        {
         for(int i = 0; i<2; i++)
        {
         motor1.run(BACKWARD);
         motor1.setSpeed(255);
         motor2.run(BACKWARD);
         motor2.setSpeed(255);
         motor3.run(BACKWARD);
         motor3.setSpeed(255);
         motor4.run(BACKWARD);
         motor4.setSpeed(255);
         break;
        }
         irrecv.resume(); // Получаем следующее значение
        }
       
        //Движение вправо...
         if (results.value == 110)
        {
         for(int i = 0; i<2; i++)
        {
         motor1.run(FORWARD);
         motor1.setSpeed(255);
         motor2.run(FORWARD);
         motor2.setSpeed(255);
         motor3.run(BACKWARD);
         motor3.setSpeed(255);
         motor4.run(BACKWARD);
         motor4.setSpeed(255);
         break;
        }
         irrecv.resume(); // Получаем следующее значение
        }
       
        //Движение влево...
          if (results.value == 610)
        {
         for(int i = 0; i<2; i++)
        {
         motor1.run(BACKWARD);
         motor1.setSpeed(255);
         motor2.run(BACKWARD);
         motor2.setSpeed(255);
         motor3.run(FORWARD);
         motor3.setSpeed(255);
         motor4.run(FORWARD);
         motor4.setSpeed(255);
         break;
        }
         irrecv.resume(); // Получаем следующее значение
        }
      }  
    }
     
     
  3. acos

    acos Официальный гик Администратор

    А в терминал то что-нибудь пишет?
     
  4. ZolbergN

    ZolbergN Нерд

    Так скетч он загружает в ардуино, просто сама плата не реагирует на кнопки пульта
     
  5. fogary

    fogary Гик

    Для чего Вы используете break в циклах? По сути, цикл for делает только один проход, вместо двух, заданных в параметрах цикла.
    Коды, полученные с пульта, соответствуют значениям в проверках?
     
  6. Valera_gug

    Valera_gug Нерд

    покажите как вы собрали железо
     
  7. acos

    acos Официальный гик Администратор

    Там же написано:

    Код (C++):
       if (irrecv.decode(&results)) {
        Serial.println(results.value);
    И далее: ежели value == чему-то там...
    А ежели не равно? Тогда ничего и не будет. А как узнать, чему оно всё-таки равно? Правильно - посмотреть в терминал
     
  8. Valera_gug

    Valera_gug Нерд

    Вариант №1
    Вы неправильно подключили железо
    Вариант №2
    вы не правильно его инициализировали
    http://robotosha.ru/arduino/motor-shield.html