Projet interfaçage

Dependencies:   mbed BSP_DISCO_F746NG

Revision:
0:1c6757f4b61c
Child:
1:eb044e6a9033
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 21 08:21:33 2021 +0000
@@ -0,0 +1,139 @@
+#include "mbed.h"
+#include "MPU6050.h"
+#include "stm32746g_discovery_lcd.h"         // include les bibliothèques
+#include <math.h>
+
+
+
+Serial pc(USBTX, USBRX);
+I2C    i2c(I2C_SDA, I2C_SCL);       //Déclaration de SDA et SCL ainsi que I2C
+MPU6050 mpu(i2c);
+
+                        
+PwmOut servo1 (D9);                 //Déclaration des pins des servo-moteurs
+PwmOut servo2 (D10);
+
+int16_t ax, ay, az;
+int16_t gx, gy, gz;
+int moyx, moyy, moyz ;              //Déclaration des variables
+
+Timer timer;
+
+
+Ticker flipper;
+
+double t1, t2;
+
+
+void servo_ctrl()
+{
+        if (t2 <0) {
+            servo1.pulsewidth_us(2000);
+
+        }
+        else if (t2 > 0) {
+            servo1.pulsewidth_us(1200);
+
+        }                                   //fonctionnalité des servo-moteurs
+        if (t1 <0) {
+            servo2.pulsewidth_us(2000);
+
+        }
+       else if (t1 > 0) {
+           servo2.pulsewidth_us(1200);
+
+        }
+}
+
+int main()
+{
+
+    BSP_LCD_Init();
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+
+    BSP_LCD_Clear(LCD_COLOR_BLACK);
+    BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
+    BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+    BSP_LCD_SetTextColor(LCD_COLOR_RED);
+
+    int32_t xPos=240,yPos=150;                          // déclaration position initiale de la bille
+
+
+    char buffer[10] = {0};
+    char tab [10] = {0};
+
+    pc.printf("MPU6050 test\r\n");
+    pc.printf("MPU6050 initialize \r\n");
+
+    mpu.initialize();                                   //Initialisation du MPU-6050
+
+
+
+    pc.printf("MPU6050 testConnection\r\n");
+
+    bool mpu6050TestResult = mpu.testConnection();
+    if(mpu6050TestResult) {
+        pc.printf("MPU6050 test passed \r\n");
+    } else {
+        pc.printf("MPU6050 test failed \r\n");
+    }
+
+    
+    servo1.period_ms(20);                       // déclaration de la période des servo-moteurs
+    servo2.period_ms(20);
+    flipper.attach(&servo_ctrl, 1.0);           // nous demandons toute les secondes si il y a une action
+    while(1) {
+
+
+
+        BSP_LCD_Clear(LCD_COLOR_BLACK);
+        BSP_LCD_FillCircle(xPos,yPos,4);
+
+        sprintf(buffer, "%d", xPos);
+        sprintf(tab, "%d", yPos);
+        BSP_LCD_DisplayStringAt(0,0,(uint8_t*)buffer, LEFT_MODE);
+        BSP_LCD_DisplayStringAt(60,0,(uint8_t*)tab, LEFT_MODE);
+
+
+       mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);            // récupération des valeurs bruts du MPU-6050
+       t1=atan2(-(double)ay,-(double)ax)*(180/3.1415);          // calcul en degrès des valeurs bruts 
+       t2=atan2(-(double)az,-(double)ax)*(180/3.1415);
+       pc.printf("%6d %6d %6d %6.2f %6.2f\r\n",ax,ay,az,t1,t2); //affichage des valeurs bruts et degrès (voir sur putty)
+
+        if (t2 < 0) {
+            xPos = xPos - 3;
+            
+        }
+        else if (t2 > 0) {
+            xPos = xPos + 3;
+            
+                                                // Selon l'angle des axes du MPU-6050 la position de la bille change 
+        }
+        
+        if (t1 <0) {
+            yPos = yPos + 3;
+            
+            
+        }
+        else if (t1 > 0) {
+            yPos = yPos - 3;
+           
+
+        }
+        
+
+        if (xPos<=4) {
+            xPos = 4;
+        } else if (xPos>=475) {
+            xPos = 475;
+        }
+
+        if (yPos<=4) {                      // Avec cela la bille ne peut pas sortir de l'écran
+            yPos = 4;
+        } else if (yPos>=267) {
+           yPos = 267;
+        }
+
+    }
+}