Ono podle zadání 2000 RPM a 16 pulzů na otáčku vychází:
- čas mezi pulzy T1=1.875ms
- při FCPU 16MHz, je to 30000 taktů CPU
Za 30000 taktů CPU lze stihnout docela dost operací. Pro začátek, jak se psalo výše by to šlo otestovat i bez interruptu.
Odstranění zákmitů softférově:
- Udělat digitalRead(),
- udělat impuls od nástupné hrany,
- spustit non-blocking softférový časovač na 1ms,
- po dobu chodu ignorovat vstup.
Další: Protože má kotouč 16 dílků, tak proměnná tik se nemusí nulovat. Stačí nechat volně běžet. Hodnotu 0..15 lze získat bitovým AND jako: tik_loop = 0x0F & tik.
Zkus se podívat na arduino fórum, jak se dělá non-blocking softférový časovač.
https://forum.arduino.cc/t/flashing-multiple-leds-at-the-same-time/1065564/2
https://forum.arduino.cc/t/example-code-for-timing-based-on-millis-easier-to-understand-through-the-use-of-example-numbers-avoiding-delay/974017