projet interfaçage

Dependencies:   Servo BSP_DISCO_F746NG

main.cpp

Committer:
maxenceadnot
Date:
2021-06-21
Revision:
4:e629702e7738
Parent:
3:9f66aabe7b3b

File content as of revision 4:e629702e7738:

#include "mbed.h"
#include "Servo.h"
#include "stm32746g_discovery_lcd.h"
#include "stm32746g_discovery_ts.h"
 
   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);

  

    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
    

    HAL_Delay(1000);
    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) {
               
              
               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"
                }
               
               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];
            }           
        } else {
            if (!cleared) {
                BSP_LCD_Clear(LCD_COLOR_WHITE);
                cleared = 1;
            }
        }
    }
}