Stage-1 Students SoCEM
/
ELEC350_Task330_Polling
Code from N.Outram lecture 23 Oct 2017
Diff: swpol.hpp
- Revision:
- 0:24610a6f4e59
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/swpol.hpp Tue Oct 24 14:01:04 2017 +0000 @@ -0,0 +1,70 @@ +#include "mbed.h" + +class SWPoll { + private: + enum State {LOW, LOW_DEBOUNCE, HIGH,HIGH_DEBOUNCE}; + State state; + DigitalIn& sw; + DigitalOut& led; + Timer t; + + public: + //Constructor + SWPoll(DigitalIn& gpioIn,DigitalOut& gpioOut) : sw(gpioIn),led(gpioOut) + { + state = LOW; + t.reset(); + led = 0; + } + //Deconstructor + ~SWPoll(){ + //Shut Down + t.stop(); + t.reset(); + led = 0; + } + // API - poll the switches + // Use of a Timer to manage switch bounce + void poll(){ + switch (state) + { + // waiting for switch to rise + case LOW: + if (sw == 1){ + state = LOW_DEBOUNCE; + t.reset(); + t.start(); + } + break; + case LOW_DEBOUNCE: + if (t.read_ms() >= 200){ + state = HIGH; + t.stop(); + t.reset(); + } + break; + case HIGH: + if (sw == 0) { + led = !led; + state = HIGH_DEBOUNCE; + t.reset(); + t.start(); + } + break; + case HIGH_DEBOUNCE: + if (t.read_ms() >= 200) { + state = LOW; + t.stop(); + t.reset(); + } + break; + default: + t.stop(); + t.reset(); + state = LOW; + break; + } //end switch + //This is a Mealy Machine - so no output logic follows + + } +};