diff --git a/G3_TP1_labyrinth_etu/src/labyrinth.c b/G3_TP1_labyrinth_etu/src/labyrinth.c
index 9e0d083b229ae592b5267bce83e63e76eaca2233..7ae9a943fb0f601e9a8ef23d160a33988863a1f7 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);
+
+	}
+}