NMHU SSD 341 sieve with light sensor if's for timing

Dependencies:   SLCD mbed

Fork of lightsense_kl46z_states by Stanley Cohen

Committer:
scohennm
Date:
Tue Oct 14 17:01:43 2014 +0000
Revision:
7:3c7768e90016
Parent:
6:710e18c552f5
NMHU SSD 341 sieve with light sensor if's for timing

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:3c7768e90016 7 // Use the idea of a sieve modoel instead of a series of if..then..elseif..
scohennm 1:51f8c2b04ce2 8 //#define PRINTDEBUG
scohennm 7:3c7768e90016 9 #define PROGNAME "blink_kl46z_states seive v2\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 5:817aa144563d 14 #define BLINKDWELL 400 // milliseconds
scohennm 7:3c7768e90016 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:3c7768e90016 19 #define NUMLIMITS 3
scohennm 7:3c7768e90016 20 #define BOTTOMLIMIT 0.0
scohennm 6:710e18c552f5 21 #define LOWLIMIT 0.1
scohennm 6:710e18c552f5 22 #define HILIMIT 0.85
scohennm 7:3c7768e90016 23 #define TOPLIMIT 1.1
scohennm 6:710e18c552f5 24 #define ONTIME 1.0
scohennm 6:710e18c552f5 25
scohennm 6:710e18c552f5 26
scohennm 7:3c7768e90016 27 #define NUMSTATES 4
scohennm 7:3c7768e90016 28 #define IDLESTATE 0
scohennm 7:3c7768e90016 29 #define NEWBLINK 1
scohennm 7:3c7768e90016 30 #define LOWLITE 2
scohennm 7:3c7768e90016 31 #define HILITE 3
scohennm 7:3c7768e90016 32 int stateArray[NUMSTATES] = {HILITE, NEWBLINK, LOWLITE,IDLESTATE};
scohennm 7:3c7768e90016 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:3c7768e90016 52 int PGMState = IDLESTATE; // work till timer transitions
scohennm 5:817aa144563d 53 int ledState = LEDON;
scohennm 7:3c7768e90016 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:3c7768e90016 62 greenColor.write(LEDON);
scohennm 7:3c7768e90016 63 redColor.write(LEDON);
scohennm 3:64e28ee5719b 64
scohennm 4:bd42ab18979b 65
scohennm 0:e23fffd4b9a7 66 while(true) {
scohennm 5:817aa144563d 67 switch (PGMState){
scohennm 4:bd42ab18979b 68 case IDLESTATE: {
scohennm 4:bd42ab18979b 69 if (LEDTimer.read_ms() > timeToChangeDF){ // check for timer time out transtion
scohennm 6:710e18c552f5 70 lightData = (1.0 - LightSensor.read());
scohennm 6:710e18c552f5 71 sprintf(lcdData,"%4.3f",lightData);
scohennm 6:710e18c552f5 72 LCDMess(lcdData);
scohennm 7:3c7768e90016 73 timeToChangeDF = BLINKDWELL;
scohennm 7:3c7768e90016 74 LEDTimer.reset(); // reset the timer
scohennm 7:3c7768e90016 75 // put data throuth the sieve.
scohennm 7:3c7768e90016 76 i=0;//start sieve
scohennm 7:3c7768e90016 77 while((lightData < lightLimits[i])&& (i < NUMLIMITS)){
scohennm 7:3c7768e90016 78 i++;
scohennm 7:3c7768e90016 79 }
scohennm 7:3c7768e90016 80 PGMState = stateArray[i];
scohennm 6:710e18c552f5 81 }
scohennm 4:bd42ab18979b 82 break;
scohennm 4:bd42ab18979b 83 }
scohennm 5:817aa144563d 84 case NEWBLINK: {
scohennm 6:710e18c552f5 85 redColor.write(ledState);
scohennm 6:710e18c552f5 86 greenColor.write(!ledState);
scohennm 7:3c7768e90016 87 ledState = !ledState;
scohennm 6:710e18c552f5 88 // create string for display on LCD
scohennm 7:3c7768e90016 89 timeToChangeDF = BLINKDWELL;
scohennm 6:710e18c552f5 90 LEDTimer.reset(); // reset the timer
scohennm 6:710e18c552f5 91 PGMState = IDLESTATE; // go idle state
scohennm 6:710e18c552f5 92 break;
scohennm 6:710e18c552f5 93 }
scohennm 6:710e18c552f5 94 case HILITE: {
scohennm 6:710e18c552f5 95 redColor.write(LEDON);
scohennm 6:710e18c552f5 96 greenColor.write(LEDOFF);
scohennm 7:3c7768e90016 97 timeToChangeDF = LIMITSTAYON;
scohennm 6:710e18c552f5 98 // create string for display on LCD
scohennm 7:3c7768e90016 99 if (LEDTimer.read_ms() > timeToChangeDF){
scohennm 7:3c7768e90016 100 LEDTimer.reset(); // reset the timer
scohennm 7:3c7768e90016 101 PGMState = IDLESTATE; // go idle state
scohennm 7:3c7768e90016 102 }
scohennm 6:710e18c552f5 103 break;
scohennm 6:710e18c552f5 104 }
scohennm 6:710e18c552f5 105 case LOWLITE: {
scohennm 6:710e18c552f5 106 redColor.write(LEDOFF);
scohennm 6:710e18c552f5 107 greenColor.write(LEDON);
scohennm 7:3c7768e90016 108 timeToChangeDF = LIMITSTAYON;
scohennm 6:710e18c552f5 109 // create string for display on LCD
scohennm 7:3c7768e90016 110 if (LEDTimer.read_ms() > timeToChangeDF){
scohennm 7:3c7768e90016 111 LEDTimer.reset(); // reset the timer
scohennm 7:3c7768e90016 112 PGMState = IDLESTATE; // go idle state
scohennm 7:3c7768e90016 113 }
scohennm 4:bd42ab18979b 114 break;
scohennm 4:bd42ab18979b 115 }
scohennm 4:bd42ab18979b 116 } // end state machine
scohennm 4:bd42ab18979b 117
scohennm 7:3c7768e90016 118
scohennm 7:3c7768e90016 119 }// end while
scohennm 4:bd42ab18979b 120 }