Здравствуйте, у меня проблема. Не работает ШИМ в моей программе, точнее работает, но только на макс значении, т.е.analogwrite(SHIM, 255), что равносильно цифровому HIGH. Прога ниже, схема подключения правильная к L298N, подключено 2 движка вот по такой схеме ниже. Питаю от блока питания на 12 вольт моторы и ардуинку отдельно. ШИМ нужен для ограничения скорости моторов Моя прога: #include <IRremote.h> // библиотека #define IR_PIN A5 //вход ИК приемника #define SHIM 3 #define LED1 4 //пины управляющие моторами, светодиодами или реле, чем угодно. #define LED2 5 #define LED3 6 #define LED4 7 #define LED5 8 #define LED6 9 #define LED7 10 #define LED8 11 #define timer 12 IRrecv irrecv(IR_PIN); decode_results results; unsigned long eventTime = 0;//eventTime, для паузы, вместо delay,будем использовать функцию millis. void setup() { irrecv.enableIRIn(); // включить приёмник pinMode(LED1, OUTPUT); // назначаем пины как выходы pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT); pinMode(timer, OUTPUT); pinMode(SHIM, OUTPUT); for (int i = 0; i < 3; i++) { // Сигнал показывающий, что приёмник включён digitalWrite(timer, HIGH); delay(70); digitalWrite(timer, LOW); delay(50); } Serial.begin(9600); } void loop() { if (digitalRead(IR_PIN) == LOW){ // Если обнаружен отрицательный сигнал запускаем таймер,и включаем таймерПИН //(timer, HIGH); eventTime = millis(), analogWrite(SHIM, 105), digitalWrite(timer, HIGH);} // Продолжительность работы таймера >100 миллисекунд. И ТаймерПИН выключаем //(timer, LOW) if (millis() - eventTime > 100){ digitalWrite(timer, LOW), analogWrite(SHIM, 0), digitalWrite(LED1, LOW), digitalWrite(LED2, LOW),digitalWrite(LED3, LOW),digitalWrite(LED4, LOW),digitalWrite(LED5, LOW),digitalWrite(LED6, LOW),digitalWrite(LED7, LOW),digitalWrite(LED8, LOW),digitalWrite(LED9, LOW);} if (irrecv.decode(&results)) { //Если обнаружен сигнал с датчика if (digitalRead(timer) == HIGH) { if (results.value == 0x866B20DF){ digitalWrite(LED1, HIGH);} if (results.value == 0x866B10EF){ digitalWrite(LED2, HIGH);} if (results.value == 0x866B40BF){ digitalWrite(LED3, HIGH);} if (results.value == 0x866BF00F){ digitalWrite(LED4, HIGH);} if (results.value == 0x866BA05F){ digitalWrite(LED5, HIGH);} if (results.value == 0x866B609F){ digitalWrite(LED6, HIGH);} if (results.value == 0x866B30CF){ digitalWrite(LED7, HIGH);} if (results.value == 0x866BB04F){ digitalWrite(LED8, HIGH);} if (results.value == 0x866B50AF){ digitalWrite(LED9, HIGH);} } Serial.println(results.value,HEX); irrecv.resume(); //Принимаем новый сигнал } } Суть моей проги в том, что жмешь на кнопку ИК пульта, мотор работает, не жмешь, не работает. С программой от схемы подключения ШИМ работает, значит дело в моей программе, но где ошибка? На всякий случай рабочая прога int IN3 = 5; // Input3 подключен к выводу 5 int IN4 = 4; int ENB = 3; void setup() { pinMode (ENB, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); } void loop() { // На пару выводов "IN" поданы разноименные сигналы, мотор готов к вращаению digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); // подаем на вывод ENB управляющий ШИМ сигнал analogWrite(ENB,55); delay(2000); analogWrite(ENB,105); delay(2000); analogWrite(ENB,255); delay(2000); // Останавливаем мотор повад на вывод ENB сигнал низкого уровеня. // Состояние выводов "IN" роли не играет. analogWrite(ENB,0); delay(5000); }