Switch on and off LED1 by using a pushbutton. The program implements a very simple Finite State Machine.
Dependencies: mbed
main.cpp@1:aa56bae2dac7, 2016-01-28 (annotated)
- Committer:
- icserny
- Date:
- Thu Jan 28 15:21:39 2016 +0000
- Revision:
- 1:aa56bae2dac7
- Parent:
- 0:f64b05ad6b04
First version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
icserny | 0:f64b05ad6b04 | 1 | |
icserny | 0:f64b05ad6b04 | 2 | #include "mbed.h" |
icserny | 0:f64b05ad6b04 | 3 | /** 08_led_switch |
icserny | 0:f64b05ad6b04 | 4 | * Sitch on/off LED1 by a pushbutton tied between D3 and GND |
icserny | 0:f64b05ad6b04 | 5 | * The program implements a very simple inite State Machine (FSM) model |
icserny | 0:f64b05ad6b04 | 6 | * |
icserny | 0:f64b05ad6b04 | 7 | * Hardware requirements: |
icserny | 0:f64b05ad6b04 | 8 | * - FRDM-KL25Z board |
icserny | 0:f64b05ad6b04 | 9 | * - A pusbutton between D3 (PTA12) and GND |
icserny | 0:f64b05ad6b04 | 10 | */ |
icserny | 0:f64b05ad6b04 | 11 | DigitalIn SW1(D3,PullUp); |
icserny | 0:f64b05ad6b04 | 12 | DigitalOut LED_1(LED_RED); |
icserny | 0:f64b05ad6b04 | 13 | |
icserny | 0:f64b05ad6b04 | 14 | typedef enum { //Set of possible states |
icserny | 0:f64b05ad6b04 | 15 | STATE_WAIT_FOR_PRESS, |
icserny | 0:f64b05ad6b04 | 16 | STATE_WAIT_FOR_RELEASE |
icserny | 0:f64b05ad6b04 | 17 | } state_t; |
icserny | 0:f64b05ad6b04 | 18 | |
icserny | 0:f64b05ad6b04 | 19 | |
icserny | 0:f64b05ad6b04 | 20 | int main() |
icserny | 0:f64b05ad6b04 | 21 | { |
icserny | 0:f64b05ad6b04 | 22 | //Define initial state |
icserny | 0:f64b05ad6b04 | 23 | state_t mystate = STATE_WAIT_FOR_PRESS; |
icserny | 0:f64b05ad6b04 | 24 | LED_1 = 1; //LED off at start |
icserny | 0:f64b05ad6b04 | 25 | while (true) { |
icserny | 0:f64b05ad6b04 | 26 | switch(mystate) { |
icserny | 0:f64b05ad6b04 | 27 | case STATE_WAIT_FOR_PRESS: |
icserny | 0:f64b05ad6b04 | 28 | if (SW1==0) { //if button pressed |
icserny | 0:f64b05ad6b04 | 29 | LED_1 = !LED_1; //toggle LED_1 |
icserny | 0:f64b05ad6b04 | 30 | mystate = STATE_WAIT_FOR_RELEASE; |
icserny | 0:f64b05ad6b04 | 31 | } |
icserny | 0:f64b05ad6b04 | 32 | break; |
icserny | 0:f64b05ad6b04 | 33 | case STATE_WAIT_FOR_RELEASE: |
icserny | 1:aa56bae2dac7 | 34 | if (SW1==1) { //if button released |
icserny | 0:f64b05ad6b04 | 35 | mystate = STATE_WAIT_FOR_PRESS; |
icserny | 0:f64b05ad6b04 | 36 | } |
icserny | 0:f64b05ad6b04 | 37 | } |
icserny | 1:aa56bae2dac7 | 38 | wait_ms(20); //debounce delay |
icserny | 0:f64b05ad6b04 | 39 | } |
icserny | 0:f64b05ad6b04 | 40 | } |