Luis Silvio Cordova Rivadeneira
/
UPSM_TIMERS
Manejo de Timers
Diff: main.cpp
- Revision:
- 0:57171dc76fb5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 07 20:21:19 2020 +0000 @@ -0,0 +1,142 @@ +#include "mbed.h" +Timer timer1; // define timer object +DigitalOut output1(p5); // digital output + +void task1(void); // task function prototype + +int main() +{ + timer1.start(); // start timer counting + while(1) { + if (timer1.read_ms()>=200) { // read time in ms + task1(); // call task function + timer1.reset(); // reset timer + } + } +} +void task1(void) // task function +{ + output1=!output1; // toggle output +} + +/* +Using multiple timers +*/ +//*** main code +int main() +{ + timer1.start(); // start timer1 counting + timer2.start(); // start timer2 counting + while(1) { + if (timer1.read_ms()>=200) { // read time + task1(); // call task1 function + timer1.reset(); // reset timer + } + if (timer2.read_ms()>=1000) { // read time + task2(); // call task2 function + timer2.reset(); // reset timer + } + } +} +// continued... +// ...continued +//*** task functions +void task1(void) +{ + output1=!output1; // toggle output1 +} +void task2(void) +{ + output2=!output2; // toggle output2 +} + +/* +Using the mbed Ticker object +Exercise: +Use two tickers to create square wave outputs. +Use an LED or an oscilloscope on the +mbed pins to check that the two tickers +are executing correctly. +*/ + +#include "mbed.h" +Ticker flipper1; +Ticker flipper2; +DigitalOut led1(p5); +DigitalOut led2(p6); + +void flip1() // flip 1 function +{ + led1 = !led1; +} + +void flip2() // flip 2 function +{ + led2 = !led2; +} + +int main() +{ + led1 = 0; + led2 = 0; + + flipper1.attach(&flip1, 0.2); // the address of the +// function to be attached +// and the interval (sec) + flipper2.attach(&flip2, 1.0); +// spin in a main loop +// flipper will interrupt it to call flip + + while(1) { + wait(0.2); + } +} + +/* +External interrupts on the mbed +*/ + + +#include "mbed.h" +InterruptIn button(p18); // Interrupt on digital pushbutton input p18 +DigitalOut led1(p5); // digital out to p5 + +void toggle(void); // function prototype + +int main() +{ + button.rise(&toggle); // attach the address of the toggle +} // function to the rising edge + +void toggle() +{ + led1=!led1; +} + +/* +Switch debouncing for interrupt control +*/ + +#include "mbed.h" +InterruptIn button(p18); // Interrupt on digital pushbutton input p18 +DigitalOut led1(p5); // digital out to p5 +Timer debounce; // define debounce timer + +void toggle(void); // function prototype + +int main() +{ + debounce.start(); + button.rise(&toggle); // attach the address of the toggle +} // function to the rising edge + +void toggle() +{ + if (debounce.read_ms()>200) // only allow toggle if debounce timer + led1=!led1; // has passed 200 ms + debounce.reset(); // restart timer when the toggle is performed +} + + + +