
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; } } } }