
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@1:1bd2e5035a22, 2022-06-21 (annotated)
- Committer:
- simon11111
- Date:
- Tue Jun 21 14:06:44 2022 +0000
- Revision:
- 1:1bd2e5035a22
- Parent:
- 0:2cf3673a2f83
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon11111 | 0:2cf3673a2f83 | 1 | /* |
simon11111 | 0:2cf3673a2f83 | 2 | Projet du drone instrumenté compportant un GPS et un capteur de température/humidité, un gyroscope et un module Bluetooth |
simon11111 | 0:2cf3673a2f83 | 3 | |
simon11111 | 0:2cf3673a2f83 | 4 | */ |
simon11111 | 0:2cf3673a2f83 | 5 | #include <iostream> |
simon11111 | 0:2cf3673a2f83 | 6 | #include "mbed.h" |
simon11111 | 0:2cf3673a2f83 | 7 | #include "BufferedSerial.h" |
simon11111 | 0:2cf3673a2f83 | 8 | #include "Dht11.h" |
simon11111 | 0:2cf3673a2f83 | 9 | #include "LSM6DS33.h" |
simon11111 | 0:2cf3673a2f83 | 10 | |
simon11111 | 0:2cf3673a2f83 | 11 | Serial BT(PA_9, PA_10, 9600); |
simon11111 | 0:2cf3673a2f83 | 12 | //Serial GPS(PA_2, PA_3, 9600); |
simon11111 | 0:2cf3673a2f83 | 13 | I2C i2c(PB_7,PB_6); |
simon11111 | 0:2cf3673a2f83 | 14 | |
simon11111 | 0:2cf3673a2f83 | 15 | Dht11 sensor(PB_1); |
simon11111 | 0:2cf3673a2f83 | 16 | LSM6DS33 acc = LSM6DS33(PB_7, PB_6); |
simon11111 | 0:2cf3673a2f83 | 17 | |
simon11111 | 0:2cf3673a2f83 | 18 | int main() |
simon11111 | 0:2cf3673a2f83 | 19 | { |
simon11111 | 0:2cf3673a2f83 | 20 | uint8_t tab[100]; |
simon11111 | 0:2cf3673a2f83 | 21 | char latitude[9],longitude[10]; //latitude == l / longitude == L |
simon11111 | 0:2cf3673a2f83 | 22 | int Te, Hu; |
simon11111 | 0:2cf3673a2f83 | 23 | char buff[50], TH[6]; |
simon11111 | 0:2cf3673a2f83 | 24 | char tab2[5]; //tableau vérification id trame GPS |
simon11111 | 0:2cf3673a2f83 | 25 | int i=0; |
simon11111 | 0:2cf3673a2f83 | 26 | float axx,ayy,azz,gxx,gyy,gzz; //variables gyroscope |
simon11111 | 0:2cf3673a2f83 | 27 | |
simon11111 | 0:2cf3673a2f83 | 28 | acc.begin(LSM6DS33::G_SCALE_245DPS, LSM6DS33::A_SCALE_2G, LSM6DS33::G_ODR_1660, LSM6DS33::A_ODR_6660); //Init gyroscope |
simon11111 | 0:2cf3673a2f83 | 29 | |
simon11111 | 0:2cf3673a2f83 | 30 | //BT.printf("Hello World\n\r"); |
simon11111 | 0:2cf3673a2f83 | 31 | |
simon11111 | 0:2cf3673a2f83 | 32 | while(1) { |
simon11111 | 0:2cf3673a2f83 | 33 | |
simon11111 | 0:2cf3673a2f83 | 34 | if( BT.getc() == '$') { //condition attente début de trame |
simon11111 | 0:2cf3673a2f83 | 35 | for(i = 0; (i< 5) ; i++) { //stocke l'ID de la trame reçue |
simon11111 | 0:2cf3673a2f83 | 36 | tab2[i] = BT.getc(); |
simon11111 | 0:2cf3673a2f83 | 37 | } |
simon11111 | 0:2cf3673a2f83 | 38 | if( (tab2[0]=='G') && (tab2[1]=='P') && (tab2[2]=='R') && (tab2[3]=='M') && (tab2[4]=='C') ) { //Compare si c'est la trame attendue |
simon11111 | 0:2cf3673a2f83 | 39 | for(i = 1; (i< 40) ; i++) { //stockage de la trame dans un tableau temp |
simon11111 | 0:2cf3673a2f83 | 40 | tab[i] = BT.getc(); |
simon11111 | 0:2cf3673a2f83 | 41 | } |
simon11111 | 0:2cf3673a2f83 | 42 | for(i = 0; (i< 9) ; i++) { //Extraction de la latitude latitude dans un tableau |
simon11111 | 0:2cf3673a2f83 | 43 | latitude[i] = tab[i + 15]; |
simon11111 | 0:2cf3673a2f83 | 44 | } |
simon11111 | 0:2cf3673a2f83 | 45 | for(i = 0; (i< 10) ; i++) { //Extraction de la latitude longitude dans un tableau |
simon11111 | 0:2cf3673a2f83 | 46 | longitude[i] = tab[i + 27]; |
simon11111 | 0:2cf3673a2f83 | 47 | } |
simon11111 | 0:2cf3673a2f83 | 48 | } |
simon11111 | 0:2cf3673a2f83 | 49 | //récupération données température et humidité |
simon11111 | 0:2cf3673a2f83 | 50 | sensor.read(); |
simon11111 | 0:2cf3673a2f83 | 51 | Te = sensor.getCelsius(); |
simon11111 | 0:2cf3673a2f83 | 52 | Hu = sensor.getHumidity(); |
simon11111 | 0:2cf3673a2f83 | 53 | |
simon11111 | 0:2cf3673a2f83 | 54 | //récupération données gyroscope et accéléromètre |
simon11111 | 0:2cf3673a2f83 | 55 | acc.readAll(); |
simon11111 | 0:2cf3673a2f83 | 56 | |
simon11111 | 0:2cf3673a2f83 | 57 | acc.readAccel(); |
simon11111 | 0:2cf3673a2f83 | 58 | axx = acc.ax; //gyro en x |
simon11111 | 0:2cf3673a2f83 | 59 | ayy = acc.ay; //gyro en y |
simon11111 | 0:2cf3673a2f83 | 60 | azz = acc.az; //gyro en z |
simon11111 | 0:2cf3673a2f83 | 61 | |
simon11111 | 0:2cf3673a2f83 | 62 | acc.readGyro(); |
simon11111 | 0:2cf3673a2f83 | 63 | gxx = acc.gx; //acceleration en x |
simon11111 | 0:2cf3673a2f83 | 64 | gyy = acc.gy; //acceleration en y |
simon11111 | 0:2cf3673a2f83 | 65 | gzz = acc.gz; //acceleration en z |
simon11111 | 0:2cf3673a2f83 | 66 | |
simon11111 | 0:2cf3673a2f83 | 67 | //Concatenation des données en un string |
simon11111 | 0:2cf3673a2f83 | 68 | sprintf(TH,"T%dH%d\n",Te,Hu); |
simon11111 | 0:2cf3673a2f83 | 69 | strcat(buff,"l"); |
simon11111 | 0:2cf3673a2f83 | 70 | strcat(buff,latitude); |
simon11111 | 0:2cf3673a2f83 | 71 | strcat(buff,"L"); |
simon11111 | 0:2cf3673a2f83 | 72 | strcat(buff,longitude); |
simon11111 | 0:2cf3673a2f83 | 73 | strcat(buff,TH); |
simon11111 | 0:2cf3673a2f83 | 74 | |
simon11111 | 0:2cf3673a2f83 | 75 | BT.puts(buff); //Envoi du string en Bluetooth |
simon11111 | 0:2cf3673a2f83 | 76 | |
simon11111 | 0:2cf3673a2f83 | 77 | for(i = 0; i < 50; i++) { |
simon11111 | 0:2cf3673a2f83 | 78 | buff[i] = '\0'; |
simon11111 | 0:2cf3673a2f83 | 79 | } |
simon11111 | 0:2cf3673a2f83 | 80 | wait(5); |
simon11111 | 0:2cf3673a2f83 | 81 | } |
simon11111 | 0:2cf3673a2f83 | 82 | } |
simon11111 | 0:2cf3673a2f83 | 83 | } |