Coline Chapellon / Mbed OS interfacage

Dependencies:   TS_DISCO_F746NG LCD_DISCO_F746NG SRF02 BSP_DISCO_F746NG BUTTON_GROUP

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }