
Timer, Timeout, Ticker, PWM, Debounce
Dependencies: mbed
main.cpp@0:9084eb4405d5, 2015-10-15 (annotated)
- Committer:
- madmonkeyman82
- Date:
- Thu Oct 15 16:05:38 2015 +0000
- Revision:
- 0:9084eb4405d5
Timer, Timeout, Ticker, PWM, Debounce
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
madmonkeyman82 | 0:9084eb4405d5 | 1 | #include "mbed.h" |
madmonkeyman82 | 0:9084eb4405d5 | 2 | |
madmonkeyman82 | 0:9084eb4405d5 | 3 | //------------------------------------ |
madmonkeyman82 | 0:9084eb4405d5 | 4 | // Hyperterminal configuration |
madmonkeyman82 | 0:9084eb4405d5 | 5 | // 9600 bauds, 8-bit data, no parity |
madmonkeyman82 | 0:9084eb4405d5 | 6 | //------------------------------------ |
madmonkeyman82 | 0:9084eb4405d5 | 7 | |
madmonkeyman82 | 0:9084eb4405d5 | 8 | Serial pc(SERIAL_TX, SERIAL_RX); |
madmonkeyman82 | 0:9084eb4405d5 | 9 | |
madmonkeyman82 | 0:9084eb4405d5 | 10 | Ticker toggle_led_ticker; |
madmonkeyman82 | 0:9084eb4405d5 | 11 | Timeout timedown; |
madmonkeyman82 | 0:9084eb4405d5 | 12 | |
madmonkeyman82 | 0:9084eb4405d5 | 13 | //define pins |
madmonkeyman82 | 0:9084eb4405d5 | 14 | DigitalOut led1(PA_9); |
madmonkeyman82 | 0:9084eb4405d5 | 15 | InterruptIn SW7(PB_3); |
madmonkeyman82 | 0:9084eb4405d5 | 16 | InterruptIn SW6(PA_10); |
madmonkeyman82 | 0:9084eb4405d5 | 17 | |
madmonkeyman82 | 0:9084eb4405d5 | 18 | //Variables |
madmonkeyman82 | 0:9084eb4405d5 | 19 | static float tickertimer = 0.1; |
madmonkeyman82 | 0:9084eb4405d5 | 20 | |
madmonkeyman82 | 0:9084eb4405d5 | 21 | //Prototypes |
madmonkeyman82 | 0:9084eb4405d5 | 22 | void toggle_led(); |
madmonkeyman82 | 0:9084eb4405d5 | 23 | void timeouttick(); |
madmonkeyman82 | 0:9084eb4405d5 | 24 | void interrupt(); |
madmonkeyman82 | 0:9084eb4405d5 | 25 | |
madmonkeyman82 | 0:9084eb4405d5 | 26 | |
madmonkeyman82 | 0:9084eb4405d5 | 27 | void timeouttick() |
madmonkeyman82 | 0:9084eb4405d5 | 28 | { |
madmonkeyman82 | 0:9084eb4405d5 | 29 | SW7.enable_irq(); |
madmonkeyman82 | 0:9084eb4405d5 | 30 | SW6.enable_irq(); |
madmonkeyman82 | 0:9084eb4405d5 | 31 | } |
madmonkeyman82 | 0:9084eb4405d5 | 32 | |
madmonkeyman82 | 0:9084eb4405d5 | 33 | void interruptSW7(){ |
madmonkeyman82 | 0:9084eb4405d5 | 34 | SW7.disable_irq(); |
madmonkeyman82 | 0:9084eb4405d5 | 35 | timedown.attach(&timeouttick, 0.03); //debounce |
madmonkeyman82 | 0:9084eb4405d5 | 36 | if(tickertimer > 0.00f) |
madmonkeyman82 | 0:9084eb4405d5 | 37 | tickertimer += 0.01f; |
madmonkeyman82 | 0:9084eb4405d5 | 38 | if(tickertimer > 0.00f) |
madmonkeyman82 | 0:9084eb4405d5 | 39 | { |
madmonkeyman82 | 0:9084eb4405d5 | 40 | |
madmonkeyman82 | 0:9084eb4405d5 | 41 | toggle_led_ticker.attach(&toggle_led, tickertimer); |
madmonkeyman82 | 0:9084eb4405d5 | 42 | } |
madmonkeyman82 | 0:9084eb4405d5 | 43 | else |
madmonkeyman82 | 0:9084eb4405d5 | 44 | { |
madmonkeyman82 | 0:9084eb4405d5 | 45 | toggle_led_ticker.detach(); |
madmonkeyman82 | 0:9084eb4405d5 | 46 | } |
madmonkeyman82 | 0:9084eb4405d5 | 47 | } |
madmonkeyman82 | 0:9084eb4405d5 | 48 | |
madmonkeyman82 | 0:9084eb4405d5 | 49 | void interruptSW6(){ |
madmonkeyman82 | 0:9084eb4405d5 | 50 | SW6.disable_irq(); |
madmonkeyman82 | 0:9084eb4405d5 | 51 | timedown.attach(&timeouttick, 0.03); //debounce |
madmonkeyman82 | 0:9084eb4405d5 | 52 | |
madmonkeyman82 | 0:9084eb4405d5 | 53 | tickertimer -= 0.01f; |
madmonkeyman82 | 0:9084eb4405d5 | 54 | toggle_led_ticker.attach(&toggle_led, tickertimer); |
madmonkeyman82 | 0:9084eb4405d5 | 55 | } |
madmonkeyman82 | 0:9084eb4405d5 | 56 | |
madmonkeyman82 | 0:9084eb4405d5 | 57 | void toggle_led() { |
madmonkeyman82 | 0:9084eb4405d5 | 58 | led1 = !led1; |
madmonkeyman82 | 0:9084eb4405d5 | 59 | } |
madmonkeyman82 | 0:9084eb4405d5 | 60 | |
madmonkeyman82 | 0:9084eb4405d5 | 61 | int main() { |
madmonkeyman82 | 0:9084eb4405d5 | 62 | |
madmonkeyman82 | 0:9084eb4405d5 | 63 | pc.printf("Velkommen\r\n"); |
madmonkeyman82 | 0:9084eb4405d5 | 64 | //attach interrup to faling edge |
madmonkeyman82 | 0:9084eb4405d5 | 65 | SW7.fall(&interruptSW7); |
madmonkeyman82 | 0:9084eb4405d5 | 66 | SW6.fall(&interruptSW6); |
madmonkeyman82 | 0:9084eb4405d5 | 67 | |
madmonkeyman82 | 0:9084eb4405d5 | 68 | // Init the ticker with the address of the function (toggle_led) to be attached and the interval (100 ms) |
madmonkeyman82 | 0:9084eb4405d5 | 69 | |
madmonkeyman82 | 0:9084eb4405d5 | 70 | |
madmonkeyman82 | 0:9084eb4405d5 | 71 | |
madmonkeyman82 | 0:9084eb4405d5 | 72 | while (true) { |
madmonkeyman82 | 0:9084eb4405d5 | 73 | pc.printf("tickertimer: %2.3f\r\n", tickertimer); |
madmonkeyman82 | 0:9084eb4405d5 | 74 | pc.printf("t\r\n"); |
madmonkeyman82 | 0:9084eb4405d5 | 75 | // Do other things... |
madmonkeyman82 | 0:9084eb4405d5 | 76 | } |
madmonkeyman82 | 0:9084eb4405d5 | 77 | } |