Решением вашей проблемы (оставить двигатель в рабочем состоянии) является не ШИМ, а установка состояния штифта в правильной комбинации. Имейте в виду, что код, который вы используете, предназначен для транзисторов с полностью NPN H-Bridge. Ваша схема построена с комбинацией PNP - NPN, таким образом, управление отличается (транзистор NPN обеспечивает ток при насыщении, в то время как PNP-транзистор запрещает ток при насыщении).
Попробуйте изменить ваш код следующим образом:
if (moveServo == 37)
{
digitalWrite(resistor1, LOW);
digitalWrite(resistor2, LOW);
digitalWrite(resistor3, HIGH);
digitalWrite(resistor4, HIGH);
}
else if (moveServo == 39)
{
digitalWrite(resistor3, LOW);
digitalWrite(resistor4, LOW);
digitalWrite(resistor1, HIGH);
digitalWrite(resistor2, HIGH);
}
Обратите внимание, что порядок важен. Сначала установите для одной пары значение НИЗКОЕ, а затем для другой - ВЫСОКОЕ, в противном случае вы закоротите цепь между вызовами функций.
Примечание: Вы можете использовать ШИМ с функцией analogWrite () для управления скоростью двигателя, но вам нужно немного изменить схему: установить дополнительный NPN-транзистор перед землей (коллектор на H-мосте, эмиттер на землю), соединить его базу с Штырь Arduino с поддержкой ШИМ через ограничительный резистор.