projet interfaçage

Dependencies:   Servo BSP_DISCO_F746NG

Files at this revision

API Documentation at this revision

Comitter:
maxenceadnot
Date:
Mon Jun 21 09:08:58 2021 +0000
Parent:
3:9f66aabe7b3b
Commit message:
projet adnot

Changed in this revision

Servo.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Servo.lib	Mon Jun 21 09:08:58 2021 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/simon/code/Servo/#36b69a7ced07
--- a/main.cpp	Wed Nov 20 11:49:15 2019 +0100
+++ b/main.cpp	Mon Jun 21 09:08:58 2021 +0000
@@ -1,74 +1,305 @@
 #include "mbed.h"
+#include "Servo.h"
 #include "stm32746g_discovery_lcd.h"
 #include "stm32746g_discovery_ts.h"
-
-int main()
-{
-    TS_StateTypeDef TS_State;
-    uint16_t x, y;
+ 
+   TS_StateTypeDef TS_State;
+   uint16_t x, y;
     uint8_t text[30];
     uint8_t status;
     uint8_t idx;
     uint8_t cleared = 0;
     uint8_t prev_nb_touches = 0;
+    
+PwmOut servo_mot(D6);
 
+InterruptIn motion(D7); // ir
+DigitalOut buzzer(D5); //buzzer
+int on = 1, off = 0; //buzzer
+int motion_detected = 0;//ir
+int code=0;
+int positionCode=0;
+     int touchh=0;
+     int activer=0;
+ int cnt = 0;//ir
+
+void irq_handler(void)// void ir
+{
+    motion_detected = 1;
+}
+
+void alarme(){
+if(motion_detected) {          //if ir
+cnt++;
+buzzer = on;
+
+BSP_LCD_FillRect (20, 255, 15, 15);
+
+}
+
+}
+
+void drawEtoile()
+{
+     
+     if(positionCode==0){
+     BSP_LCD_DisplayStringAt(32,42,(uint8_t*)" ",LEFT_MODE); //1
+     BSP_LCD_DisplayStringAt(32,96,(uint8_t*)" ",LEFT_MODE); //2
+     BSP_LCD_DisplayStringAt(32,150,(uint8_t*)" ",LEFT_MODE); //3
+     BSP_LCD_DisplayStringAt(32,205,(uint8_t*)" ",LEFT_MODE);} //4
+      
+    if(positionCode==1){
+     BSP_LCD_DisplayStringAt(32,42,(uint8_t*)"*",LEFT_MODE); }//1
+    
+    if(positionCode==2){
+     BSP_LCD_DisplayStringAt(32,42,(uint8_t*)"*",LEFT_MODE); //1
+     BSP_LCD_DisplayStringAt(32,96,(uint8_t*)"*",LEFT_MODE); }//2
+     
+     if(positionCode==3){
+     BSP_LCD_DisplayStringAt(32,42,(uint8_t*)"*",LEFT_MODE); //1
+     BSP_LCD_DisplayStringAt(32,96,(uint8_t*)"*",LEFT_MODE); //2
+     BSP_LCD_DisplayStringAt(32,150,(uint8_t*)"*",LEFT_MODE);} //3
+     
+     if(positionCode==4){
+     BSP_LCD_DisplayStringAt(32,42,(uint8_t*)"*",LEFT_MODE); //1
+     BSP_LCD_DisplayStringAt(32,96,(uint8_t*)"*",LEFT_MODE); //2
+     BSP_LCD_DisplayStringAt(32,150,(uint8_t*)"*",LEFT_MODE); //3
+     BSP_LCD_DisplayStringAt(32,205,(uint8_t*)"*",LEFT_MODE);} //4
+    }
+
+void draw(){
+   
+    drawEtoile();
+    
+    BSP_LCD_DrawRect (20, 33, 40, 30); //code 1         
+    BSP_LCD_DrawRect (20, 88, 40, 30); //code 2           
+    BSP_LCD_DrawRect (20, 143, 40, 30); //code 3   
+    BSP_LCD_DrawRect (20, 198, 40, 30); //code 4
+        
+    BSP_LCD_DrawRect (75, 10, 91, 77); //dessiner rectange 1              
+    BSP_LCD_DisplayStringAt(115,39,(uint8_t*)"1",LEFT_MODE);      
+         
+    BSP_LCD_DrawRect (75, 97, 91, 77); //dessiner rectange 2
+    BSP_LCD_DisplayStringAt(215,39,(uint8_t*)"2",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (75, 184, 91, 77); //dessiner rectange 3
+    BSP_LCD_DisplayStringAt(317,39,(uint8_t*)"3",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (176, 10, 91, 77); //dessiner rectange 4
+    BSP_LCD_DisplayStringAt(115,130,(uint8_t*)"4",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (176, 97, 91, 77); //dessiner rectange 5 
+    BSP_LCD_DisplayStringAt(215,130,(uint8_t*)"5",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (176, 184, 91, 77); //dessiner rectange 6
+    BSP_LCD_DisplayStringAt(317,130,(uint8_t*)"6",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (277, 10, 91, 77); //dessiner rectange 7
+    BSP_LCD_DisplayStringAt(115,218,(uint8_t*)"7",LEFT_MODE);
+    
+    BSP_LCD_DrawRect (277, 97, 91, 77); //dessiner rectange 8
+    BSP_LCD_DisplayStringAt(215,218,(uint8_t*)"8",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (277, 184, 91, 77); //dessiner rectange 9
+    BSP_LCD_DisplayStringAt(317,218,(uint8_t*)"9",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (378, 97, 91, 77); //dessiner rectange 0
+    BSP_LCD_DisplayStringAt(419,130,(uint8_t*)"0",LEFT_MODE); 
+    
+    BSP_LCD_DrawRect (378, 184, 91, 77); //dessiner rectange valider V
+    BSP_LCD_DisplayStringAt(419,218,(uint8_t*)"V",LEFT_MODE);
+    
+    BSP_LCD_DrawRect (378, 10, 91, 77); //dessiner rectange effacer X
+    BSP_LCD_DisplayStringAt(419,39,(uint8_t*)"X",LEFT_MODE); 
+        
+        
+        
+        if(TS_State.touchDetected){             
+               touchh=touchh+1;
+               
+               if(y<87&&y>10&&x>75&&x<166)// definir zone de touch //1
+                { 
+                     ThisThread::sleep_for(200ms);
+                     sprintf((char*)text, "numero 1");                
+                      BSP_LCD_DrawRect (75, 10, 91, 77); //dessiner rectange 1
+                    if( positionCode==0&&touchh==1){int code11=339;code=code+code11;positionCode=1;sprintf((char*)text, "p1");}                   
+                    if( positionCode==1&&touchh==2){int code12=762;code=code+code12;positionCode=2;sprintf((char*)text, "p2");}
+                    if( positionCode==2&&touchh==3){int code13=131;code=code+code13;positionCode=3;sprintf((char*)text, "p3");}
+                    if(positionCode==3&&touchh==4){int code14=201;code=code+code14;positionCode=4;sprintf((char*)text, "p4");}                                                 
+                }
+                
+                if(y<87&&y>10&&x>176&&x<267)// definir zone de touch  //2
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 2");
+                    if(positionCode==0&&touchh==1){int code21=751;code=code+code21;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code22=309;code=code+code22;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code23=540;code=code+code23;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code24=603;code=code+code24;positionCode=4;}               
+                }
+                               
+                 if(y<87&&y>10&&x>277&&x<368)// definir zone de touch //3
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 3");
+                    if(positionCode==0&&touchh==1){int code31=905;code=code+code31;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code32=805;code=code+code32;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code33=50;code=code+code33;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code34=10;code=code+code34;positionCode=4;}
+                }
+                       
+                   if(y<174&&y>97&&x>75&&x<166)// definir zone de touch //4
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 4");
+                    if(positionCode==0&&touchh==1){int code41=110;code=code+code41;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code42=322;code=code+code42;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code43=555;code=code+code43;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code44=672;code=code+code44;positionCode=4;}
+                }
+                           
+                if(y<174&&y>97&&x>176&&x<267)// definir zone de touch //5
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 5");
+                     if(positionCode==0&&touchh==1){int code51=631;code=code+code51;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code52=782;code=code+code52;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code53=823;code=code+code53;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code54=951;code=code+code54;positionCode=4;}                    
+                }
+                        
+                 if(y<174&&y>97&&x>277&&x<368)// definir zone de touch //6
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 6");
+                     if(positionCode==0&&touchh==1){int code61=729;code=code+code61;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code62=819;code=code+code62;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code63=157;code=code+code63;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code64=43;code=code+code64;positionCode=4;}
+                }
+                          
+                   if(y<261&&y>184&&x>75&&x<166)// definir zone de touch //7
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 7");
+                     if(positionCode==0&&touchh==1){int code71=537;code=code+code71;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code72=486;code=code+code72;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code73=352;code=code+code73;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code74=13;code=code+code74;positionCode=4;}
+                }
+                    
+                if(y<261&&y>184&&x>176&&x<267)// definir zone de touch //8
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 8");
+                     if(positionCode==0&&touchh==1){int code81=789;code=code+code81;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code82=18;code=code+code82;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code83=803;code=code+code83;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code84=935;code=code+code84;positionCode=4;}
+                }
+                            
+                 if(y<261&&y>184&&x>277&&x<368)// definir zone de touch //9
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 9");
+                     if(positionCode==0&&touchh==1){int code91=999;code=code+code91;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code92=1;code=code+code92;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code93=99;code=code+code93;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code94=57;code=code+code94;positionCode=4;}
+                }
+                
+    
+                 if(y<87&&y>10&&x>378&&x<470)// definir zone de touch //X
+                {
+                    sprintf((char*)text, "effacer");
+                    code=0;
+                    positionCode=0;
+                    touchh=0;                  
+                }
+                   
+                if(y<174&&y>97&&x>378&&x<470)// definir zone de touch //0
+                {
+                    ThisThread::sleep_for(200ms);
+                    sprintf((char*)text, "numero 0");
+                     if(positionCode==0&&touchh==1){int code01=666;code=code+code01;positionCode=1;}
+                    if(positionCode==1&&touchh==2){int code02=767;code=code+code02;positionCode=2;}
+                    if(positionCode==2&&touchh==3){int code03=897;code=code+code03;positionCode=3;}
+                    if(positionCode==3&&touchh==4){int code04=75;code=code+code04;positionCode=4;}
+                }
+                                          
+                if(y<261&&y>184&&x>378&&x<470)// definir zone de touch //V
+                {            
+                    sprintf((char*)text, "valider");
+                    servo_mot.pulsewidth_us(2000);
+                    if(code==1370&&positionCode==4){sprintf((char*)text,"code bon");  
+                    if(activer==1){
+                    activer=0;}
+                    else{activer=1;};   
+                    motion_detected = 0;
+                    buzzer = off;}
+                    
+                    if(code!=1370&&positionCode==4){sprintf((char*)text,"code faux"); }
+                     ThisThread::sleep_for(300ms);
+                    code=0;
+                    positionCode=0;
+                    touchh=0;                
+       } 
+    }
+ }
+ 
+int main()
+{
+  servo_mot.period_ms(30);         // Initialisation période du servo 
+ motion.rise(&irq_handler);// initialisation capteur de mouvement   
+        
+
+     
+  int i, time = 1500;
     BSP_LCD_Init();
     BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
     BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
 
-    BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
-    HAL_Delay(1000);
+  
 
     status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
-    if (status != TS_OK) {
-        BSP_LCD_Clear(LCD_COLOR_RED);
-        BSP_LCD_SetBackColor(LCD_COLOR_RED);
-        BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
-        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
-    } else {
-        BSP_LCD_Clear(LCD_COLOR_GREEN);
-        BSP_LCD_SetBackColor(LCD_COLOR_GREEN);
-        BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
-        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
-    }
+    
 
     HAL_Delay(1000);
-    BSP_LCD_SetFont(&Font12);
-    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
-    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
-
+    BSP_LCD_SetFont(&Font20); // taille de caractere
+    BSP_LCD_SetTextColor(LCD_COLOR_BLACK); //couleur texte
+    BSP_LCD_SetBackColor(LCD_COLOR_WHITE); //couleur texte
+ 
     while(1) {
-
-        BSP_TS_GetState(&TS_State);
-        if (TS_State.touchDetected) {
-            // Clear lines corresponding to old touches coordinates
-            if (TS_State.touchDetected < prev_nb_touches) {
-                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
-                    BSP_LCD_ClearStringLine(idx);
+               
+              
+               draw();
+               
+               if(activer==0){   // alarme desactivé
+               BSP_LCD_DisplayStringAt(0,255,(uint8_t*)"X",LEFT_MODE); // affiche un 'X' en bas a gauche de l'ecran pour signifier que l'alarme est desactivé            
+               servo_mot.pulsewidth_us(2500);// mettre le servo en mode "ouvert"
                 }
-            }
-            prev_nb_touches = TS_State.touchDetected;
-
-            cleared = 0;
-
-            sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
-            BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
-
+               
+               if(activer==1){ // alarme activé
+                   servo_mot.pulsewidth_us(700);// mettre le servo en mode "fermer"
+                   alarme();
+                   BSP_LCD_DisplayStringAt(0,255,(uint8_t*)"V",LEFT_MODE); // affiche un 'V' en bas a gauche de l'ecran pour signifier que l'alarme est activé            
+                  
+                   }
+             
+               BSP_TS_GetState(&TS_State);
+               if (TS_State.touchDetected) { 
+            cleared = 0;         
             for (idx = 0; idx < TS_State.touchDetected; idx++) {
                 x = TS_State.touchX[idx];
                 y = TS_State.touchY[idx];
-                sprintf((char*)text, "Touch %d: x=%d y=%d    ", idx+1, x, y);
-                BSP_LCD_DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
-            }
-
-            BSP_LCD_DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE);
+            }           
         } else {
             if (!cleared) {
-                BSP_LCD_Clear(LCD_COLOR_BLUE);
-                sprintf((char*)text, "Touches: 0");
-                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+                BSP_LCD_Clear(LCD_COLOR_WHITE);
                 cleared = 1;
             }
         }
     }
 }
+
+