KLUJA-SSD341-Hw-5.2

Dependencies:   SLCD TSI mbed

Fork of light_sense_46 by Stanley Cohen

Committer:
kennylujan42
Date:
Mon Sep 19 06:58:23 2016 +0000
Revision:
1:9e9a864e45ca
Parent:
0:ba4f1298c690
KLUJA-SSD341-Hw-5.2.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
scohennm 0:ba4f1298c690 1 #include "mbed.h"
kennylujan42 1:9e9a864e45ca 2 #include "SLCD.h"
kennylujan42 1:9e9a864e45ca 3 #include "TSISensor.h"
scohennm 0:ba4f1298c690 4 #define PROGNAME "Light_Sense_v1\n\r"
scohennm 0:ba4f1298c690 5 #define DATATIME 0.5
kennylujan42 1:9e9a864e45ca 6 #define LCDLEN 10
kennylujan42 1:9e9a864e45ca 7 #define PRINTDEBUG
kennylujan42 1:9e9a864e45ca 8 #define LIGHTSENSORPORT PTE22
kennylujan42 1:9e9a864e45ca 9 #define leftButton PTC12
kennylujan42 1:9e9a864e45ca 10 #define rightButton PTC3
kennylujan42 1:9e9a864e45ca 11 #define BUTUP true
kennylujan42 1:9e9a864e45ca 12 #define BUTDOWN false
kennylujan42 1:9e9a864e45ca 13 #define NUMBUTS 2
kennylujan42 1:9e9a864e45ca 14 #define LEDON false
kennylujan42 1:9e9a864e45ca 15 #define LEDOFF true
kennylujan42 1:9e9a864e45ca 16 #define TSILIMIT 0.99
kennylujan42 1:9e9a864e45ca 17 #define LCDCHARLEN 100
scohennm 0:ba4f1298c690 18
scohennm 0:ba4f1298c690 19
scohennm 0:ba4f1298c690 20 AnalogIn LightSensor(PTE22); // define light sensor
scohennm 0:ba4f1298c690 21 PwmOut redLed(LED_RED);
kennylujan42 1:9e9a864e45ca 22 PwmOut greenLed(LED_GREEN);
kennylujan42 1:9e9a864e45ca 23 SLCD slcd;
kennylujan42 1:9e9a864e45ca 24 Serial pc(USBTX, USBRX);
kennylujan42 1:9e9a864e45ca 25 Timer LEDTimer;
kennylujan42 1:9e9a864e45ca 26 Ticker tick;
scohennm 0:ba4f1298c690 27
kennylujan42 1:9e9a864e45ca 28 int ledState = LEDON;
kennylujan42 1:9e9a864e45ca 29 int buttonStates[NUMBUTS] = {BUTDOWN,BUTUP};
kennylujan42 1:9e9a864e45ca 30 DigitalIn buttons[NUMBUTS] = {rightButton, leftButton};
kennylujan42 1:9e9a864e45ca 31 DigitalOut LEDs[NUMBUTS] = {LED_GREEN, LED_RED};
scohennm 0:ba4f1298c690 32
kennylujan42 1:9e9a864e45ca 33 volatile bool ticked;
kennylujan42 1:9e9a864e45ca 34 float tsidata;
kennylujan42 1:9e9a864e45ca 35
kennylujan42 1:9e9a864e45ca 36 void LCDMess(char *lMess){
kennylujan42 1:9e9a864e45ca 37 slcd.Home();
kennylujan42 1:9e9a864e45ca 38 slcd.clear();
kennylujan42 1:9e9a864e45ca 39 slcd.printf(lMess);
kennylujan42 1:9e9a864e45ca 40 }
kennylujan42 1:9e9a864e45ca 41
kennylujan42 1:9e9a864e45ca 42 void tickFunction( void ) {
kennylujan42 1:9e9a864e45ca 43 ticked = true;
kennylujan42 1:9e9a864e45ca 44 }
kennylujan42 1:9e9a864e45ca 45
kennylujan42 1:9e9a864e45ca 46 int main(){
kennylujan42 1:9e9a864e45ca 47 int i;
scohennm 0:ba4f1298c690 48 float lightVal;
scohennm 0:ba4f1298c690 49 unsigned short lightWord;
kennylujan42 1:9e9a864e45ca 50 AnalogIn LightSensor(LIGHTSENSORPORT);
kennylujan42 1:9e9a864e45ca 51 float lightData;
kennylujan42 1:9e9a864e45ca 52 char lcdData[LCDCHARLEN];
kennylujan42 1:9e9a864e45ca 53 ticked = false;
kennylujan42 1:9e9a864e45ca 54 tick.attach(&tickFunction, 0.10);
kennylujan42 1:9e9a864e45ca 55 TSISensor tsi;
scohennm 0:ba4f1298c690 56
scohennm 0:ba4f1298c690 57 pc.printf(PROGNAME);
scohennm 0:ba4f1298c690 58
kennylujan42 1:9e9a864e45ca 59 int timeToChangeDF = DATATIME;
kennylujan42 1:9e9a864e45ca 60 LEDTimer.start();
kennylujan42 1:9e9a864e45ca 61 LEDTimer.reset();
kennylujan42 1:9e9a864e45ca 62
scohennm 0:ba4f1298c690 63 while (true) {
scohennm 0:ba4f1298c690 64 lightVal = LightSensor.read();
scohennm 0:ba4f1298c690 65 lightWord = LightSensor.read_u16();
scohennm 0:ba4f1298c690 66 redLed = lightVal;
kennylujan42 1:9e9a864e45ca 67 greenLed = lightVal;
kennylujan42 1:9e9a864e45ca 68
kennylujan42 1:9e9a864e45ca 69 for (i=0; i<NUMBUTS; i++){
kennylujan42 1:9e9a864e45ca 70 LEDs[i] = LEDON;
kennylujan42 1:9e9a864e45ca 71
kennylujan42 1:9e9a864e45ca 72 if(buttons[i] == BUTDOWN) {
kennylujan42 1:9e9a864e45ca 73 if (i == 1){
kennylujan42 1:9e9a864e45ca 74 while(1){
kennylujan42 1:9e9a864e45ca 75 tsidata = tsi.readPercentage();
kennylujan42 1:9e9a864e45ca 76 if(ticked){
kennylujan42 1:9e9a864e45ca 77 if (tsidata > TSILIMIT){
kennylujan42 1:9e9a864e45ca 78 greenLed = 0.0;
kennylujan42 1:9e9a864e45ca 79 redLed = 0.0;
kennylujan42 1:9e9a864e45ca 80 } else {
kennylujan42 1:9e9a864e45ca 81 pc.printf("\n Position %f\n\r", tsidata);
kennylujan42 1:9e9a864e45ca 82 sprintf (lcdData,"%0.4f",tsidata);
kennylujan42 1:9e9a864e45ca 83 LCDMess(lcdData);
kennylujan42 1:9e9a864e45ca 84 greenLed = 1.0 - tsidata;
kennylujan42 1:9e9a864e45ca 85 redLed = 1.0 - tsidata;
kennylujan42 1:9e9a864e45ca 86 }
kennylujan42 1:9e9a864e45ca 87 ticked = false;
kennylujan42 1:9e9a864e45ca 88 } else {
kennylujan42 1:9e9a864e45ca 89
kennylujan42 1:9e9a864e45ca 90 if (LEDTimer.read_ms() > timeToChangeDF){ // check for timer time out transtion
kennylujan42 1:9e9a864e45ca 91 lightData = (1.0 - LightSensor.read()); // show as increasiing with increasing intensity
kennylujan42 1:9e9a864e45ca 92 sprintf(lcdData,"%4.3f",lightData);
kennylujan42 1:9e9a864e45ca 93 LCDMess(lcdData);
kennylujan42 1:9e9a864e45ca 94 timeToChangeDF = DATATIME;
kennylujan42 1:9e9a864e45ca 95 LEDTimer.reset();
kennylujan42 1:9e9a864e45ca 96 }
kennylujan42 1:9e9a864e45ca 97 if (lightVal == 0.900){
kennylujan42 1:9e9a864e45ca 98 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 99 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 100 }
kennylujan42 1:9e9a864e45ca 101 if (lightVal == 0.800){
kennylujan42 1:9e9a864e45ca 102 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 103 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 104 }
kennylujan42 1:9e9a864e45ca 105 if (lightVal == 0.700){
kennylujan42 1:9e9a864e45ca 106 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 107 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 108 }
kennylujan42 1:9e9a864e45ca 109 if (lightVal == 0.600){
kennylujan42 1:9e9a864e45ca 110 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 111 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 112 }
kennylujan42 1:9e9a864e45ca 113 if (lightVal == 0.500){
kennylujan42 1:9e9a864e45ca 114 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 115 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 116 }
kennylujan42 1:9e9a864e45ca 117 if (lightVal == 0.400){
kennylujan42 1:9e9a864e45ca 118 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 119 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 120 }
kennylujan42 1:9e9a864e45ca 121 if (lightVal == 0.300){
kennylujan42 1:9e9a864e45ca 122 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 123 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 124 }
kennylujan42 1:9e9a864e45ca 125 if (lightVal == 0.200){
kennylujan42 1:9e9a864e45ca 126 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 127 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 128 }
kennylujan42 1:9e9a864e45ca 129 if (lightVal == 0.100){
kennylujan42 1:9e9a864e45ca 130 redLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 131 greenLed = 1.0 + lightVal;
kennylujan42 1:9e9a864e45ca 132 }
kennylujan42 1:9e9a864e45ca 133 }
kennylujan42 1:9e9a864e45ca 134 }
kennylujan42 1:9e9a864e45ca 135 }
kennylujan42 1:9e9a864e45ca 136 }
kennylujan42 1:9e9a864e45ca 137 }
kennylujan42 1:9e9a864e45ca 138 #ifdef PRINTDEBUG
kennylujan42 1:9e9a864e45ca 139 pc.printf("LS => %1.3f %5d \r\n", lightVal, lightWord);
kennylujan42 1:9e9a864e45ca 140 #endif
kennylujan42 1:9e9a864e45ca 141 wait(DATATIME);
kennylujan42 1:9e9a864e45ca 142
kennylujan42 1:9e9a864e45ca 143 }
kennylujan42 1:9e9a864e45ca 144
scohennm 0:ba4f1298c690 145 }