Luis Silvio Cordova Rivadeneira
/
UPSM_TIMERS
Manejo de Timers
main.cpp@0:57171dc76fb5, 2020-02-07 (annotated)
- Committer:
- lscordovar
- Date:
- Fri Feb 07 20:21:19 2020 +0000
- Revision:
- 0:57171dc76fb5
Manejo de Timers
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lscordovar | 0:57171dc76fb5 | 1 | #include "mbed.h" |
lscordovar | 0:57171dc76fb5 | 2 | Timer timer1; // define timer object |
lscordovar | 0:57171dc76fb5 | 3 | DigitalOut output1(p5); // digital output |
lscordovar | 0:57171dc76fb5 | 4 | |
lscordovar | 0:57171dc76fb5 | 5 | void task1(void); // task function prototype |
lscordovar | 0:57171dc76fb5 | 6 | |
lscordovar | 0:57171dc76fb5 | 7 | int main() |
lscordovar | 0:57171dc76fb5 | 8 | { |
lscordovar | 0:57171dc76fb5 | 9 | timer1.start(); // start timer counting |
lscordovar | 0:57171dc76fb5 | 10 | while(1) { |
lscordovar | 0:57171dc76fb5 | 11 | if (timer1.read_ms()>=200) { // read time in ms |
lscordovar | 0:57171dc76fb5 | 12 | task1(); // call task function |
lscordovar | 0:57171dc76fb5 | 13 | timer1.reset(); // reset timer |
lscordovar | 0:57171dc76fb5 | 14 | } |
lscordovar | 0:57171dc76fb5 | 15 | } |
lscordovar | 0:57171dc76fb5 | 16 | } |
lscordovar | 0:57171dc76fb5 | 17 | void task1(void) // task function |
lscordovar | 0:57171dc76fb5 | 18 | { |
lscordovar | 0:57171dc76fb5 | 19 | output1=!output1; // toggle output |
lscordovar | 0:57171dc76fb5 | 20 | } |
lscordovar | 0:57171dc76fb5 | 21 | |
lscordovar | 0:57171dc76fb5 | 22 | /* |
lscordovar | 0:57171dc76fb5 | 23 | Using multiple timers |
lscordovar | 0:57171dc76fb5 | 24 | */ |
lscordovar | 0:57171dc76fb5 | 25 | //*** main code |
lscordovar | 0:57171dc76fb5 | 26 | int main() |
lscordovar | 0:57171dc76fb5 | 27 | { |
lscordovar | 0:57171dc76fb5 | 28 | timer1.start(); // start timer1 counting |
lscordovar | 0:57171dc76fb5 | 29 | timer2.start(); // start timer2 counting |
lscordovar | 0:57171dc76fb5 | 30 | while(1) { |
lscordovar | 0:57171dc76fb5 | 31 | if (timer1.read_ms()>=200) { // read time |
lscordovar | 0:57171dc76fb5 | 32 | task1(); // call task1 function |
lscordovar | 0:57171dc76fb5 | 33 | timer1.reset(); // reset timer |
lscordovar | 0:57171dc76fb5 | 34 | } |
lscordovar | 0:57171dc76fb5 | 35 | if (timer2.read_ms()>=1000) { // read time |
lscordovar | 0:57171dc76fb5 | 36 | task2(); // call task2 function |
lscordovar | 0:57171dc76fb5 | 37 | timer2.reset(); // reset timer |
lscordovar | 0:57171dc76fb5 | 38 | } |
lscordovar | 0:57171dc76fb5 | 39 | } |
lscordovar | 0:57171dc76fb5 | 40 | } |
lscordovar | 0:57171dc76fb5 | 41 | // continued... |
lscordovar | 0:57171dc76fb5 | 42 | // ...continued |
lscordovar | 0:57171dc76fb5 | 43 | //*** task functions |
lscordovar | 0:57171dc76fb5 | 44 | void task1(void) |
lscordovar | 0:57171dc76fb5 | 45 | { |
lscordovar | 0:57171dc76fb5 | 46 | output1=!output1; // toggle output1 |
lscordovar | 0:57171dc76fb5 | 47 | } |
lscordovar | 0:57171dc76fb5 | 48 | void task2(void) |
lscordovar | 0:57171dc76fb5 | 49 | { |
lscordovar | 0:57171dc76fb5 | 50 | output2=!output2; // toggle output2 |
lscordovar | 0:57171dc76fb5 | 51 | } |
lscordovar | 0:57171dc76fb5 | 52 | |
lscordovar | 0:57171dc76fb5 | 53 | /* |
lscordovar | 0:57171dc76fb5 | 54 | Using the mbed Ticker object |
lscordovar | 0:57171dc76fb5 | 55 | Exercise: |
lscordovar | 0:57171dc76fb5 | 56 | Use two tickers to create square wave outputs. |
lscordovar | 0:57171dc76fb5 | 57 | Use an LED or an oscilloscope on the |
lscordovar | 0:57171dc76fb5 | 58 | mbed pins to check that the two tickers |
lscordovar | 0:57171dc76fb5 | 59 | are executing correctly. |
lscordovar | 0:57171dc76fb5 | 60 | */ |
lscordovar | 0:57171dc76fb5 | 61 | |
lscordovar | 0:57171dc76fb5 | 62 | #include "mbed.h" |
lscordovar | 0:57171dc76fb5 | 63 | Ticker flipper1; |
lscordovar | 0:57171dc76fb5 | 64 | Ticker flipper2; |
lscordovar | 0:57171dc76fb5 | 65 | DigitalOut led1(p5); |
lscordovar | 0:57171dc76fb5 | 66 | DigitalOut led2(p6); |
lscordovar | 0:57171dc76fb5 | 67 | |
lscordovar | 0:57171dc76fb5 | 68 | void flip1() // flip 1 function |
lscordovar | 0:57171dc76fb5 | 69 | { |
lscordovar | 0:57171dc76fb5 | 70 | led1 = !led1; |
lscordovar | 0:57171dc76fb5 | 71 | } |
lscordovar | 0:57171dc76fb5 | 72 | |
lscordovar | 0:57171dc76fb5 | 73 | void flip2() // flip 2 function |
lscordovar | 0:57171dc76fb5 | 74 | { |
lscordovar | 0:57171dc76fb5 | 75 | led2 = !led2; |
lscordovar | 0:57171dc76fb5 | 76 | } |
lscordovar | 0:57171dc76fb5 | 77 | |
lscordovar | 0:57171dc76fb5 | 78 | int main() |
lscordovar | 0:57171dc76fb5 | 79 | { |
lscordovar | 0:57171dc76fb5 | 80 | led1 = 0; |
lscordovar | 0:57171dc76fb5 | 81 | led2 = 0; |
lscordovar | 0:57171dc76fb5 | 82 | |
lscordovar | 0:57171dc76fb5 | 83 | flipper1.attach(&flip1, 0.2); // the address of the |
lscordovar | 0:57171dc76fb5 | 84 | // function to be attached |
lscordovar | 0:57171dc76fb5 | 85 | // and the interval (sec) |
lscordovar | 0:57171dc76fb5 | 86 | flipper2.attach(&flip2, 1.0); |
lscordovar | 0:57171dc76fb5 | 87 | // spin in a main loop |
lscordovar | 0:57171dc76fb5 | 88 | // flipper will interrupt it to call flip |
lscordovar | 0:57171dc76fb5 | 89 | |
lscordovar | 0:57171dc76fb5 | 90 | while(1) { |
lscordovar | 0:57171dc76fb5 | 91 | wait(0.2); |
lscordovar | 0:57171dc76fb5 | 92 | } |
lscordovar | 0:57171dc76fb5 | 93 | } |
lscordovar | 0:57171dc76fb5 | 94 | |
lscordovar | 0:57171dc76fb5 | 95 | /* |
lscordovar | 0:57171dc76fb5 | 96 | External interrupts on the mbed |
lscordovar | 0:57171dc76fb5 | 97 | */ |
lscordovar | 0:57171dc76fb5 | 98 | |
lscordovar | 0:57171dc76fb5 | 99 | |
lscordovar | 0:57171dc76fb5 | 100 | #include "mbed.h" |
lscordovar | 0:57171dc76fb5 | 101 | InterruptIn button(p18); // Interrupt on digital pushbutton input p18 |
lscordovar | 0:57171dc76fb5 | 102 | DigitalOut led1(p5); // digital out to p5 |
lscordovar | 0:57171dc76fb5 | 103 | |
lscordovar | 0:57171dc76fb5 | 104 | void toggle(void); // function prototype |
lscordovar | 0:57171dc76fb5 | 105 | |
lscordovar | 0:57171dc76fb5 | 106 | int main() |
lscordovar | 0:57171dc76fb5 | 107 | { |
lscordovar | 0:57171dc76fb5 | 108 | button.rise(&toggle); // attach the address of the toggle |
lscordovar | 0:57171dc76fb5 | 109 | } // function to the rising edge |
lscordovar | 0:57171dc76fb5 | 110 | |
lscordovar | 0:57171dc76fb5 | 111 | void toggle() |
lscordovar | 0:57171dc76fb5 | 112 | { |
lscordovar | 0:57171dc76fb5 | 113 | led1=!led1; |
lscordovar | 0:57171dc76fb5 | 114 | } |
lscordovar | 0:57171dc76fb5 | 115 | |
lscordovar | 0:57171dc76fb5 | 116 | /* |
lscordovar | 0:57171dc76fb5 | 117 | Switch debouncing for interrupt control |
lscordovar | 0:57171dc76fb5 | 118 | */ |
lscordovar | 0:57171dc76fb5 | 119 | |
lscordovar | 0:57171dc76fb5 | 120 | #include "mbed.h" |
lscordovar | 0:57171dc76fb5 | 121 | InterruptIn button(p18); // Interrupt on digital pushbutton input p18 |
lscordovar | 0:57171dc76fb5 | 122 | DigitalOut led1(p5); // digital out to p5 |
lscordovar | 0:57171dc76fb5 | 123 | Timer debounce; // define debounce timer |
lscordovar | 0:57171dc76fb5 | 124 | |
lscordovar | 0:57171dc76fb5 | 125 | void toggle(void); // function prototype |
lscordovar | 0:57171dc76fb5 | 126 | |
lscordovar | 0:57171dc76fb5 | 127 | int main() |
lscordovar | 0:57171dc76fb5 | 128 | { |
lscordovar | 0:57171dc76fb5 | 129 | debounce.start(); |
lscordovar | 0:57171dc76fb5 | 130 | button.rise(&toggle); // attach the address of the toggle |
lscordovar | 0:57171dc76fb5 | 131 | } // function to the rising edge |
lscordovar | 0:57171dc76fb5 | 132 | |
lscordovar | 0:57171dc76fb5 | 133 | void toggle() |
lscordovar | 0:57171dc76fb5 | 134 | { |
lscordovar | 0:57171dc76fb5 | 135 | if (debounce.read_ms()>200) // only allow toggle if debounce timer |
lscordovar | 0:57171dc76fb5 | 136 | led1=!led1; // has passed 200 ms |
lscordovar | 0:57171dc76fb5 | 137 | debounce.reset(); // restart timer when the toggle is performed |
lscordovar | 0:57171dc76fb5 | 138 | } |
lscordovar | 0:57171dc76fb5 | 139 | |
lscordovar | 0:57171dc76fb5 | 140 | |
lscordovar | 0:57171dc76fb5 | 141 | |
lscordovar | 0:57171dc76fb5 | 142 |