5G Academy / Mbed 2 deprecated Pressure_Sensor_Gruppo_Ultimo

Dependencies:   mbed X_NUCLEO_IKS01A2

Files at this revision

API Documentation at this revision

Comitter:
ambromar
Date:
Thu Apr 23 20:01:15 2020 +0000
Parent:
1:7b9e61c70708
Commit message:
Revisione post cena;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Apr 22 16:27:48 2020 +0000
+++ b/main.cpp	Thu Apr 23 20:01:15 2020 +0000
@@ -1,79 +1,160 @@
 #include "mbed.h"
-#include "XNucleoIKS01A2.h"
 #include "string.h"
-#include <sstream>
-#include <iostream>
-using namespace std;
+#include "XNucleoIKS01A2.h"
 
-//Sensore per la misura della pressione atmosferica + Comunicazione modem LoRa
-// Ambrosino-Rivellini-Salernitano
+static XNucleoIKS01A2 *myboard = XNucleoIKS01A2::instance(D14,D15,D4,D5); // scheda
+static LSM303AGRMagSensor *magSensor = myboard -> magnetometer; // magnetoscopio
+static LPS22HBSensor *pressure = myboard->pt_sensor;  // pressione
+static HTS221Sensor *temperature = myboard->ht_sensor; // temperatura e umidita'
+static LSM6DSLSensor *iNemo = myboard->acc_gyro; // giroscopio
 
-// Prototipi funzioni
+// Prototipi Fuzioni
 void modem_at_cmd(char*,int);
 void wait4join(void);
+void lora_conn(void);
 void at_send(uint8_t port, float pres, uint8_t ack);
+void enable_all_sensors();
+void get_pressure();
+void get_magnetic_field();
+void get_temperature();
+void get_humidity();
+void get_acceleration();
+void get_gyroscope();
+void Sensor_Switch(int Sensor_Port);
 
-// Variabili globali
+// Variabili Globali
+float val_pressure;
+float val_temperature;
+float val_humidity = 0;
+int assi_giroscopio[3];
+int assi_accelerazione[3];
+int assi_magnetometro[3];
+
+//// Definizione Porte
+
+// Accelerometer
+int acce_port = 12;
+// Gyroscope
+int gyro_port = 13;
+// Magnetic Field
+int magn_port = 14;
+// Temperature
+int temp_port = 15;
+// Humidity
+int humi_port = 16;
+// Pressure
+int press_port = 17;
+
+// Definizione Porte Comunicazione
 Serial pc(D1,D0,115200);
 Serial lora(PB_6,PA_10,115200);
 
-static XNucleoIKS01A2 *myBoard = XNucleoIKS01A2::instance(D14,D15,D4,D5);
-static LPS22HBSensor *pressure = myBoard->pt_sensor;
-uint8_t id;
-float val_pressure;
-
+// Stringhe messaggi
 char c;
 
 char* msg1 = {"AT"};
 char* msg2 = {"AT+APPEUI=0000000000000001"};
 char* msg3 = {"AT+AK=00000000000000000000000000000001"};
 char* msg4 = {"AT+JOIN=1"};
-char* msg5 = {"AT+SEND=15,3031323334,0"};
-char* msg6 = {"AT+DC=0"};   //modifica per disabilitare duty cycle
-char* msg7 = {"AT+ADR=1"};   //modifica per abilitare auto data rate
-char* msg_template_pressure = {"AT+SEND=143,5072657373696f6e65203a20"}; // template stringa in HEX "Pressione : "
+char msg5[64]; // = {"AT+SEND=15,3031323334,0"};
+char msg6[80];
+
+float waitingTime = 1.0;
+
+
+
+
+
+
+
+
 
 int main() {
-    char* msg_pressure ;
-    std::string hex_float ;
-
-    // Pressure Setup
-    pressure->enable();
-    pc.printf("Sensore per la misurazione di pressione abilitato\r\n");
-    pressure->read_id(&id);
-    pc.printf("ID pari a 0x%X\r\n",id);
-    pc.printf("Test seriale no pc\r\n");
-    
-    // Modem Setup
-    modem_at_cmd(msg1,(int)strlen(msg1));
-    pc.printf("Inviato AT\r\n");
-    wait(1);
-    modem_at_cmd(msg2,(int)strlen(msg2));
-    pc.printf("Inviato EUI\r\n");
-    wait(1);
-    modem_at_cmd(msg3,(int)strlen(msg3));
-    pc.printf("Inviato AK\r\n");
-    wait(1);
-    modem_at_cmd(msg4,(int)strlen(msg4));
-    pc.printf("Inviato JOIN\r\n");
-    wait4join();
-    modem_at_cmd(msg5,(int)strlen(msg5));
-    pc.printf("Inviato send\r\n");
-    modem_at_cmd(msg6,(int)strlen(msg6));
-    pc.printf("Inviata richiesta disabilitazione duty cycl--e\r\n");
-    modem_at_cmd(msg7,(int)strlen(msg7));
-    pc.printf("Inviata richiesta data rate adattivo\r\n");
-
+    int i;
+    enable_all_sensors();
+    lora_conn();
+    // Loop principale
     while(1) {
-      pressure->get_pressure(&val_pressure);
-      pc.printf("Valori pressione misurati [mbar]:\t%f\r\n",val_pressure);
-      // converte il float val_pressure in un char* 
-      at_send(10, val_pressure, 0);
-      pc.printf("Inviato Dato Pressione\r\n");
-      wait(5.0);
+      for(int sensor_port = 12; sensor_port <= 17; sensor_port++) {
+        //init msg sensore
+        memset(msg5,0,64*sizeof(char));
+        //Sensor Switch
+        Sensor_Switch(sensor_port);
+        pc.printf(msg5);
+        pc.printf("\r\n");
+        pc.printf("Lunghezza messaggio %d",(int)strlen(msg5));
+        pc.printf("\r\n");
+        sprintf(msg6,"AT+SEND=");
+        sprintf(msg6,"%d",sensor_port);
+        for(i=0;i<strlen(msg5);i++)
+        {
+            sprintf(msg6+11+2*i,"%X",*(msg5+i));
+        }
+        sprintf(msg6+11+2*i,",0");
+        modem_at_cmd(msg6,(int)strlen(msg6));
+        pc.printf("Inviato send\r\n");
+        wait(3);
+          }
       }
 }
 
+
+// Funzione che esegue le azioni per singola porta
+void Sensor_Switch(int Sensor_Port) {
+    switch(Sensor_Port) {
+        case 12:  // Accelerometer
+        get_acceleration();
+        sprintf(msg5,"{\"accx\":%6ld,\"accy\":%6ld,\"accz\":%6ld}", assi_accelerazione[0], assi_accelerazione[1], assi_accelerazione[2]);
+        break;
+            
+        case 13:  // Gyroscope
+        get_gyroscope();
+        sprintf(msg5,"{\"gyrox\":%6ld,\"gyroy\":%6ld,\"gyroz\":%6ld}", assi_giroscopio[0], assi_giroscopio[1], assi_giroscopio[2]);
+        break;
+        
+        case 14:  // Magnetic Field
+        get_magnetic_field();
+        sprintf(msg5,"{\"magnx\":%6ld,\"magny\":%6ld,\"magnz\":%6ld}", assi_magnetometro[0], assi_magnetometro[1], assi_magnetometro[2]);
+        break;
+        
+        case 15:  // Temperature
+        get_temperature();
+        sprintf(msg5,"{\"temperature\":%6f}", val_temperature);
+        break;
+        
+        case 16:  // Humidity
+        get_humidity();
+        sprintf(msg5,"{\"humidity\":%6f}", val_humidity);
+        break;
+        
+        case 17:  // Pressure
+        get_pressure();
+        sprintf(msg5,"{\"pressure\":%6f}", val_pressure);
+        break;
+        
+        default:
+        printf("Porta Errata");
+        }
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+///
+/// Definizione Funzioni
+///
+
+
 void at_send(uint8_t port, float pres, uint8_t ack) {
     char msg[30];
     char send[64];
@@ -94,7 +175,68 @@
     pc.printf("\r\nInviato send\r\n");
 }
 
-void modem_at_cmd(char* buffer, int n){
+
+void enable_all_sensors() {
+    pressure->enable();
+    magSensor -> enable();
+    temperature -> enable();
+    iNemo -> enable_g();
+    iNemo -> enable_x();
+}
+
+void get_pressure() {
+    pressure->get_pressure(&val_pressure);
+    pc.printf("pressione [mbar]:\t%f\r\n",val_pressure);
+}
+
+void get_magnetic_field() {
+    magSensor -> get_m_axes(assi_magnetometro);
+    pc.printf("campo magnetico [mmgauss]:\t%d\t%d\t%d\n\r", assi_magnetometro[0] , assi_magnetometro[1] , assi_magnetometro[2]);
+}
+
+void get_temperature() {
+    temperature->get_temperature(&val_temperature);
+    pc.printf("temperatura [Celsius]: %f\n\r", val_temperature);
+}
+
+void get_humidity() {
+    temperature->get_humidity(&val_humidity);
+    pc.printf("Humidity [%%]\t\t%f\r\n", val_humidity);
+}
+
+void get_acceleration() {
+    iNemo->get_x_axes(assi_accelerazione);
+    pc.printf("accelerazione [mg]:\t%d\t%d\t%d\n\r", assi_accelerazione[0] , assi_accelerazione[1] , assi_accelerazione[2]);
+}
+
+void get_gyroscope() {
+    iNemo->get_g_axes(assi_giroscopio);
+    pc.printf("velocita' angolare [rad/s]:\t%d\t%d\t%d\n\r", assi_giroscopio[0] , assi_giroscopio[1] , assi_giroscopio[2]);
+}
+
+void lora_conn(void) {
+    pc.printf("Connessione al modem\r\n");
+    modem_at_cmd(msg1,(int)strlen(msg1));
+    pc.printf("Inviato AT\r\n");
+    wait(1);
+    modem_at_cmd(msg2,(int)strlen(msg2));
+    pc.printf("Inviato EUI\r\n");
+    wait(1);
+    modem_at_cmd(msg3,(int)strlen(msg3));
+    pc.printf("Inviato AK\r\n");
+    wait(1);
+    modem_at_cmd("AT+ADR=1",(int)strlen("AT+ADR=1"));
+    pc.printf("Inviato AK\r\n");
+    wait(1);
+    modem_at_cmd("AT+DC=0",(int)strlen("AT+DC=0"));
+    pc.printf("Inviato AK\r\n");
+    wait(1);
+    modem_at_cmd(msg4,(int)strlen(msg4));
+    pc.printf("Inviato JOIN\r\n");
+    wait4join();
+}
+
+void modem_at_cmd(char* buffer, int n) {
     for(uint8_t i=0; i<n; i++) {
         lora.putc(buffer[i]);
         pc.putc(buffer[i]);
@@ -111,12 +253,13 @@
     } while(c!=' ');
 }
 
-void wait4join(){
+void wait4join()
+{
     c=0;
     do {
         if (lora.readable()) {
             c = lora.getc();
             pc.putc(c);
         }
-    }while(c!='d');
-}
+    } while(c!='d');
+}
\ No newline at end of file