Не работают совместно IRremote + L298

Тема в разделе "Arduino & Shields", создана пользователем hobot, 31 май 2014.

  1. hobot

    hobot Нуб

    Всем привет!
    Пытаюсь сделать управление двигателями на L298 по ИК.

    Код:
    Код (Text):

    #include "IRremote.h"

    int IN1 = 7;
    int IN2 = 6;
    int IN3 = 5;
    int IN4 = 4;
    int EN1 = 9;
    int EN2 = 3;

    int receiver = 11;

    IRrecv irrecv(receiver);          // create instance of 'irrecv'
    decode_results results;            // create instance of 'decode_results'

    void setup()
    {
      pinMode (EN1, OUTPUT);
      pinMode (EN2, OUTPUT);

      pinMode (IN1, OUTPUT);
      pinMode (IN2, OUTPUT);
      pinMode (IN4, OUTPUT);
      pinMode (IN3, OUTPUT);

      irrecv.enableIRIn();
    }

    void loop()
    {
      digitalWrite (IN2, HIGH);
      digitalWrite (IN1, LOW);
      digitalWrite (IN4, HIGH);
      digitalWrite (IN3, LOW);

      analogWrite (EN1, 50); // включаем двигатель А
      analogWrite (EN2, 50); // включаем двигатель B
    }
     
    Если убрать строку
    Код (Text):
    irrecv.enableIRIn();
    то работают оба двигателя. С этой строкой работает только один двигатель А.
    Использую два двигателя постоянного тока. Подключал вот так http://zelectro.com.ua/Media/Default/Periphery/14_L298N_module/L298N_2_mot.jpg

    В чём может быть проблема?

    Спасибо.
     
  2. geher

    geher Гуру

    Может быть тот же фокус, что и с библиотекой Servo?
    Там для собственных нужд отбирается таймер (ы?), используемый для организации ШИМ на выводе 9 и еще каком-то. В результате analogWrite на 9-й пин просто не работает.

    Решение в этом случае - перекинуть EN1 на другой свободный пин с поддержкой ШИМ.

    Если для управления двигателями используется шилд, подключаемый обычным образом, это означает отгибание на нем контакта, соответствующего пину 9, чтобы разорвать соединение, и установку перемычки на верхнем шилде бутерброда между 9-пином и выбранным.
     
  3. hobot

    hobot Нуб

    Спасибо за ответ.
    Поколдовал с выводами - попробовал разные варианты, но результат такой же - работает только один из двигателей.

    Один из вариантов:
    Код (Text):

    int IN1 = 13;
    int IN2 = 12;
    int IN3 = 8;
    int IN4 = 7;

    int EN1 = 5;
    int EN2 = 6;

    int receiver = 5;
     
    Про таймеры, возможно, Вы правы. Использую эту либу https://github.com/shirriff/Arduino-IRremote
    В ней используются таймеры, но моих знаний пока что не хватает, чтобы разобраться с этим.
    Для управления двигателями использую шилд, как на картинке http://zelectro.com.ua/Media/Default/Periphery/14_L298N_module/L298N_2_mot.jpg
    Плата Funduino UNO. Пробовал на Seeduino ADK, но безуспешно.
     
  4. hobot

    hobot Нуб

    Можно про это подробней? Что значит "подключаемый обычным образом"?
    Перемычки на шилде я убрал, чтобы иметь возможность управлять скоростью двигателей. С ними (перемычками) работают оба двигателя, но это не совсем то, что мне надо.
     
  5. geher

    geher Гуру

    В этом варианте совпадают пин ресейвера и один из пинов двигателя
     
  6. geher

    geher Гуру

    Обычным образом - это непосредственно посаженный на контакты ардуины, а не подключенный проводами.
    Перемычка, о которой я писал (можно проводом, можно перемычкой из набора перемычек) ставится на гребенке контактов шилда для того, чтобы перекинуть пин на шилде, который обычно жестко назначен, на свободный пин. Причем шилдовский пин должен быть отогнут, чтобы не было соединения с ардуиной.
    Собственные перемычки шилда к данному вопросу отношения не имеют, если, конечно, они не позволяют как-то переназначить рабочие пины шилда
     
  7. hobot

    hobot Нуб

    Да, так и есть.
    Поменял на другой пин и всё заработало.
    Спасибо!

    ЗЫ Плохо, что автор либы IRremote не описал эту особенность. По его коду я так и не увидел, где юзается пин 9.
    Здесь https://github.com/shirriff/Arduino-IRremote/blob/master/IRremoteInt.h#L67 видно, что используются пины 3 и 9, но этот хедер не используется в моём коде.. Вопросов больше, чем ответов.
     
  8. hobot

    hobot Нуб

    Всё понял. Ещё раз спасибо.
     
  9. geher

    geher Гуру

    Если моя догадка верна, то этот пин, как и в библиотеке Servo, явным образом не используется. Используется только таймер, который связан с организацией ШИМ на этом пине, в результате на нем не работает analogWrite.