Switch on and off LED1 by using a pushbutton. The program implements a very simple Finite State Machine.

Dependencies:   mbed

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?

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