From 8b8e45968a1fa4f3f71f5923d37f869eb857a7d7 Mon Sep 17 00:00:00 2001 From: "remi.greub" <remi.greub@hes-so.ch> Date: Wed, 19 Mar 2025 18:46:17 +0100 Subject: [PATCH] masterball fonctionnelle avec quelques corrections a faire encore --- G3_TP1_labyrinth_etu/src/labyrinth.c | 68 +++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/G3_TP1_labyrinth_etu/src/labyrinth.c b/G3_TP1_labyrinth_etu/src/labyrinth.c index 9e0d083..7ae9a94 100644 --- a/G3_TP1_labyrinth_etu/src/labyrinth.c +++ b/G3_TP1_labyrinth_etu/src/labyrinth.c @@ -85,6 +85,8 @@ void slave_info_rx(void *data, int len) // code executed when the slave sends an ethernet frame } +void Algo_main_ball(void *params); + int main(void) { accel_t ball_accel; @@ -111,9 +113,71 @@ int main(void) accel_read(&ball_accel); // example: reading of the accelerometer // creating tasks... - // xTaskCreate(...); - // vTaskStartScheduler(); // launch scheduler + xTaskCreate(Algo_main_ball, (signed portCHAR *)"Masterball", + configMINIMAL_STACK_SIZE, &ball_param_th[0], tskIDLE_PRIORITY+1, + NULL); + vTaskStartScheduler(); // launch scheduler + LPC_TIM0->TCR = 1; + while(1); return 1; } + +void Algo_main_ball(void *params){ + ball_param_th_t *ball = (ball_param_th_t *)params; + accel_t ball_acc; + int un_ou_moins_un_x = 1, un_ou_moins_un_y = 1; + while(1){ + lcd_filled_circle(ball->ball.pos.x, ball->ball.pos.y, ball->ball.radius, LCD_BLACK); + int CollisionState = test_collision(&ball->ball); + if(CollisionState != NO_COLLISION){ + //ralentissement de 10% de la vitesse de la balle + ball->ball.speed.x = ball->ball.speed.x - (ball->ball.speed.x/10); + ball->ball.speed.y = ball->ball.speed.y - (ball->ball.speed.y/10); + + if(CollisionState & TOUCH_LEFT){ + un_ou_moins_un_x = -1; + ball->ball.pos.x += ball->ball.radius/2; + } + if(CollisionState & TOUCH_UP){ + un_ou_moins_un_y = -1; + ball->ball.pos.y += ball->ball.radius/2; + } + if(CollisionState & TOUCH_RIGHT){ + un_ou_moins_un_x = -1; + ball->ball.pos.x -= ball->ball.radius/2; + } + if(CollisionState & TOUCH_DOWN){ + un_ou_moins_un_y = -1; + ball->ball.pos.y -= ball->ball.radius/2; + } + }else{ + //lcd_filled_circle(ball->ball.pos.x, ball->ball.pos.y, ball->ball.radius, LCD_BLACK); + accel_read(&ball_acc); + ball->ball.speed.x = ((ball_acc.accel_x*0.1)+ball->ball.speed.x)*(un_ou_moins_un_x); + ball->ball.speed.y = ((ball_acc.accel_y*0.1)+ball->ball.speed.y)*(un_ou_moins_un_y); + + ball->ball.pos.x = ball->ball.pos.x + ball->ball.speed.x*(un_ou_moins_un_x); + ball->ball.pos.y = ball->ball.pos.y + ball->ball.speed.y*(un_ou_moins_un_y); + un_ou_moins_un_y = 1; + un_ou_moins_un_x = 1; + } + //} + if(ball->ball.pos.x <= ball->ball.radius){ + ball->ball.pos.x = ball->ball.radius+1; + } + if(ball->ball.pos.y <= ball->ball.radius){ + ball->ball.pos.y = ball->ball.radius+1; + } + if(ball->ball.pos.x == LCD_MAX_WIDTH-ball->ball.radius){ + ball->ball.pos.x -= ball->ball.radius; + } + if(ball->ball.pos.y == LCD_MAX_HEIGHT-ball->ball.radius){ + ball->ball.pos.y -= ball->ball.radius; + } + lcd_filled_circle(ball->ball.pos.x, ball->ball.pos.y, ball->ball.radius, ball->ball.color); + vTaskDelay((portTickType)20/portTICK_RATE_MS); + + } +} -- GitLab