Arduino Uno имеет шесть контактов, предназначенных для широтно-импульсной модуляции (ШИМ или PWM). ШИМ отлично подходит для аналогового управления скоростью двигателей или зажиганием светодиодов. Но что, если вы хотите контролировать более 6 устройств? Или что, если вы используете линии ШИМ для управления сервомоторами, но все же хотите вывести светодиод на 7-й вывод?

Один из вариантов – изменение платы. Например, вы можете перейти на Arduino Mega 2560. Но это означает, что вы берете более крупную плату, что сулит больше затрат, как и при использовании дополнительных шилдов расширения. Тем не менее, выход есть. Используя функции millis() и micros(), можно полностью реализовать ШИМ программным способом. В этом материале приводится код, с помощью которого вы можете, используя функции micros() и millis(), получить больше линий ШИМ на Arduino Uno, Nano или Pro Mini. Вероятно, эта техника будет работать на других платах экосистемы Arduino.