Projet interfaçage en licence professionnelle MECSE à l'iut de Cachan. Réalisé sur une carte STM32F746G-DISCO. Capteur utilisé: l'accéléromètre MMA8451Q piloté en i2c via les PIN PB_9 et PB_8 de la carte. Les Pin d'interruption I1 et I2 de la carte ne sont pas utilisé. Lien du capteur: https://www.gotronic.fr/art-accelerometre-3-axes-mma8451-22164.htm Datasheet du capteur : https://www.gotronic.fr/pj-1230.pdf

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG MMA8451Q

Réalisé sur une carte STM32F746G-DISCO. Capteur utilisé: l'accéléromètre MMA8451Q piloté en i2c via les PIN PB_9 et PB_8 de la carte. Les Pin d'interruption I1 et I2 de la carte ne sont pas utilisé.

Lien du capteur: https://www.gotronic.fr/art-accelerometre-3-axes-mma8451-22164.htm Datasheet du capteur : https://www.gotronic.fr/pj-1230.pdf

Revision:
0:88b1d5275ad7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jun 04 12:53:19 2019 +0000
@@ -0,0 +1,144 @@
+#include "mbed.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "LCD_DISCO_F746NG.h"
+#include "fonts.h"
+#include "TS_DISCO_F746NG.h"
+
+#include "draw.h"
+#include "display.h"
+#include "accelerometre.h"
+
+#define line_speed  2
+#define line_speed2 4
+#define line_speed3 6
+
+LCD_DISCO_F746NG lcd;
+TS_DISCO_F746NG ts;
+short lenght_X_hitbox = bodyX + lenght_nose;
+short lenght_Y_hitbox = bodyY + 2*height_wing;
+
+
+
+int main()
+{
+    TS_StateTypeDef TS_State;
+    
+    bool hit = false;
+    bool hit2 = false;
+    bool hit3 = false;
+    bool hit4 = false;
+    bool hit5 = false;
+    short fire_frame=0;
+    
+    short int score = 0,best = 0;
+    
+    short posX_line = 0;
+    short posX_line2 = 0;
+    short posX_line3 = 0;
+    short posX_ship = 0;
+    short posY_ship = 0;
+    short index_star = 0;
+    short Xaccelerate=0;
+    short Yaccelerate=0;
+    short speed_difficulty=0,flag_level_difficulty=0;
+    
+    short pos_star[10][2]={{50,47},{102,97},{49,250},{253,127},{380,142},{200,200},{150,150},{370,250},{253,200},{100,142}};
+    uint8_t status;
+    bool continuer=true;
+    status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
+    lcd.SetBackColor(LCD_COLOR_BLACK);
+    lcd.SetTextColor(LCD_COLOR_GREEN);
+    lcd.Clear(LCD_COLOR_BLACK);
+    lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"welcome to", CENTER_MODE);
+    lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"ESCAPE THE LINE", CENTER_MODE);
+    draw_load(190, LINE(7));
+    lcd.DisplayStringAt(0, LINE(8), (uint8_t *)"Touch to start!", CENTER_MODE);
+    while(continuer){
+        ts.GetState(&TS_State);
+        if(TS_State.touchDetected)continuer=false;
+    }
+    
+    lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Escape the line v1.0", LEFT_MODE); 
+    lcd.DrawHLine(0,YMIN,480);  
+    lcd.DrawVLine(XMAX,YMIN,YMAX-YMIN);
+    lcd.DisplayStringAt(XMAX+2, YMIN+2, (uint8_t *)"Score",LEFT_MODE); 
+    display_score(score);
+    lcd.DisplayStringAt(XMAX+2, YMIN+2+24+2+24, (uint8_t *)"Best",LEFT_MODE); 
+    while(1) {
+        
+            Xaccelerate = i2c_X_axis_read()*10*2;
+            Yaccelerate = i2c_Y_axis_read()*10*2;
+            
+            posX_ship = posX_ship+Xaccelerate;            
+            if(posX_ship<XMIN) posX_ship=XMIN;
+            if(posX_ship>XMAX-lenght_X_hitbox) posX_ship=XMAX-lenght_X_hitbox-5;
+            
+            posY_ship = posY_ship+Yaccelerate;            
+            if(posY_ship<YMIN+height_wing) posY_ship=YMIN+height_wing+5;
+            if(posY_ship>YMAX-lenght_Y_hitbox+height_wing) posY_ship=YMAX-lenght_Y_hitbox+height_wing;
+            
+            posX_line = posX_line-line_speed-speed_difficulty;
+            if(posX_line<XMIN)posX_line=XMAX;
+            
+            posX_line2 = posX_line2-line_speed2-speed_difficulty;
+            if(posX_line2<XMIN)posX_line2=XMAX;
+            
+            posX_line3 = posX_line3-line_speed3-speed_difficulty;
+            if(posX_line3<XMIN)posX_line3=XMAX;
+            
+             
+            cls_scr();
+            for(index_star=0;index_star<10;index_star++){
+                draw_star(pos_star[index_star][0],pos_star[index_star][1]);    
+            }
+            draw_planet(230,100);
+            draw_planet(100,230);
+            draw_ship(posX_ship,posY_ship,false,fire_frame);
+            hit = draw_line(posX_line,YMIN+100,40,posX_ship,posY_ship);
+            hit2 = draw_line(posX_line3,YMIN,40,posX_ship,posY_ship);
+            hit3 = draw_line(posX_line,YMAX-40,40,posX_ship,posY_ship);
+            hit4 = draw_line(posX_line2,YMIN+45,40,posX_ship,posY_ship);
+            hit5 = draw_line(posX_line3,YMIN+145,40,posX_ship,posY_ship);
+            score += 1;
+            if(score>1000 && flag_level_difficulty == 3){
+                speed_difficulty+=5;
+                flag_level_difficulty=4;
+            }
+            if(score>750 && flag_level_difficulty == 2){
+                speed_difficulty+=2;
+                flag_level_difficulty=3;
+            }
+            if(score>500 && flag_level_difficulty == 1){
+                speed_difficulty+=2;
+                flag_level_difficulty=2;
+            }
+            if(score>250 && flag_level_difficulty == 0){
+                speed_difficulty+=2;
+                flag_level_difficulty=1;
+            }
+            fire_frame ++;
+            fire_frame = fire_frame%2;
+            if(hit == true || hit2 == true || hit3 == true || hit4 == true || hit5 == true ){
+                if(score>best){
+                    best=score;
+                    died(1);
+                }
+                else{
+                    died(0);
+                }
+                display_best(best);
+                score = 0;
+                posX_ship = 0;
+                posX_line = XMAX;
+                posX_line2 = XMAX;
+                posX_line3 = XMAX;
+                speed_difficulty=0;
+                hit = false;
+            }
+            display_score(score);
+            wait(0.05);       
+    }
+}
+
+