
projet interfaçage
Dependencies: Servo BSP_DISCO_F746NG
Revision 4:e629702e7738, committed 2021-06-21
- 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; } } } } + +