Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BSP_DISCO_F746NG
Revision 4:4b949c71091e, committed 2021-06-22
- Comitter:
- quentlet
- Date:
- Tue Jun 22 12:26:47 2021 +0000
- Parent:
- 3:9f66aabe7b3b
- Commit message:
- Pong
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Nov 20 11:49:15 2019 +0100
+++ b/main.cpp Tue Jun 22 12:26:47 2021 +0000
@@ -1,74 +1,198 @@
#include "mbed.h"
#include "stm32746g_discovery_lcd.h"
#include "stm32746g_discovery_ts.h"
+#include "stdlib.h"
-int main()
-{
+
+void Terrain(int xg, int yg, int xd, int yd, int x1, int y1);
+
+
+int main() {
+
+ //Manette gauche
+ DigitalIn d0(D0);
+ DigitalIn d2(D2);
+ //Manette Droite
+ DigitalIn d5(D5);
+ DigitalIn d7(D7);
+
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;
+ int TouchScreen=1;
+ int x1=240, y1=136, depx=2, depy=2;
+ int xg=0, yg=96, xd=474, yd=96;
+ int direcx=1, direcy=1;
+ srand(time(NULL));
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_Clear(LCD_COLOR_WHITE);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+ BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"PONG!!", CENTER_MODE);
+ HAL_Delay(2000);
+
+ BSP_LCD_Clear(LCD_COLOR_BLACK);
+ BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
-
- while(1) {
-
+ BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"Start ?", CENTER_MODE);
+ HAL_Delay(500);
+
+ //Attente avant de toucher l'écran
+ while(TouchScreen){
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);
- }
- }
- 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);
-
- 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);
- cleared = 1;
- }
+ TouchScreen = 0;
}
}
+ TouchScreen=1;
+
+ //départ alétoire de la balle
+ direcx = rand() % (50+1);
+ if (direcx ==0%2) {depx=-depx;}
+ direcy = rand() % (50+1);
+ if (direcy ==0%2) {depy=-depy;}
+
+ Terrain(xg, yg, xd, yd, x1, y1);
+ HAL_Delay(500);
+
+ while(1){
+
+ //Déplacement haut de la raquette gauche
+ if(d0==1 && yg>=15) yg-=5;
+ //Déplacement bas de la raquette gauche
+ else if(d2==1 && yg<=200) yg+=5;
+
+ //Déplacement haut de la raquette droite
+ if(d7==1 && yd>=15) yd-=5;
+ //Déplacement bas de la raquette droite
+ else if(d5==1 && yd<=200) yd+=5;
+
+ //Limite basse
+ if(y1>=264) {
+ depy=-depy;
+ }
+
+ //Limite haute
+ else if(y1<=6) {
+ depy=-depy;
+ }
+
+ //Limite droite
+ else if(x1>=470) {
+ //Si on touche la raquette
+ if (BSP_LCD_ReadPixel(x1+7, y1)==0xFFFFFFFF) {
+ //Accélération de la balle
+ if (depx>0 && depx<5) depx+=1;
+ else if (depx<0 && depx>-5) depx-=1;
+ depx=-depx;
+ }
+ //Si on touche le bord
+ else if (BSP_LCD_ReadPixel(x1+7, y1)==0xFF000000){
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+ BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"Rejouer ?", CENTER_MODE);
+ HAL_Delay(1000);
+
+ while(TouchScreen){
+ BSP_TS_GetState(&TS_State);
+ if (TS_State.touchDetected) {
+ TouchScreen = 0;
+ }
+ }
+ TouchScreen=1;
+
+ //Ré-initialisation
+ x1=240;
+ y1=136;
+ xg=0;
+ yg=96;
+ xd=474;
+ yd=96;
+ depx=2;
+ depy=2;
+
+ //Départ aléatoire
+ direcx = rand() % (50+1);
+ if (direcx ==1%2) {depx=-depx;}
+ direcy = rand() % (50+1);
+ if (direcy ==1%2) {depy=-depy;}
+
+ BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
+ BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+ Terrain(xg, yg, xd, yd, x1, y1);
+ HAL_Delay(500);
+ }
+ }
+
+ //Limite gauche
+ else if(x1<=10) {
+ //Si on touche la raquette
+ if (BSP_LCD_ReadPixel(x1-7, y1)==0xFFFFFFFF) {
+ //Accélération de la balle
+ if (depx>0 && depx<5) depx+=1;
+ else if (depx<0 && depx>-5) depx-=1;
+ depx=-depx;
+ }
+ //Si on touche le bord
+ else if (BSP_LCD_ReadPixel(x1-7, y1)==0xFF000000) {
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+ BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"Rejouer ?", CENTER_MODE);
+ HAL_Delay(1000);
+
+ while(TouchScreen){
+ BSP_TS_GetState(&TS_State);
+ if (TS_State.touchDetected) {
+ TouchScreen = 0;
+ }
+ }
+ TouchScreen=1;
+
+ //Ré-initialisation
+ x1=240;
+ y1=136;
+ xg=0;
+ yg=96;
+ xd=474;
+ yd=96;
+ depx=2;
+ depy=2;
+
+ //Départ aléatoire
+ direcx = rand() % (50+1);
+ if (direcx ==1%2) {depx=-depx;}
+ direcy = rand() % (50+1);
+ if (direcy ==1%2) {depy=-depy;}
+
+ BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
+ BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+ Terrain(xg, yg, xd, yd, x1, y1);
+ HAL_Delay(500);
+ }
+ }
+ x1+=depx;
+ y1+=depy;
+ Terrain(xg, yg, xd, yd, x1, y1);
+ }
}
+
+void Terrain(int xg, int yg, int xd, int yd, int x1, int y1) {
+ //Affichage de...
+ BSP_LCD_Clear(LCD_COLOR_BLACK);
+ //Raquettes
+ BSP_LCD_FillRect(xg, yg, 6, 80);
+ BSP_LCD_FillRect(xd, yd, 6, 80);
+ //Filet
+ BSP_LCD_FillRect(239, 0, 3, 271);
+ //Balle
+ BSP_LCD_FillCircle(x1, y1, 6);
+ HAL_Delay(15);
+ }
+
\ No newline at end of file