interfaçage MECSE Capteur Humi-Tempé - GPS - µCam

Dependencies:   F746_GUI mbed DHT

Committer:
Pignouf971
Date:
Fri Jun 07 14:30:51 2019 +0000
Revision:
0:df1102e0a341
.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pignouf971 0:df1102e0a341 1
Pignouf971 0:df1102e0a341 2 #include "mbed.h"
Pignouf971 0:df1102e0a341 3 #include "LCD_DISCO_F746NG.h"
Pignouf971 0:df1102e0a341 4 #include "TS_DISCO_F746NG.h"
Pignouf971 0:df1102e0a341 5 #include "F746_GUI.hpp"
Pignouf971 0:df1102e0a341 6 #include "DHT.h"
Pignouf971 0:df1102e0a341 7
Pignouf971 0:df1102e0a341 8
Pignouf971 0:df1102e0a341 9 LCD_DISCO_F746NG lcd;
Pignouf971 0:df1102e0a341 10 DHT sensor(D3,AM2302);
Pignouf971 0:df1102e0a341 11 Serial GPS(A4, A5);
Pignouf971 0:df1102e0a341 12 Serial pc (USBTX,USBRX) ;
Pignouf971 0:df1102e0a341 13 Serial uCam (D1,D0);
Pignouf971 0:df1102e0a341 14
Pignouf971 0:df1102e0a341 15
Pignouf971 0:df1102e0a341 16
Pignouf971 0:df1102e0a341 17 Button GPSDATA(50, 100, 100, 100, "GPS",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE);
Pignouf971 0:df1102e0a341 18 Button TEMPDATA(195, 100, 100, 100, "TEMPERATURE",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE);
Pignouf971 0:df1102e0a341 19 Button CAMERA(340, 100, 100, 100,"CAMERA",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE);
Pignouf971 0:df1102e0a341 20 Button BACK(0, 242, 100, 30,"BACK",Font12,LCD_COLOR_BLUE,LCD_COLOR_BLACK,LCD_COLOR_WHITE);
Pignouf971 0:df1102e0a341 21 const unsigned char SYNC[] = {0xAA, 0x0D, 0x00, 0x00, 0x00, 0x00};
Pignouf971 0:df1102e0a341 22 const unsigned char ACK[] = {0xAA, 0x0E, 0x0D, 0x00, 0x00, 0x00};
Pignouf971 0:df1102e0a341 23 unsigned char buf[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Pignouf971 0:df1102e0a341 24 int err;
Pignouf971 0:df1102e0a341 25 int temps = 0;
Pignouf971 0:df1102e0a341 26 float Longitude = 0.0, Latitude = 0.0, Altitude = 0.0;
Pignouf971 0:df1102e0a341 27 int mode=0;
Pignouf971 0:df1102e0a341 28 float heure;
Pignouf971 0:df1102e0a341 29 float latitude;
Pignouf971 0:df1102e0a341 30 char indic_lat[5];
Pignouf971 0:df1102e0a341 31 float longitude;
Pignouf971 0:df1102e0a341 32 char indic_long[5];
Pignouf971 0:df1102e0a341 33 float vitesse;
Pignouf971 0:df1102e0a341 34 float route;
Pignouf971 0:df1102e0a341 35 float date;
Pignouf971 0:df1102e0a341 36 char heureS[50] = {};
Pignouf971 0:df1102e0a341 37 char lat[50] = {};
Pignouf971 0:df1102e0a341 38 char i_lat[3] = {};
Pignouf971 0:df1102e0a341 39 char lon[50] = {};
Pignouf971 0:df1102e0a341 40 char i_lon[3] = {};
Pignouf971 0:df1102e0a341 41 char vit[50] = {};
Pignouf971 0:df1102e0a341 42 char rou[50] = {};
Pignouf971 0:df1102e0a341 43 char dat[50] = {};
Pignouf971 0:df1102e0a341 44
Pignouf971 0:df1102e0a341 45
Pignouf971 0:df1102e0a341 46
Pignouf971 0:df1102e0a341 47 int main()
Pignouf971 0:df1102e0a341 48 {
Pignouf971 0:df1102e0a341 49
Pignouf971 0:df1102e0a341 50 GPS.baud(9600);
Pignouf971 0:df1102e0a341 51 pc.baud(115200);
Pignouf971 0:df1102e0a341 52 char buffer[200];
Pignouf971 0:df1102e0a341 53 int compte=0;
Pignouf971 0:df1102e0a341 54 int resultat;
Pignouf971 0:df1102e0a341 55 //EventQueue queue;
Pignouf971 0:df1102e0a341 56
Pignouf971 0:df1102e0a341 57 while(1)
Pignouf971 0:df1102e0a341 58 {
Pignouf971 0:df1102e0a341 59 if(CAMERA.Touched())
Pignouf971 0:df1102e0a341 60 {
Pignouf971 0:df1102e0a341 61 GPSDATA.Erase();
Pignouf971 0:df1102e0a341 62 GPSDATA.Inactivate();
Pignouf971 0:df1102e0a341 63 TEMPDATA.Erase();
Pignouf971 0:df1102e0a341 64 TEMPDATA.Inactivate();
Pignouf971 0:df1102e0a341 65 CAMERA.Erase();
Pignouf971 0:df1102e0a341 66 CAMERA.Inactivate();
Pignouf971 0:df1102e0a341 67 lcd.Clear(LCD_COLOR_BLACK);
Pignouf971 0:df1102e0a341 68 mode =1;
Pignouf971 0:df1102e0a341 69 BACK.Activate();
Pignouf971 0:df1102e0a341 70 }
Pignouf971 0:df1102e0a341 71 if(GPSDATA.Touched())
Pignouf971 0:df1102e0a341 72 {
Pignouf971 0:df1102e0a341 73 GPSDATA.Erase();
Pignouf971 0:df1102e0a341 74 GPSDATA.Inactivate();
Pignouf971 0:df1102e0a341 75 TEMPDATA.Erase();
Pignouf971 0:df1102e0a341 76 TEMPDATA.Inactivate();
Pignouf971 0:df1102e0a341 77 CAMERA.Erase();
Pignouf971 0:df1102e0a341 78 CAMERA.Inactivate();
Pignouf971 0:df1102e0a341 79 lcd.Clear(LCD_COLOR_BLACK);
Pignouf971 0:df1102e0a341 80 mode =2;
Pignouf971 0:df1102e0a341 81 BACK.Activate();
Pignouf971 0:df1102e0a341 82 }
Pignouf971 0:df1102e0a341 83 if(TEMPDATA.Touched())
Pignouf971 0:df1102e0a341 84 {
Pignouf971 0:df1102e0a341 85 GPSDATA.Erase();
Pignouf971 0:df1102e0a341 86 GPSDATA.Inactivate();
Pignouf971 0:df1102e0a341 87 TEMPDATA.Erase();
Pignouf971 0:df1102e0a341 88 TEMPDATA.Inactivate();
Pignouf971 0:df1102e0a341 89 CAMERA.Erase();
Pignouf971 0:df1102e0a341 90 CAMERA.Inactivate();
Pignouf971 0:df1102e0a341 91 lcd.Clear(LCD_COLOR_BLACK);
Pignouf971 0:df1102e0a341 92 mode=3;
Pignouf971 0:df1102e0a341 93 BACK.Activate();
Pignouf971 0:df1102e0a341 94 }
Pignouf971 0:df1102e0a341 95 if(BACK.Touched())
Pignouf971 0:df1102e0a341 96 {
Pignouf971 0:df1102e0a341 97 lcd.Clear(LCD_COLOR_BLACK);
Pignouf971 0:df1102e0a341 98 CAMERA.Activate();
Pignouf971 0:df1102e0a341 99 TEMPDATA.Activate();
Pignouf971 0:df1102e0a341 100 GPSDATA.Activate();
Pignouf971 0:df1102e0a341 101 BACK.Activate();
Pignouf971 0:df1102e0a341 102 mode =0;
Pignouf971 0:df1102e0a341 103 }
Pignouf971 0:df1102e0a341 104 switch (mode){
Pignouf971 0:df1102e0a341 105 case 1 :
Pignouf971 0:df1102e0a341 106 // Set uCam baud rate - this is the highest that uCam will auto detect
Pignouf971 0:df1102e0a341 107 uCam.baud(57600);
Pignouf971 0:df1102e0a341 108
Pignouf971 0:df1102e0a341 109 // Start by Initializing communcation to uCam
Pignouf971 0:df1102e0a341 110 pc.printf("\n\r-- uCam Initailse --");
Pignouf971 0:df1102e0a341 111
Pignouf971 0:df1102e0a341 112 // This will give 60 attempts to sync with the uCam module
Pignouf971 0:df1102e0a341 113 for (int i=0; i<=60; i ++)
Pignouf971 0:df1102e0a341 114 {
Pignouf971 0:df1102e0a341 115 // Send out the sync command
Pignouf971 0:df1102e0a341 116 pc.printf("\n\rSending out SYNC command");
Pignouf971 0:df1102e0a341 117 for (int i=0; i<6; i++) {
Pignouf971 0:df1102e0a341 118 uCam.putc(SYNC[i]);
Pignouf971 0:df1102e0a341 119 }
Pignouf971 0:df1102e0a341 120
Pignouf971 0:df1102e0a341 121 // Get response from uCam
Pignouf971 0:df1102e0a341 122 if (uCam.readable()) {
Pignouf971 0:df1102e0a341 123 for (int i=0; i<6; i++) {
Pignouf971 0:df1102e0a341 124 buf[i] = uCam.getc();
Pignouf971 0:df1102e0a341 125 }
Pignouf971 0:df1102e0a341 126 }
Pignouf971 0:df1102e0a341 127
Pignouf971 0:df1102e0a341 128 // Check if it was an ACK
Pignouf971 0:df1102e0a341 129 if (buf[0] == 0xAA && buf[1] == 0x0E && buf[2] == 0x0D && buf[4] == 0x00 && buf[5] == 0x00)
Pignouf971 0:df1102e0a341 130 {
Pignouf971 0:df1102e0a341 131 pc.printf("\n\rACK received");
Pignouf971 0:df1102e0a341 132 // Get response from uCam
Pignouf971 0:df1102e0a341 133 if (uCam.readable())
Pignouf971 0:df1102e0a341 134 {
Pignouf971 0:df1102e0a341 135 for (int i=0; i<6; i++)
Pignouf971 0:df1102e0a341 136 {
Pignouf971 0:df1102e0a341 137 buf[i] = uCam.getc();
Pignouf971 0:df1102e0a341 138 }
Pignouf971 0:df1102e0a341 139 }
Pignouf971 0:df1102e0a341 140 if (buf[0] == 0xAA && buf[1] == 0x0D && buf[2] == 0x00 && buf[3] == 0x00 && buf[4] == 0x00 && buf[5] == 0x00)
Pignouf971 0:df1102e0a341 141 {
Pignouf971 0:df1102e0a341 142 pc.printf("\n\rSYNC received");
Pignouf971 0:df1102e0a341 143 // Send out an ACK as response
Pignouf971 0:df1102e0a341 144 pc.printf("\n\rSending out ACK command");
Pignouf971 0:df1102e0a341 145 for (int i=0; i<6; i++)
Pignouf971 0:df1102e0a341 146 {
Pignouf971 0:df1102e0a341 147 uCam.putc(ACK[i]);
Pignouf971 0:df1102e0a341 148 }
Pignouf971 0:df1102e0a341 149 pc.printf("\n\rSYNC complete after %d attempts",i+1);
Pignouf971 0:df1102e0a341 150 break;
Pignouf971 0:df1102e0a341 151 }
Pignouf971 0:df1102e0a341 152 else
Pignouf971 0:df1102e0a341 153 {
Pignouf971 0:df1102e0a341 154 pc.printf("\n\rNo SYNC received - trying again...");
Pignouf971 0:df1102e0a341 155 }
Pignouf971 0:df1102e0a341 156 }
Pignouf971 0:df1102e0a341 157 else
Pignouf971 0:df1102e0a341 158 {
Pignouf971 0:df1102e0a341 159 pc.printf("\n\rNo ACK received - trying again...");
Pignouf971 0:df1102e0a341 160 }
Pignouf971 0:df1102e0a341 161 if (i == 60)
Pignouf971 0:df1102e0a341 162 pc.printf("\nTesting failed - Too many attempts");
Pignouf971 0:df1102e0a341 163 }
Pignouf971 0:df1102e0a341 164 pc.printf("\n\n\rTest finished!");
Pignouf971 0:df1102e0a341 165 break;
Pignouf971 0:df1102e0a341 166 case 2 :
Pignouf971 0:df1102e0a341 167
Pignouf971 0:df1102e0a341 168
Pignouf971 0:df1102e0a341 169 while (GPS.readable()){
Pignouf971 0:df1102e0a341 170
Pignouf971 0:df1102e0a341 171 buffer[compte]=GPS.getc();
Pignouf971 0:df1102e0a341 172 compte++;
Pignouf971 0:df1102e0a341 173 if (buffer[compte-1]=='\n')
Pignouf971 0:df1102e0a341 174 {
Pignouf971 0:df1102e0a341 175 buffer[compte]='\0';
Pignouf971 0:df1102e0a341 176 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)buffer, CENTER_MODE);
Pignouf971 0:df1102e0a341 177
Pignouf971 0:df1102e0a341 178 //pc.printf("%s",buffer);
Pignouf971 0:df1102e0a341 179
Pignouf971 0:df1102e0a341 180 sscanf(buffer,"$GPRMC,%f,%f,%c,%f,%c,%f,%f,%f",&heure,&latitude,indic_lat,&longitude,indic_long,&vitesse,&route,&date);
Pignouf971 0:df1102e0a341 181 //pc.printf("Heure : %s\r\n",heure);
Pignouf971 0:df1102e0a341 182 sprintf(heureS, "heure : %f ",heure);
Pignouf971 0:df1102e0a341 183 sprintf(dat, "date : %f ",date);
Pignouf971 0:df1102e0a341 184 lcd.DisplayStringAt(0, LINE(4), (uint8_t *) heureS, CENTER_MODE);
Pignouf971 0:df1102e0a341 185 lcd.DisplayStringAt(0, LINE(11), (uint8_t *) dat, CENTER_MODE);
Pignouf971 0:df1102e0a341 186 /*sprintf(lat, "latitude : %.2f ",latitude);
Pignouf971 0:df1102e0a341 187 sprintf(i_lat, "%c",indic_lat);
Pignouf971 0:df1102e0a341 188 sprintf(lon, "longitude : %.2f ",longitude);
Pignouf971 0:df1102e0a341 189 sprintf(i_lon, "%c",indic_long);
Pignouf971 0:df1102e0a341 190 sprintf(vit, "vitesse : %.2f ",vitesse);
Pignouf971 0:df1102e0a341 191 sprintf(rou, "route : %.2f ",route);
Pignouf971 0:df1102e0a341 192 sprintf(dat, "date : %.2f ",date);
Pignouf971 0:df1102e0a341 193
Pignouf971 0:df1102e0a341 194 lcd.DisplayStringAt(0, LINE(4), (uint8_t *) heureS, CENTER_MODE);
Pignouf971 0:df1102e0a341 195 lcd.DisplayStringAt(0, LINE(5), (uint8_t *) lat, CENTER_MODE);
Pignouf971 0:df1102e0a341 196 lcd.DisplayStringAt(0, LINE(6), (uint8_t *) i_lat, CENTER_MODE);
Pignouf971 0:df1102e0a341 197 lcd.DisplayStringAt(0, LINE(7), (uint8_t *) lon, CENTER_MODE);
Pignouf971 0:df1102e0a341 198 lcd.DisplayStringAt(0, LINE(8), (uint8_t *) i_lon, CENTER_MODE);
Pignouf971 0:df1102e0a341 199 lcd.DisplayStringAt(0, LINE(9), (uint8_t *) vit, CENTER_MODE);
Pignouf971 0:df1102e0a341 200 lcd.DisplayStringAt(0, LINE(10), (uint8_t *) rou, CENTER_MODE);
Pignouf971 0:df1102e0a341 201
Pignouf971 0:df1102e0a341 202 /*pc.printf("Latitude : %f\r\n",latitude);
Pignouf971 0:df1102e0a341 203 pc.printf("Indic lat : %s\r\n",indic_lat);
Pignouf971 0:df1102e0a341 204 pc.printf("Longitude : %f\r\n",longitude);
Pignouf971 0:df1102e0a341 205 pc.printf("Indic_long : %s\r\n",indic_long);
Pignouf971 0:df1102e0a341 206 pc.printf("Vitesse : %f\r\n",vitesse);
Pignouf971 0:df1102e0a341 207 pc.printf("Route : %f\r\n",route);
Pignouf971 0:df1102e0a341 208 pc.printf("Date : %f\r\n",date);*/
Pignouf971 0:df1102e0a341 209 compte=0;
Pignouf971 0:df1102e0a341 210
Pignouf971 0:df1102e0a341 211 }
Pignouf971 0:df1102e0a341 212
Pignouf971 0:df1102e0a341 213 }
Pignouf971 0:df1102e0a341 214 break;
Pignouf971 0:df1102e0a341 215 case 3 :
Pignouf971 0:df1102e0a341 216 lcd.SetTextColor(LCD_COLOR_WHITE);
Pignouf971 0:df1102e0a341 217 lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"DHT program", CENTER_MODE);
Pignouf971 0:df1102e0a341 218 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"******************", CENTER_MODE);
Pignouf971 0:df1102e0a341 219 wait(1); // wait 1 second for device stable status
Pignouf971 0:df1102e0a341 220 err = sensor.readData();
Pignouf971 0:df1102e0a341 221
Pignouf971 0:df1102e0a341 222 if (err == 0)
Pignouf971 0:df1102e0a341 223
Pignouf971 0:df1102e0a341 224 {
Pignouf971 0:df1102e0a341 225 char temp[50] = {};
Pignouf971 0:df1102e0a341 226 char tempF[50] = {};
Pignouf971 0:df1102e0a341 227 char tempK[50] = {};
Pignouf971 0:df1102e0a341 228 char humi[50] = {};
Pignouf971 0:df1102e0a341 229 sprintf(temp, "Temperature is %.2f C ", sensor.ReadTemperature(CELCIUS));
Pignouf971 0:df1102e0a341 230 sprintf(tempF, "Temperature is %.2f F ", sensor.ReadTemperature(FARENHEIT));
Pignouf971 0:df1102e0a341 231 sprintf(tempK, "Temperature is %.2f K ", sensor.ReadTemperature(KELVIN));
Pignouf971 0:df1102e0a341 232 sprintf(humi, "Humidity is %4.1f %% ", sensor.ReadHumidity());
Pignouf971 0:df1102e0a341 233 lcd.DisplayStringAt(0, LINE(4), (uint8_t *) temp, CENTER_MODE);
Pignouf971 0:df1102e0a341 234 lcd.DisplayStringAt(0, LINE(6), (uint8_t *) tempF, CENTER_MODE);
Pignouf971 0:df1102e0a341 235 lcd.DisplayStringAt(0, LINE(8), (uint8_t *) tempK, CENTER_MODE);
Pignouf971 0:df1102e0a341 236 lcd.DisplayStringAt(0, LINE(10), (uint8_t *) humi, CENTER_MODE);
Pignouf971 0:df1102e0a341 237 /*lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT), CENTER_MODE);
Pignouf971 0:df1102e0a341 238 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"\r\n******************\r\n", CENTER_MODE);
Pignouf971 0:df1102e0a341 239 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"\r\n******************\r\n", CENTER_MODE);
Pignouf971 0:df1102e0a341 240 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"\r\n******************\r\n", CENTER_MODE);
Pignouf971 0:df1102e0a341 241 printf();
Pignouf971 0:df1102e0a341 242 printf();
Pignouf971 0:df1102e0a341 243 printf("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN));
Pignouf971 0:df1102e0a341 244 printf("Humidity is %4.2f \r\n",sensor.ReadHumidity());
Pignouf971 0:df1102e0a341 245 printf("Dew point is %4.2f \r\n",sensor.CalcdewPoint(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
Pignouf971 0:df1102e0a341 246 printf("Dew point (fast) is %4.2f \r\n",sensor.CalcdewPointFast(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));*/
Pignouf971 0:df1102e0a341 247 } else {
Pignouf971 0:df1102e0a341 248 //printf("\r\nErr %i \n",err);
Pignouf971 0:df1102e0a341 249 char prep[50] = {};
Pignouf971 0:df1102e0a341 250 sprintf(prep, "\r\n Err %i \n", err);
Pignouf971 0:df1102e0a341 251 //lcd.DisplayStringAt(0, LINE(10), (uint8_t *) prep, CENTER_MODE);
Pignouf971 0:df1102e0a341 252 }
Pignouf971 0:df1102e0a341 253 }
Pignouf971 0:df1102e0a341 254
Pignouf971 0:df1102e0a341 255
Pignouf971 0:df1102e0a341 256
Pignouf971 0:df1102e0a341 257 }
Pignouf971 0:df1102e0a341 258 }