Program retrieving data from several modules (communicating in uart and I2C), processing the data and sending it to a HMI via a Bluetooth module

Dependencies:   mbed BufferedSerial

main.cpp

Committer:
simon11111
Date:
2022-06-21
Revision:
1:1bd2e5035a22
Parent:
0:2cf3673a2f83

File content as of revision 1:1bd2e5035a22:

/*
Projet du drone instrumenté compportant un GPS et un capteur de température/humidité, un gyroscope et un module Bluetooth

*/
#include <iostream>
#include "mbed.h"
#include "BufferedSerial.h"
#include "Dht11.h"
#include "LSM6DS33.h"

Serial BT(PA_9, PA_10, 9600);
//Serial GPS(PA_2, PA_3, 9600);
I2C i2c(PB_7,PB_6);

Dht11 sensor(PB_1);
LSM6DS33 acc = LSM6DS33(PB_7, PB_6);

int main()
{
    uint8_t tab[100];
    char latitude[9],longitude[10];    //latitude == l / longitude == L
    int Te, Hu;
    char buff[50], TH[6];
    char tab2[5];   //tableau vérification id trame GPS
    int i=0;
    float axx,ayy,azz,gxx,gyy,gzz;  //variables gyroscope

    acc.begin(LSM6DS33::G_SCALE_245DPS, LSM6DS33::A_SCALE_2G, LSM6DS33::G_ODR_1660, LSM6DS33::A_ODR_6660);  //Init gyroscope

    //BT.printf("Hello World\n\r");

    while(1) {

        if( BT.getc() == '$') {        //condition attente début de trame
            for(i = 0; (i< 5) ; i++) {  //stocke l'ID de la trame reçue
                tab2[i] = BT.getc();
            }
            if( (tab2[0]=='G') && (tab2[1]=='P') && (tab2[2]=='R') && (tab2[3]=='M') && (tab2[4]=='C') ) {  //Compare si c'est la trame attendue
                for(i = 1; (i< 40) ; i++) {     //stockage de la trame dans un tableau temp
                    tab[i] = BT.getc();
                }
                for(i = 0; (i< 9) ; i++) {             //Extraction de la latitude latitude dans un tableau
                    latitude[i] = tab[i + 15];
                }
                for(i = 0; (i< 10) ; i++) {             //Extraction de la latitude longitude dans un tableau
                    longitude[i] = tab[i + 27];
                }
            }
            //récupération données température et humidité
            sensor.read();
            Te = sensor.getCelsius();
            Hu = sensor.getHumidity();

            //récupération données gyroscope et accéléromètre
            acc.readAll();

            acc.readAccel();
            axx = acc.ax;   //gyro en x
            ayy = acc.ay;   //gyro en y
            azz = acc.az;   //gyro en z

            acc.readGyro();
            gxx = acc.gx;   //acceleration en x
            gyy = acc.gy;   //acceleration en y
            gzz = acc.gz;   //acceleration en z

            //Concatenation des données en un string
            sprintf(TH,"T%dH%d\n",Te,Hu);
            strcat(buff,"l");
            strcat(buff,latitude);
            strcat(buff,"L");
            strcat(buff,longitude);
            strcat(buff,TH);
            
            BT.puts(buff);  //Envoi du string en Bluetooth

            for(i = 0; i < 50; i++) {
                buff[i] = '\0';
            }
            wait(5);
        }
    }
}