NMHU SSD 341 sieve demo with light sensor while loop for timer
Fork of lightsense_kl46z_states by
main.cpp@7:5d370a924822, 2014-10-14 (annotated)
- Committer:
- scohennm
- Date:
- Tue Oct 14 16:59:19 2014 +0000
- Revision:
- 7:5d370a924822
- Parent:
- 6:710e18c552f5
NMHU SSD 341 sieve demo with light sensor while loop for timer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
scohennm | 0:e23fffd4b9a7 | 1 | #include "mbed.h" |
scohennm | 1:51f8c2b04ce2 | 2 | #include "SLCD.h" |
scohennm | 1:51f8c2b04ce2 | 3 | |
scohennm | 3:64e28ee5719b | 4 | |
scohennm | 6:710e18c552f5 | 5 | // An State Machine solution to HW 4.1 Q3 |
scohennm | 6:710e18c552f5 | 6 | // using wait() for high and low limits. |
scohennm | 7:5d370a924822 | 7 | // Use the idea of a sieve modoel instead of a series of if..then..elseif.. |
scohennm | 1:51f8c2b04ce2 | 8 | //#define PRINTDEBUG |
scohennm | 7:5d370a924822 | 9 | #define PROGNAME "blink_kl46z_states seive v3\n\r" |
scohennm | 0:e23fffd4b9a7 | 10 | #define LEDON false |
scohennm | 0:e23fffd4b9a7 | 11 | #define LEDOFF true |
scohennm | 5:817aa144563d | 12 | #define LEDTMESS "TRUE" |
scohennm | 5:817aa144563d | 13 | #define LEDFMESS "FALS" |
scohennm | 7:5d370a924822 | 14 | #define BLINKDWELL 400// milliseconds |
scohennm | 7:5d370a924822 | 15 | #define LIMITSTAYON 1000 |
scohennm | 1:51f8c2b04ce2 | 16 | #define DFDELTA 0.01 |
scohennm | 1:51f8c2b04ce2 | 17 | #define PWMTIME 1 // ms (kHz |
scohennm | 1:51f8c2b04ce2 | 18 | #define LCDLEN 10 |
scohennm | 7:5d370a924822 | 19 | #define NUMLIMITS 3 |
scohennm | 7:5d370a924822 | 20 | #define BOTTOMLIMIT 0.0 |
scohennm | 6:710e18c552f5 | 21 | #define LOWLIMIT 0.1 |
scohennm | 6:710e18c552f5 | 22 | #define HILIMIT 0.85 |
scohennm | 7:5d370a924822 | 23 | #define TOPLIMIT 1.1 |
scohennm | 6:710e18c552f5 | 24 | #define ONTIME 1.0 |
scohennm | 6:710e18c552f5 | 25 | |
scohennm | 6:710e18c552f5 | 26 | |
scohennm | 7:5d370a924822 | 27 | #define NUMSTATES 4 |
scohennm | 7:5d370a924822 | 28 | #define IDLESTATE 0 |
scohennm | 7:5d370a924822 | 29 | #define NEWBLINK 1 |
scohennm | 7:5d370a924822 | 30 | #define LOWLITE 2 |
scohennm | 7:5d370a924822 | 31 | #define HILITE 3 |
scohennm | 7:5d370a924822 | 32 | int stateArray[NUMSTATES] = {HILITE, NEWBLINK, LOWLITE,IDLESTATE}; |
scohennm | 7:5d370a924822 | 33 | float lightLimits[NUMLIMITS] = {HILIMIT, LOWLIMIT, BOTTOMLIMIT}; |
scohennm | 0:e23fffd4b9a7 | 34 | |
scohennm | 5:817aa144563d | 35 | char logicalString [NUMSTATES][LCDLEN] = {LEDFMESS, LEDTMESS}; |
scohennm | 4:bd42ab18979b | 36 | SLCD slcd; //define LCD display globally define |
scohennm | 1:51f8c2b04ce2 | 37 | Serial pc(USBTX, USBRX); |
scohennm | 1:51f8c2b04ce2 | 38 | |
scohennm | 1:51f8c2b04ce2 | 39 | void LCDMess(char *lMess){ |
scohennm | 1:51f8c2b04ce2 | 40 | slcd.Home(); |
scohennm | 1:51f8c2b04ce2 | 41 | slcd.clear(); |
scohennm | 1:51f8c2b04ce2 | 42 | slcd.printf(lMess); |
scohennm | 1:51f8c2b04ce2 | 43 | } |
scohennm | 0:e23fffd4b9a7 | 44 | |
scohennm | 0:e23fffd4b9a7 | 45 | int main() { |
scohennm | 5:817aa144563d | 46 | DigitalOut greenColor(LED_GREEN); |
scohennm | 5:817aa144563d | 47 | DigitalOut redColor(LED_RED); |
scohennm | 6:710e18c552f5 | 48 | AnalogIn LightSensor(PTE22); |
scohennm | 6:710e18c552f5 | 49 | float lightData; |
scohennm | 1:51f8c2b04ce2 | 50 | char lcdData[LCDLEN]; |
scohennm | 4:bd42ab18979b | 51 | Timer LEDTimer; // time till next PWM values is to change. |
scohennm | 7:5d370a924822 | 52 | int PGMState = IDLESTATE; // work till timer transitions |
scohennm | 5:817aa144563d | 53 | int ledState = LEDON; |
scohennm | 7:5d370a924822 | 54 | int i; |
scohennm | 4:bd42ab18979b | 55 | |
scohennm | 5:817aa144563d | 56 | int timeToChangeDF = BLINKDWELL; |
scohennm | 3:64e28ee5719b | 57 | // set up timer for next step of Duty Factor timing |
scohennm | 3:64e28ee5719b | 58 | LEDTimer.start(); |
scohennm | 3:64e28ee5719b | 59 | LEDTimer.reset(); |
scohennm | 1:51f8c2b04ce2 | 60 | pc.printf(PROGNAME); |
scohennm | 1:51f8c2b04ce2 | 61 | |
scohennm | 7:5d370a924822 | 62 | greenColor.write(LEDON); |
scohennm | 7:5d370a924822 | 63 | redColor.write(LEDON); |
scohennm | 3:64e28ee5719b | 64 | |
scohennm | 0:e23fffd4b9a7 | 65 | while(true) { |
scohennm | 7:5d370a924822 | 66 | while(LEDTimer.read_ms() > timeToChangeDF){// check for timer time out transtion |
scohennm | 7:5d370a924822 | 67 | switch (PGMState){ |
scohennm | 7:5d370a924822 | 68 | case IDLESTATE: { |
scohennm | 6:710e18c552f5 | 69 | lightData = (1.0 - LightSensor.read()); |
scohennm | 6:710e18c552f5 | 70 | sprintf(lcdData,"%4.3f",lightData); |
scohennm | 6:710e18c552f5 | 71 | LCDMess(lcdData); |
scohennm | 7:5d370a924822 | 72 | timeToChangeDF = BLINKDWELL; |
scohennm | 7:5d370a924822 | 73 | LEDTimer.reset(); // reset the timer |
scohennm | 7:5d370a924822 | 74 | // put data throuth the sieve. |
scohennm | 7:5d370a924822 | 75 | i=0;//start sieve |
scohennm | 7:5d370a924822 | 76 | while((lightData < lightLimits[i])&& (i < NUMLIMITS)){ |
scohennm | 7:5d370a924822 | 77 | i++; |
scohennm | 7:5d370a924822 | 78 | } |
scohennm | 7:5d370a924822 | 79 | PGMState = stateArray[i]; |
scohennm | 7:5d370a924822 | 80 | break; |
scohennm | 6:710e18c552f5 | 81 | } |
scohennm | 7:5d370a924822 | 82 | case NEWBLINK: { |
scohennm | 7:5d370a924822 | 83 | redColor.write(ledState); |
scohennm | 7:5d370a924822 | 84 | greenColor.write(!ledState); |
scohennm | 7:5d370a924822 | 85 | ledState = !ledState; |
scohennm | 7:5d370a924822 | 86 | // create string for display on LCD |
scohennm | 7:5d370a924822 | 87 | timeToChangeDF = BLINKDWELL; |
scohennm | 7:5d370a924822 | 88 | LEDTimer.reset(); // reset the timer |
scohennm | 7:5d370a924822 | 89 | PGMState = IDLESTATE; // go idle state |
scohennm | 7:5d370a924822 | 90 | break; |
scohennm | 7:5d370a924822 | 91 | } |
scohennm | 7:5d370a924822 | 92 | case HILITE: { |
scohennm | 7:5d370a924822 | 93 | redColor.write(LEDON); |
scohennm | 7:5d370a924822 | 94 | greenColor.write(LEDOFF); |
scohennm | 7:5d370a924822 | 95 | timeToChangeDF = LIMITSTAYON; |
scohennm | 7:5d370a924822 | 96 | |
scohennm | 7:5d370a924822 | 97 | LEDTimer.reset(); // reset the timer |
scohennm | 7:5d370a924822 | 98 | PGMState = IDLESTATE; // go idle state |
scohennm | 7:5d370a924822 | 99 | break; |
scohennm | 7:5d370a924822 | 100 | } |
scohennm | 7:5d370a924822 | 101 | case LOWLITE: { |
scohennm | 7:5d370a924822 | 102 | redColor.write(LEDOFF); |
scohennm | 7:5d370a924822 | 103 | greenColor.write(LEDON); |
scohennm | 7:5d370a924822 | 104 | timeToChangeDF = LIMITSTAYON; |
scohennm | 7:5d370a924822 | 105 | // create string for display on LCD |
scohennm | 7:5d370a924822 | 106 | LEDTimer.reset(); // reset the timer |
scohennm | 7:5d370a924822 | 107 | PGMState = IDLESTATE; // go idle state |
scohennm | 7:5d370a924822 | 108 | break; |
scohennm | 6:710e18c552f5 | 109 | } |
scohennm | 7:5d370a924822 | 110 | } // end state machine |
scohennm | 7:5d370a924822 | 111 | }// end timer while |
scohennm | 7:5d370a924822 | 112 | }// end foreever while |
scohennm | 4:bd42ab18979b | 113 | } |