Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: TS_DISCO_F746NG LCD_DISCO_F746NG SRF02 BSP_DISCO_F746NG BUTTON_GROUP
main.cpp
00001 #include "mbed.h" 00002 #include "stm32746g_discovery_lcd.h" 00003 #include "stm32746g_discovery_ts.h" 00004 #include "button_group.hpp" 00005 #include "LogoParisSaclay.h" 00006 #include "fleche.h" 00007 #include "mbed.h" 00008 #include "SRF02.h" 00009 00010 //declarations 00011 TS_StateTypeDef TS_State; 00012 00013 uint16_t x, y; 00014 uint8_t text[30]; 00015 uint8_t status; 00016 00017 void page_capteur(void); //0 00018 void page_alarme(void); //1 00019 void page_accueil(void); //2 00020 00021 int page = 2; 00022 uint8_t idx; 00023 uint8_t dStd = 50; 00024 uint8_t dLim = 40; 00025 uint8_t dCrit = 30; 00026 00027 SRF02 sensor(0xE0,PB_9,PB_8); // address, SDA, SCL 00028 DigitalOut buzzer(PH_6); 00029 00030 00031 //fonction pour afficher l'image fleche 00032 void drawImage_fleche(int offsetX, int offsetY) 00033 { 00034 int x = 0; 00035 int y = 0; 00036 uint32_t* dataPtr = (uint32_t*)fleche.data; 00037 while(y < fleche.height) { 00038 while(x < fleche.width) { 00039 BSP_LCD_DrawPixel(x + offsetX, y + offsetY, *dataPtr); 00040 dataPtr++; 00041 x++; 00042 } 00043 x = 0; 00044 y++; 00045 } 00046 } 00047 00048 00049 //fonction pour afficher l'image logo 00050 void drawImage_LogoParisSaclay(int offsetX, int offsetY) 00051 { 00052 int x = 0; 00053 int y = 0; 00054 uint32_t* dataPtr = (uint32_t*)LogoParisSaclay.data; 00055 while(y < LogoParisSaclay.height) { 00056 while(x < LogoParisSaclay.width) { 00057 BSP_LCD_DrawPixel(x + offsetX, y + offsetY, *dataPtr); 00058 dataPtr++; 00059 x++; 00060 } 00061 x = 0; 00062 y++; 00063 } 00064 } 00065 00066 00067 00068 ///////////////////// 00069 ///// PROGRAMME ///// 00070 ///////////////////// 00071 int main() 00072 { 00073 //initialisation de l'ecran 00074 BSP_LCD_Init(); 00075 BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); 00076 BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); 00077 BSP_LCD_Clear(LCD_COLOR_WHITE); 00078 00079 status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); 00080 if (status != TS_OK) { 00081 BSP_LCD_Clear(LCD_COLOR_WHITE); 00082 BSP_LCD_SetBackColor(LCD_COLOR_WHITE); 00083 BSP_LCD_SetTextColor(LCD_COLOR_GREEN); 00084 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE); 00085 } 00086 else { 00087 BSP_LCD_Clear(LCD_COLOR_WHITE); 00088 BSP_LCD_SetBackColor(LCD_COLOR_CYAN); 00089 BSP_LCD_SetTextColor(LCD_COLOR_BLACK); 00090 BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"PROJET INTERFACAGE", CENTER_MODE); 00091 } 00092 00093 HAL_Delay(2000); 00094 BSP_LCD_Clear(LCD_COLOR_WHITE); 00095 00096 BSP_LCD_SetFont(&Font12); 00097 BSP_LCD_SetBackColor(LCD_COLOR_WHITE); 00098 BSP_LCD_SetTextColor(LCD_COLOR_BLACK); 00099 00100 //lancement du programme 00101 while(1) { 00102 00103 ////////////////////////////// 00104 ///// DETECTION CLICS : ////// 00105 ////////////////////////////// 00106 00107 BSP_TS_GetState(&TS_State); 00108 for (idx = 0; idx < TS_State.touchDetected; idx++) 00109 { 00110 x = TS_State.touchX[idx]; 00111 y = TS_State.touchY[idx]; 00112 } 00113 00114 00115 ////////////////////////////// 00116 ///// AFFICHAGE PAGES : ////// 00117 ////////////////////////////// 00118 00119 //PAGE ACCUEIL VERS PAGE CAPTEUR 00120 //si page p et clic sur cadre correspondant 00121 if ((page == 2) && (x>= 65 && x<= 215) && (y>= 55 && y<= 230)) 00122 { 00123 //reset ecran et coordonnées 00124 BSP_LCD_Clear(LCD_COLOR_WHITE); 00125 x = 0; 00126 y = 0; 00127 //affichage page p 00128 page = 0; 00129 HAL_Delay(300); 00130 } 00131 00132 //PAGE ACCUEIL VERS PAGE ALARME 00133 if ((page == 2) && (x>= 265 && x<= 415) && (y>= 55 && y<= 230)) 00134 { 00135 BSP_LCD_Clear(LCD_COLOR_WHITE); 00136 x = 0; 00137 y = 0; 00138 page = 1; 00139 HAL_Delay(300); 00140 } 00141 00142 // PAGE CAPTEUR VERS PAGE D'ACCUEIL 00143 if ((page == 0) && (x>= 455 && x<= 480) && (y>= 0 && y<= 25)) 00144 { 00145 BSP_LCD_Clear(LCD_COLOR_WHITE); 00146 x = 0; 00147 y = 0; 00148 page = 2; 00149 HAL_Delay(300); 00150 } 00151 00152 // PAGE ALARME VERS PAGE D'ACCUEIL 00153 if ((page == 1) && (x>= 455 && x<= 480) && (y>= 0 && y<= 25)) 00154 { 00155 BSP_LCD_Clear(LCD_COLOR_WHITE); 00156 x = 0; 00157 y = 0; 00158 page = 2; 00159 HAL_Delay(300); 00160 } 00161 00162 // AFFICHAGE DE LA PAGE D'ACCUEIL 00163 else if (page == 2) 00164 { 00165 page_accueil(); 00166 } 00167 00168 00169 ///////////////////////// 00170 ///// MODE CAPTEUR : //// 00171 ///////////////////////// 00172 00173 //REGLAGE DES SEUILS D'ALARME : 00174 00175 //dStd -1 00176 //en page capteur, si clic sur cadre correspondant 00177 else if ((page == 0) && (x>= 8 && x<= 55) && (y>= 33 && y<= 85)) 00178 { 00179 x = 0; 00180 y = 0; 00181 //si seuil changeable 00182 if (dStd >> (dLim+5) && dStd <= 80) 00183 //modifier en conséquence 00184 { dStd = dStd - 1; } 00185 HAL_Delay(200); 00186 } 00187 00188 //dStd +1 00189 else if ((page == 0) && (x>= 188 && x<= 231) && (y>= 33 && y<= 85)) 00190 { 00191 x = 0; 00192 y = 0; 00193 if (dStd >= (dLim+5) && dStd < 80) 00194 { dStd = dStd + 1; } 00195 HAL_Delay(200); 00196 } 00197 00198 //dLim -1 00199 else if ((page == 0) && (x>= 8 && x<= 51) && (y>= 113 && y<= 160)) 00200 { 00201 x = 0; 00202 y = 0; 00203 if (dLim > (dCrit+5) && dLim <= (dStd-5)) 00204 { dLim = dLim - 1; } 00205 HAL_Delay(200); 00206 } 00207 00208 //dLim +1 00209 else if ((page == 0) && (x>= 193 && x<= 236) && (y>= 113 && y<= 160)) 00210 { 00211 x = 0; 00212 y = 0; 00213 if (dLim >= (dCrit+5) && dLim < (dStd-5)) 00214 { dLim = dLim + 1; } 00215 HAL_Delay(200); 00216 } 00217 00218 //dCrit -1 00219 else if ((page == 0) && (x>= 8 && x<= 51) && (y>= 193 && y<= 240)) 00220 { 00221 x = 0; 00222 y = 0; 00223 if (dCrit > 20 && dCrit <= (dLim-5)) 00224 { dCrit = dCrit - 1; } 00225 HAL_Delay(200); 00226 } 00227 00228 00229 //dCrit +1 00230 else if ((page == 0) && (x>= 193 && x<= 236) && (y>= 193 && y<= 240)) 00231 { 00232 x = 0; 00233 y = 0; 00234 if (dCrit >= 20 && dCrit < (dLim-5)) 00235 { dCrit = dCrit + 1; } 00236 HAL_Delay(200); 00237 } 00238 00239 else if (page == 0) 00240 { 00241 // AFFICHAGE DE LA PAGE MODE CAPTEUR 00242 page_capteur(); 00243 00244 00245 //LECTURE DU CAPTEUR ET AFFICHAGE DE LA DISTANCE MESUREE 00246 int distance; 00247 //lecture du capteur en cm 00248 distance = sensor.GetCentimeters(); 00249 //affichage sur l'ecran 00250 BSP_LCD_SetTextColor(LCD_COLOR_BLACK); 00251 sprintf((char*)text, "Distance = %d cm",distance); 00252 BSP_LCD_DisplayStringAt(80, LINE(3), (uint8_t *)&text, RIGHT_MODE); 00253 HAL_Delay(20); 00254 00255 00256 //AFFICHAGE DES ALARMES ET DECLENCHEMENT DES BIPS 00257 if(distance >= dStd){ //distance > a tous les seuils d'alarme (ras) 00258 buzzer = 0; 00259 } 00260 00261 //premier seuil 00262 if(distance < dStd){ //dStd triggered 00263 //afficher rectangle vert 00264 BSP_LCD_SetTextColor(LCD_COLOR_GREEN); 00265 BSP_LCD_FillRect(347, 180, 40, 40); 00266 } 00267 else{ //dStd ok 00268 BSP_LCD_SetTextColor(LCD_COLOR_WHITE); 00269 BSP_LCD_FillRect(347, 180, 40, 40); 00270 } 00271 00272 //deuxième seuil 00273 if(distance < dLim){ //dLim triggered 00274 //afficher rectangle orange 00275 BSP_LCD_SetTextColor(LCD_COLOR_ORANGE); 00276 BSP_LCD_FillRect(338, 115, 60, 50); 00277 //faire bipper buzzer 00278 if(distance > dCrit){ 00279 buzzer = 1; 00280 HAL_Delay(250); 00281 buzzer = 0; 00282 HAL_Delay(750); 00283 } 00284 } 00285 else{ //dLim ok 00286 BSP_LCD_SetTextColor(LCD_COLOR_WHITE); 00287 BSP_LCD_FillRect(338, 115, 60, 50); 00288 buzzer = 0; 00289 } 00290 00291 //seuil max 00292 if(distance < dCrit){ //dCrit triggered 00293 //afficher rectangle rouge 00294 BSP_LCD_SetTextColor(LCD_COLOR_RED); 00295 BSP_LCD_FillRect(330, 45, 80, 55); 00296 //faire sonner buzzer en continu 00297 buzzer = 1; 00298 } 00299 else{ //dCrit ok 00300 BSP_LCD_SetTextColor(LCD_COLOR_WHITE); 00301 BSP_LCD_FillRect(330, 45, 80, 55); 00302 buzzer = 0; 00303 } 00304 00305 }//fin mode capteur 00306 00307 00308 ///////////////////////// 00309 ///// MODE ALARME : ///// 00310 ///////////////////////// 00311 00312 else if (page == 1) 00313 { 00314 // AFFICHAGE DE LA PAGE MODE ALARME 00315 page_alarme(); 00316 00317 00318 //LECTURE DU CAPTEUR ET AFFICHAGE DE LA DISTANCE MESUREE 00319 int distance; 00320 //lecture du capteur en cm 00321 distance = sensor.GetCentimeters(); 00322 sprintf((char*)text, "Distance = %d cm",distance); 00323 BSP_LCD_DisplayStringAt(80, LINE(3), (uint8_t *)&text, RIGHT_MODE); 00324 HAL_Delay(20); 00325 00326 00327 // ALERTE 00328 if(distance < 40){ //alarme triggered 00329 //afficher rectangle 00330 BSP_LCD_SetTextColor(LCD_COLOR_RED); 00331 BSP_LCD_FillRect(165,70,150,150); 00332 //faire sonner buzzer en continu 00333 buzzer = 1; 00334 } 00335 else{ //alarme ok 00336 BSP_LCD_SetTextColor(LCD_COLOR_WHITE); 00337 BSP_LCD_FillRect(165,70,150,150); 00338 buzzer = 0; 00339 } 00340 00341 //afficher message detection 00342 sprintf((char*)text, "INTRUSION"); 00343 BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)&text, CENTER_MODE); 00344 00345 }//fin mode alarme 00346 00347 }//fin while 00348 00349 }//fin main 00350 00351 00352 00353 ///////////////////////// 00354 ///// PAGE CAPTEUR ////// 00355 ///////////////////////// 00356 void page_capteur () 00357 { 00358 page = 0; 00359 BSP_LCD_SetTextColor(LCD_COLOR_BLACK); 00360 00361 //afficher logo 00362 drawImage_LogoParisSaclay(0,0); 00363 00364 //afficher titre page 00365 sprintf((char*)text, "Mode Capteur de recul"); 00366 BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, CENTER_MODE); 00367 00368 //afficher fleche 00369 drawImage_fleche(447,0); 00370 00371 //ligne de "cadre" 00372 BSP_LCD_DrawHLine(0,24,480); 00373 00374 00375 //ZONE REGLAGE dStd 00376 //afficher rectangle cadre 00377 BSP_LCD_DrawRect(8, 33, 228, 74); 00378 //afficher seuil 00379 sprintf ((char*)text, "%d", dStd); 00380 BSP_LCD_DisplayStringAt(110, 51, (uint8_t *)&text, LEFT_MODE); 00381 //ligne "cadre" - 00382 BSP_LCD_DrawVLine(51,33,47); 00383 //afficher - 00384 sprintf((char*)text, "-"); 00385 BSP_LCD_DisplayStringAt(26, 51, (uint8_t *)&text, LEFT_MODE); 00386 //ligne "cadre" + 00387 BSP_LCD_DrawVLine(193,33,47); 00388 //afficher + 00389 sprintf((char*)text, "+"); 00390 BSP_LCD_DisplayStringAt(212, 51, (uint8_t *)&text, LEFT_MODE); 00391 //ligne "cadre" nom du seuil 00392 BSP_LCD_DrawHLine(8,80,228); 00393 //afficher nom du seuil 00394 sprintf((char*)text, "Distance acceptable"); 00395 BSP_LCD_DisplayStringAt(57,87, (uint8_t *)&text, LEFT_MODE); 00396 00397 00398 //ZONE REGLAGE dLim 00399 BSP_LCD_DrawRect(8, 113, 228, 74); 00400 sprintf((char*)text, "%d", dLim); 00401 BSP_LCD_DisplayStringAt(110, 131, (uint8_t *)&text, LEFT_MODE); 00402 BSP_LCD_DrawVLine(51,113,47); 00403 sprintf((char*)text, "-"); 00404 BSP_LCD_DisplayStringAt(27, 131, (uint8_t *)&text, LEFT_MODE); 00405 BSP_LCD_DrawVLine(193,113,47); 00406 sprintf((char*)text, "+"); 00407 BSP_LCD_DisplayStringAt(212, 131, (uint8_t *)&text, LEFT_MODE); 00408 BSP_LCD_DrawHLine(8,160,228); 00409 sprintf((char*)text, "Distance limite"); 00410 BSP_LCD_DisplayStringAt(70, 167, (uint8_t *)&text, LEFT_MODE); 00411 00412 //ZONE REGLAGE dCrit 00413 BSP_LCD_DrawRect(8, 193, 228, 73); 00414 sprintf((char*)text, "%d", dCrit); 00415 BSP_LCD_DisplayStringAt(110, 212, (uint8_t *)&text, LEFT_MODE); 00416 BSP_LCD_DrawVLine(50,193,47); 00417 sprintf((char*)text, "-"); 00418 BSP_LCD_DisplayStringAt(27, 212, (uint8_t *)&text, LEFT_MODE); 00419 BSP_LCD_DrawVLine(193,193,47); 00420 sprintf((char*)text, "+"); 00421 BSP_LCD_DisplayStringAt(212, 212, (uint8_t *)&text, LEFT_MODE); 00422 BSP_LCD_DrawHLine(8,240,228); 00423 sprintf((char*)text, "Distance critique"); 00424 BSP_LCD_DisplayStringAt(63, 247, (uint8_t *)&text, LEFT_MODE); 00425 00426 00427 //PASTILLE DE BASE 00428 BSP_LCD_SetTextColor(LCD_COLOR_GREEN); 00429 BSP_LCD_FillRect(350, 237, 30, 30); 00430 } 00431 00432 00433 00434 /////////////////////// 00435 ///// PAGE ALARME ///// 00436 /////////////////////// 00437 void page_alarme() 00438 { 00439 page = 1; 00440 00441 //afficher logo 00442 drawImage_LogoParisSaclay(0,0); 00443 00444 //afficher fleche 00445 drawImage_fleche(447,0); 00446 BSP_LCD_SetTextColor(LCD_COLOR_BLACK); 00447 00448 //ligne de "cadre" 00449 BSP_LCD_DrawHLine(0,24,480); 00450 00451 //afficher titre page 00452 sprintf((char*)text, "Mode Alarme de securite"); 00453 BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, CENTER_MODE); 00454 } 00455 00456 00457 //////////////////////// 00458 ///// PAGE ACCUEIL ///// 00459 //////////////////////// 00460 00461 void page_accueil() 00462 { 00463 page = 2; 00464 BSP_LCD_SetTextColor(LCD_COLOR_BLACK); 00465 00466 //afficher logo 00467 drawImage_LogoParisSaclay(0,0); 00468 00469 //afficher titre page 00470 sprintf((char*)text, "Page d'accueil"); 00471 BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, CENTER_MODE); 00472 00473 //Mode recul 00474 //afficher rectangle cadre 00475 BSP_LCD_DrawRect(65, 55, 150, 175); 00476 //ligne "cadre" nom du mode 00477 BSP_LCD_DrawHLine(65,210,150); 00478 //afficher nom du mode 00479 sprintf((char*)text, "Capteur de recul"); 00480 BSP_LCD_DisplayStringAt(85, LINE(18), (uint8_t *)&text, LEFT_MODE); 00481 00482 00483 //Mode alarme 00484 BSP_LCD_DrawRect(265, 55, 150, 175); 00485 BSP_LCD_DrawHLine(265,210,150); 00486 BSP_LCD_SetTextColor(LCD_COLOR_BLUE); 00487 sprintf((char*)text, "Alarme de securite"); 00488 BSP_LCD_DisplayStringAt(102, LINE(18), (uint8_t *)&text, CENTER_MODE); 00489 }
Generated on Wed Aug 10 2022 07:10:50 by
1.7.2