Skip to content

Session 12: Multitasking

Exercise: Estimate

Good: Arduino processor frequency ~16MHz (empty loop() ~1MHz)

Problem: delay() in every loop

loop frequency with delay(100)? Ans: 1/(100ms) = 10Hz
What % of processor time is unused? 1 - 10Hz/1MHz = 99.999%

Solution: millis()

long time = millis(); // milliseconds since program start

Code Snippets

concurrent delay

long myFunctionTimer = 0;
void myFunction(){
    if(millis() > myFunctionTimer){
        // do stuff
        myFunctionTimer = millis() + 100;
    }
}

concurrent 'loops'

int x = 0;
void animate(){

    show_led_matrix();
    set_led_matrix_pixel(x, 0, HIGH);

    x++;
    if (!(x<8)){
        x=0;
        clear_led_matrix();
    }

}

Exercise: Practical

  1. Make your animation code concurrent.
  2. Control your animation via user input.
  3. Control another component via user input (e.g. RGB LEDs, Servos, ...)