Всем привет! Пытаюсь сделать управление двигателями на 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 В чём может быть проблема? Спасибо.
Может быть тот же фокус, что и с библиотекой Servo? Там для собственных нужд отбирается таймер (ы?), используемый для организации ШИМ на выводе 9 и еще каком-то. В результате analogWrite на 9-й пин просто не работает. Решение в этом случае - перекинуть EN1 на другой свободный пин с поддержкой ШИМ. Если для управления двигателями используется шилд, подключаемый обычным образом, это означает отгибание на нем контакта, соответствующего пину 9, чтобы разорвать соединение, и установку перемычки на верхнем шилде бутерброда между 9-пином и выбранным.
Спасибо за ответ. Поколдовал с выводами - попробовал разные варианты, но результат такой же - работает только один из двигателей. Один из вариантов: Код (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, но безуспешно.
Можно про это подробней? Что значит "подключаемый обычным образом"? Перемычки на шилде я убрал, чтобы иметь возможность управлять скоростью двигателей. С ними (перемычками) работают оба двигателя, но это не совсем то, что мне надо.
Обычным образом - это непосредственно посаженный на контакты ардуины, а не подключенный проводами. Перемычка, о которой я писал (можно проводом, можно перемычкой из набора перемычек) ставится на гребенке контактов шилда для того, чтобы перекинуть пин на шилде, который обычно жестко назначен, на свободный пин. Причем шилдовский пин должен быть отогнут, чтобы не было соединения с ардуиной. Собственные перемычки шилда к данному вопросу отношения не имеют, если, конечно, они не позволяют как-то переназначить рабочие пины шилда
Да, так и есть. Поменял на другой пин и всё заработало. Спасибо! ЗЫ Плохо, что автор либы IRremote не описал эту особенность. По его коду я так и не увидел, где юзается пин 9. Здесь https://github.com/shirriff/Arduino-IRremote/blob/master/IRremoteInt.h#L67 видно, что используются пины 3 и 9, но этот хедер не используется в моём коде.. Вопросов больше, чем ответов.
Если моя догадка верна, то этот пин, как и в библиотеке Servo, явным образом не используется. Используется только таймер, который связан с организацией ШИМ на этом пине, в результате на нем не работает analogWrite.