NMHU SSD 341 sieve demo with light sensor while loop for timer

Dependencies:   SLCD mbed

Fork of lightsense_kl46z_states by Stanley Cohen

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?

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