interfaçage MECSE Capteur Humi-Tempé - GPS - µCam
Dependencies: F746_GUI mbed DHT
main.cpp
- Committer:
- Pignouf971
- Date:
- 2019-06-07
- Revision:
- 0:df1102e0a341
File content as of revision 0:df1102e0a341:
#include "mbed.h" #include "LCD_DISCO_F746NG.h" #include "TS_DISCO_F746NG.h" #include "F746_GUI.hpp" #include "DHT.h" LCD_DISCO_F746NG lcd; DHT sensor(D3,AM2302); Serial GPS(A4, A5); Serial pc (USBTX,USBRX) ; Serial uCam (D1,D0); Button GPSDATA(50, 100, 100, 100, "GPS",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE); Button TEMPDATA(195, 100, 100, 100, "TEMPERATURE",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE); Button CAMERA(340, 100, 100, 100,"CAMERA",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE); Button BACK(0, 242, 100, 30,"BACK",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE); const unsigned char SYNC[] = {0xAA, 0x0D, 0x00, 0x00, 0x00, 0x00}; const unsigned char ACK[] = {0xAA, 0x0E, 0x0D, 0x00, 0x00, 0x00}; unsigned char buf[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; int err; int temps = 0; float Longitude = 0.0, Latitude = 0.0, Altitude = 0.0; int mode=0; float heure; float latitude; char indic_lat[5]; float longitude; char indic_long[5]; float vitesse; float route; float date; char heureS[50] = {}; char lat[50] = {}; char i_lat[3] = {}; char lon[50] = {}; char i_lon[3] = {}; char vit[50] = {}; char rou[50] = {}; char dat[50] = {}; int main() { GPS.baud(9600); pc.baud(115200); char buffer[200]; int compte=0; int resultat; //EventQueue queue; while(1) { if(CAMERA.Touched()) { GPSDATA.Erase(); GPSDATA.Inactivate(); TEMPDATA.Erase(); TEMPDATA.Inactivate(); CAMERA.Erase(); CAMERA.Inactivate(); lcd.Clear(LCD_COLOR_BLACK); mode =1; BACK.Activate(); } if(GPSDATA.Touched()) { GPSDATA.Erase(); GPSDATA.Inactivate(); TEMPDATA.Erase(); TEMPDATA.Inactivate(); CAMERA.Erase(); CAMERA.Inactivate(); lcd.Clear(LCD_COLOR_BLACK); mode =2; BACK.Activate(); } if(TEMPDATA.Touched()) { GPSDATA.Erase(); GPSDATA.Inactivate(); TEMPDATA.Erase(); TEMPDATA.Inactivate(); CAMERA.Erase(); CAMERA.Inactivate(); lcd.Clear(LCD_COLOR_BLACK); mode=3; BACK.Activate(); } if(BACK.Touched()) { lcd.Clear(LCD_COLOR_BLACK); CAMERA.Activate(); TEMPDATA.Activate(); GPSDATA.Activate(); BACK.Activate(); mode =0; } switch (mode){ case 1 : // Set uCam baud rate - this is the highest that uCam will auto detect uCam.baud(57600); // Start by Initializing communcation to uCam pc.printf("\n\r-- uCam Initailse --"); // This will give 60 attempts to sync with the uCam module for (int i=0; i<=60; i ++) { // Send out the sync command pc.printf("\n\rSending out SYNC command"); for (int i=0; i<6; i++) { uCam.putc(SYNC[i]); } // Get response from uCam if (uCam.readable()) { for (int i=0; i<6; i++) { buf[i] = uCam.getc(); } } // Check if it was an ACK if (buf[0] == 0xAA && buf[1] == 0x0E && buf[2] == 0x0D && buf[4] == 0x00 && buf[5] == 0x00) { pc.printf("\n\rACK received"); // Get response from uCam if (uCam.readable()) { for (int i=0; i<6; i++) { buf[i] = uCam.getc(); } } if (buf[0] == 0xAA && buf[1] == 0x0D && buf[2] == 0x00 && buf[3] == 0x00 && buf[4] == 0x00 && buf[5] == 0x00) { pc.printf("\n\rSYNC received"); // Send out an ACK as response pc.printf("\n\rSending out ACK command"); for (int i=0; i<6; i++) { uCam.putc(ACK[i]); } pc.printf("\n\rSYNC complete after %d attempts",i+1); break; } else { pc.printf("\n\rNo SYNC received - trying again..."); } } else { pc.printf("\n\rNo ACK received - trying again..."); } if (i == 60) pc.printf("\nTesting failed - Too many attempts"); } pc.printf("\n\n\rTest finished!"); break; case 2 : while (GPS.readable()){ buffer[compte]=GPS.getc(); compte++; if (buffer[compte-1]=='\n') { buffer[compte]='\0'; lcd.DisplayStringAt(0, LINE(2), (uint8_t *)buffer, CENTER_MODE); //pc.printf("%s",buffer); sscanf(buffer,"$GPRMC,%f,%f,%c,%f,%c,%f,%f,%f",&heure,&latitude,indic_lat,&longitude,indic_long,&vitesse,&route,&date); //pc.printf("Heure : %s\r\n",heure); sprintf(heureS, "heure : %f ",heure); sprintf(dat, "date : %f ",date); lcd.DisplayStringAt(0, LINE(4), (uint8_t *) heureS, CENTER_MODE); lcd.DisplayStringAt(0, LINE(11), (uint8_t *) dat, CENTER_MODE); /*sprintf(lat, "latitude : %.2f ",latitude); sprintf(i_lat, "%c",indic_lat); sprintf(lon, "longitude : %.2f ",longitude); sprintf(i_lon, "%c",indic_long); sprintf(vit, "vitesse : %.2f ",vitesse); sprintf(rou, "route : %.2f ",route); sprintf(dat, "date : %.2f ",date); lcd.DisplayStringAt(0, LINE(4), (uint8_t *) heureS, CENTER_MODE); lcd.DisplayStringAt(0, LINE(5), (uint8_t *) lat, CENTER_MODE); lcd.DisplayStringAt(0, LINE(6), (uint8_t *) i_lat, CENTER_MODE); lcd.DisplayStringAt(0, LINE(7), (uint8_t *) lon, CENTER_MODE); lcd.DisplayStringAt(0, LINE(8), (uint8_t *) i_lon, CENTER_MODE); lcd.DisplayStringAt(0, LINE(9), (uint8_t *) vit, CENTER_MODE); lcd.DisplayStringAt(0, LINE(10), (uint8_t *) rou, CENTER_MODE); /*pc.printf("Latitude : %f\r\n",latitude); pc.printf("Indic lat : %s\r\n",indic_lat); pc.printf("Longitude : %f\r\n",longitude); pc.printf("Indic_long : %s\r\n",indic_long); pc.printf("Vitesse : %f\r\n",vitesse); pc.printf("Route : %f\r\n",route); pc.printf("Date : %f\r\n",date);*/ compte=0; } } break; case 3 : lcd.SetTextColor(LCD_COLOR_WHITE); lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"DHT program", CENTER_MODE); lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"******************", CENTER_MODE); wait(1); // wait 1 second for device stable status err = sensor.readData(); if (err == 0) { char temp[50] = {}; char tempF[50] = {}; char tempK[50] = {}; char humi[50] = {}; sprintf(temp, "Temperature is %.2f C ", sensor.ReadTemperature(CELCIUS)); sprintf(tempF, "Temperature is %.2f F ", sensor.ReadTemperature(FARENHEIT)); sprintf(tempK, "Temperature is %.2f K ", sensor.ReadTemperature(KELVIN)); sprintf(humi, "Humidity is %4.1f %% ", sensor.ReadHumidity()); lcd.DisplayStringAt(0, LINE(4), (uint8_t *) temp, CENTER_MODE); lcd.DisplayStringAt(0, LINE(6), (uint8_t *) tempF, CENTER_MODE); lcd.DisplayStringAt(0, LINE(8), (uint8_t *) tempK, CENTER_MODE); lcd.DisplayStringAt(0, LINE(10), (uint8_t *) humi, CENTER_MODE); /*lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT), CENTER_MODE); lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"\r\n******************\r\n", CENTER_MODE); lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"\r\n******************\r\n", CENTER_MODE); lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"\r\n******************\r\n", CENTER_MODE); printf(); printf(); printf("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN)); printf("Humidity is %4.2f \r\n",sensor.ReadHumidity()); printf("Dew point is %4.2f \r\n",sensor.CalcdewPoint(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity())); printf("Dew point (fast) is %4.2f \r\n",sensor.CalcdewPointFast(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));*/ } else { //printf("\r\nErr %i \n",err); char prep[50] = {}; sprintf(prep, "\r\n Err %i \n", err); //lcd.DisplayStringAt(0, LINE(10), (uint8_t *) prep, CENTER_MODE); } } } }