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) = 10HzWhat % of processor time is unused?
1 - 10Hz/1MHz = 99.999%Solution: millis()
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
- Make your animation code concurrent.
- Control your animation via user input.
- Control another component via user input (e.g. RGB LEDs, Servos, ...)