Reading Temperature and insolution and taking average and putting in FIFO and again taking average of FIFO and then displaying on LCD
main.cpp
- Committer:
- josmy
- Date:
- 2014-10-31
- Revision:
- 1:bdfc71ff49b2
- Parent:
- 0:c2d1ad5059da
File content as of revision 1:bdfc71ff49b2:
#include "mbed.h" #include "TextLCD.h" #include "string.h" #define MAXSamples 50 #define MaxInsol 1160.0 #define MaxTemp 1160.0 TextLCD lcd(PA_8, PB_10, PA_10, PB_3, PB_5, PB_4); // rs, e, d4-d7 AnalogIn Insol(A4); AnalogIn Temp(A5); Serial pc(SERIAL_TX, SERIAL_RX); DigitalOut myled(LED1); float InsolR, TempR; uint16_t InsolMap, TempMap; char buff[40]; //uint16_t buffer[7]; int i; uint16_t FIFOI[5],FIFOT[5]; uint32_t val; uint32_t count; int main() { /* while(1){ sprintf(buff,"Inso:%4u Temp:%4u",Insol.read_u16(),Temp.read_u16()); pc.printf(buff);pc.printf("\n"); wait(0.2); } */ count=0; while(1) { pc.printf("Count: %6u:",count++);pc.printf(" "); val=0; for(i=1;i<=MAXSamples;i++){ val += Insol.read_u16(); } val /= MAXSamples; FIFOI[0] = FIFOI[1]; FIFOI[1] = FIFOI[2]; FIFOI[2] = FIFOI[3]; FIFOI[3] = FIFOI[4]; FIFOI[4] = (uint16_t)val; val = 0; for(i=0;i<=4;i++){ val += FIFOI[i]; } val /= 5; InsolR = (float) val; val=0; for(i=1;i<=MAXSamples;i++){ val += Temp.read_u16(); } val /= MAXSamples; FIFOT[0] = FIFOT[1]; FIFOT[1] = FIFOT[2]; FIFOT[2] = FIFOT[3]; FIFOT[3] = FIFOT[4]; FIFOT[4] = (uint16_t)val; val = 0; for(i=0;i<=4;i++){ val += FIFOT[i]; } val /= 5; TempR = (float) val; InsolMap = (uint16_t)(InsolR * MaxInsol/4095.0); TempMap = (uint16_t) (TempR *MaxTemp/4095.0); sprintf(buff,"Inso:%4u mW/cm2",InsolMap/10); pc.printf(buff);pc.printf(" "); lcd.locate(0,0); lcd.printf(buff); sprintf(buff,"Temp:%4u deg C",TempMap/10); pc.printf(buff);pc.printf("\n"); lcd.locate(0,1); lcd.printf(buff); myled = !myled; wait(.2); } }