Всем привет! Сегодня я пытался привязать моего четырёхколёсного робота и ИК-приёмник, и возникла одна проблема: в скетче, приведённом ниже, D1 и D2 обозначают направление колёс с помощью команд HIGH и LOW, где HIGH– вперёд, а LOW– назад. Но когда я нажимаю на кнопку, например, обозначающую движение назад, то двигатели просто отключаются, или когда я нажимаю на кнопку поворота вправо, то левая пара двигателей начинает движение, а правая – нет. Сам скетч: Код (C++): #include <IRremote.h> #include <Wire.h> #define D1 11 #define M1 6 #define D2 10 #define M2 9 int value = 110; const int IR_PIN = A0; IRrecv irrecv(IR_PIN); decode_results results; const unsigned long vpered = 16736925; const unsigned long nazad = 16754775; const unsigned long vlevo = 16720605; const unsigned long vpravo = 16761405; const unsigned long stopp = 16712445; void setup() { irrecv.enableIRIn(); pinMode(D1, OUTPUT); pinMode(D2, OUTPUT); pinMode(M1, OUTPUT); pinMode(M2, OUTPUT); Serial.begin(9600); } void loop() { if(irrecv.decode(&results)) { Serial.println(results.value); if(results.value == vpered) { digitalWrite(D1, HIGH); digitalWrite(D2, HIGH); analogWrite(M1, value); analogWrite(M2, value); } if(results.value == nazad) { digitalWrite(D1, LOW); digitalWrite(D2, LOW); analogWrite(M1, value); analogWrite(M2, value); } if(results.value == vlevo) { digitalWrite(D1, HIGH); digitalWrite(D2, LOW); analogWrite(M1, 100); analogWrite(M2, 200); } if(results.value == vpravo) { digitalWrite(D1, LOW); digitalWrite(D2, HIGH); analogWrite(M1, 200); analogWrite(M2, 100); } if(results.value == stopp) { digitalWrite(D1, HIGH); digitalWrite(D2, HIGH); analogWrite(M1, 0); analogWrite(M2, 0); } irrecv.resume(); } }
Судя по рисунку на тележке установлен модуль двухканального драйвера двигателей L298N. Не имея такого под рукой и не имея опыта работы с ним (да и с коллекторными двигателями) покопал немного на просторах интернета. Выкопал такую статью http://zelectro.cc/motor_shield_l298n_arduino Возник ряд вопросов по подключению и скетчу. Что скрывается за обозначениями D1 и D2, M1 и M2? В каком режиме работает драйвер - "активный", "пассивный"? Судя по тому, что каждый канал подключен то двум линиям - "пассивный". Но в скетче с помощью ШИМ задаётся скорость вращения. Можно предположить, что схему упростили - IN2 сразу посадили на "землю", а IN1 это D1 и ENA это М1 (по второму каналу аналогично). Тогда всё немного начинает сходиться. Скетч действительно будет работать с указанными _Assassin_ ошибками и реверс двигателей при таком подключении невозможен. Если я прав, то всё исправимо. Для начала прошу автора внимательно посмотреть и сообщить схему подключения драйвера к arduino. Меня интересует куда подключены выводы драйвера (он у вас виден на первом фото) которые на моём рисунке обозначена как "Управляющие выводы"? И стоят-ли у вас джамперы как на рисунке а2?