Je zit dan ook niet vast aan PWM pinnen.
Ik ben eens in het micros() gebeuren gedoken, maar dat is een vrij intensief klusje voor de arduino Mega.
void updateTrackPower(){ uint32_t currentTime = micros() ; if( currentTime - prevTime >= 200 ) // 50 HZ { prevTime = currentTime; if( !state ) { PORTB = 0x00 ; // turn off all track pins at once PORTD = 0x00 ; } else if( counter == 0 ) // if counter reaches 100, reset it to 0 and enable the track power pins, begin of cycle { PORTB = 0xFF & track_mask_1 ; // turn on ALL track at the same time. PORTD = 0xFF & track_mask_2 ; // With an AND mask you can pick which tracks go ON and which go OFF // etc } if( counter == dutyCycle[ 0] ) PORTB &= ~TRACK_1_MASK ; // 8 bit comparison are somewhat fast, followed by direct port manipulation if( counter == dutyCycle[ 1] ) PORTB &= ~TRACK_2_MASK ; if( counter == dutyCycle[ 2] ) PORTB &= ~TRACK_3_MASK ; if( counter == dutyCycle[ 3] ) PORTB &= ~TRACK_4_MASK ; if( counter == dutyCycle[ 4] ) PORTB &= ~TRACK_5_MASK ; if( counter == dutyCycle[ 5] ) PORTB &= ~TRACK_6_MASK ; if( counter == dutyCycle[ 6] ) PORTD &= ~TRACK_7_MASK ; if( counter == dutyCycle[ 7] ) PORTD &= ~TRACK_8_MASK ; if( counter == dutyCycle[ 8] ) PORTD &= ~TRACK_9_MASK ; if( counter == dutyCycle[ 9] ) PORTD &= ~TRACK_10_MASK ; if( counter == dutyCycle[10] ) PORTD &= ~TRACK_11_MASK ; if( counter == dutyCycle[11] ) PORTD &= ~TRACK_12_MASK ; if( ++counter > 100) counter = 0 ; // 100 speed steps }}