![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Version 8, working version with Alix, sams and ollies code. Displays time, date and sensor info onto terminal, LCD and networking, and saves onto SD card.
Dependencies: BMP280 ELEC350-Practicals-FZ429 TextLCD BME280 ntp-client
SWPoll.hpp@12:4c7eaac8ceef, 2018-12-31 (annotated)
- Committer:
- Alix955
- Date:
- Mon Dec 31 19:20:22 2018 +0000
- Revision:
- 12:4c7eaac8ceef
- Parent:
- 0:f9a18207d99c
Version 8, integration of Alix & Sams work with older(?) version of ollies. Displays time, date and all sensor information onto LCD, Terminal and Networking, and saves sensor info to SD card.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
O_Thom | 0:f9a18207d99c | 1 | #include "mbed.h" |
O_Thom | 0:f9a18207d99c | 2 | class SWPoll { |
O_Thom | 0:f9a18207d99c | 3 | private: |
O_Thom | 0:f9a18207d99c | 4 | enum State {LOW, LOW_DEBOUNCE, HIGH, HIGH_DEBOUNCE}; |
O_Thom | 0:f9a18207d99c | 5 | State state; // Internal state |
O_Thom | 0:f9a18207d99c | 6 | DigitalIn& sw; // These are references (aliases) and MUST be initialised |
O_Thom | 0:f9a18207d99c | 7 | int status; // "" |
O_Thom | 0:f9a18207d99c | 8 | Timer t; // Each instance has it's own timer, so this is is finite |
O_Thom | 0:f9a18207d99c | 9 | |
O_Thom | 0:f9a18207d99c | 10 | public: |
O_Thom | 0:f9a18207d99c | 11 | //Constructor - MUST be given two parameters (for the switch and led) BY REFERENCE |
O_Thom | 0:f9a18207d99c | 12 | SWPoll(DigitalIn& gpioIn, int flag) : sw(gpioIn), status(flag) { |
O_Thom | 0:f9a18207d99c | 13 | state = LOW; |
O_Thom | 0:f9a18207d99c | 14 | t.reset(); |
O_Thom | 0:f9a18207d99c | 15 | flag = 0; |
O_Thom | 0:f9a18207d99c | 16 | } |
O_Thom | 0:f9a18207d99c | 17 | //Destructor - should the instance go out of scope, this is called |
O_Thom | 0:f9a18207d99c | 18 | ~SWPoll() { |
O_Thom | 0:f9a18207d99c | 19 | //Shut down |
O_Thom | 0:f9a18207d99c | 20 | t.stop(); |
O_Thom | 0:f9a18207d99c | 21 | t.reset(); |
O_Thom | 0:f9a18207d99c | 22 | flag = 0; |
O_Thom | 0:f9a18207d99c | 23 | } |
O_Thom | 0:f9a18207d99c | 24 | //The public API - poll the switches |
O_Thom | 0:f9a18207d99c | 25 | //Bascially, a mealy machine - uses a timer to manage switch bounce |
O_Thom | 0:f9a18207d99c | 26 | void poll() { |
O_Thom | 0:f9a18207d99c | 27 | switch (state) |
O_Thom | 0:f9a18207d99c | 28 | { |
O_Thom | 0:f9a18207d99c | 29 | //Waiting for switch to rise: |
O_Thom | 0:f9a18207d99c | 30 | case LOW: |
O_Thom | 0:f9a18207d99c | 31 | if (sw == 1) { |
O_Thom | 0:f9a18207d99c | 32 | state = LOW_DEBOUNCE; |
O_Thom | 0:f9a18207d99c | 33 | t.reset(); |
O_Thom | 0:f9a18207d99c | 34 | t.start(); |
O_Thom | 0:f9a18207d99c | 35 | } |
O_Thom | 0:f9a18207d99c | 36 | break; |
O_Thom | 0:f9a18207d99c | 37 | |
O_Thom | 0:f9a18207d99c | 38 | case LOW_DEBOUNCE: |
O_Thom | 0:f9a18207d99c | 39 | if (t.read_ms() >= 200) { |
O_Thom | 0:f9a18207d99c | 40 | state = HIGH; |
O_Thom | 0:f9a18207d99c | 41 | t.stop(); |
O_Thom | 0:f9a18207d99c | 42 | t.reset(); |
O_Thom | 0:f9a18207d99c | 43 | } |
O_Thom | 0:f9a18207d99c | 44 | break; |
O_Thom | 0:f9a18207d99c | 45 | |
O_Thom | 0:f9a18207d99c | 46 | case HIGH: |
O_Thom | 0:f9a18207d99c | 47 | if (sw == 0) { |
O_Thom | 0:f9a18207d99c | 48 | flag = !flag; //Toggle output on state transition |
O_Thom | 0:f9a18207d99c | 49 | state = HIGH_DEBOUNCE; |
O_Thom | 0:f9a18207d99c | 50 | t.reset(); //(purely defensive) |
O_Thom | 0:f9a18207d99c | 51 | t.start(); |
O_Thom | 0:f9a18207d99c | 52 | } |
O_Thom | 0:f9a18207d99c | 53 | break; |
O_Thom | 0:f9a18207d99c | 54 | case HIGH_DEBOUNCE: |
O_Thom | 0:f9a18207d99c | 55 | if (t.read_ms() >= 200) { |
O_Thom | 0:f9a18207d99c | 56 | state = LOW; |
O_Thom | 0:f9a18207d99c | 57 | t.stop(); |
O_Thom | 0:f9a18207d99c | 58 | t.reset(); |
O_Thom | 0:f9a18207d99c | 59 | } |
O_Thom | 0:f9a18207d99c | 60 | break; |
O_Thom | 0:f9a18207d99c | 61 | default: |
O_Thom | 0:f9a18207d99c | 62 | t.stop(); |
O_Thom | 0:f9a18207d99c | 63 | t.reset(); |
O_Thom | 0:f9a18207d99c | 64 | state = LOW; |
O_Thom | 0:f9a18207d99c | 65 | break; |
O_Thom | 0:f9a18207d99c | 66 | } //end switch |
O_Thom | 0:f9a18207d99c | 67 | |
O_Thom | 0:f9a18207d99c | 68 | //This is a Mealy Machine - so no output logic follows |
O_Thom | 0:f9a18207d99c | 69 | } |
O_Thom | 0:f9a18207d99c | 70 | }; |