Manejo de Timers

Dependencies:   mbed

Committer:
lscordovar
Date:
Fri Feb 07 20:21:19 2020 +0000
Revision:
0:57171dc76fb5
Manejo de Timers

Who changed what in which revision?

UserRevisionLine numberNew 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