codice pressione

Dependencies:   mbed X_NUCLEO_IKS01A2

main.cpp

Committer:
ambromar
Date:
2020-04-23
Revision:
2:03da1eb4ebc8
Parent:
1:7b9e61c70708

File content as of revision 2:03da1eb4ebc8:

#include "mbed.h"
#include "string.h"
#include "XNucleoIKS01A2.h"

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 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
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);

// Stringhe messaggi
char c;

char* msg1 = {"AT"};
char* msg2 = {"AT+APPEUI=0000000000000001"};
char* msg3 = {"AT+AK=00000000000000000000000000000001"};
char* msg4 = {"AT+JOIN=1"};
char msg5[64]; // = {"AT+SEND=15,3031323334,0"};
char msg6[80];

float waitingTime = 1.0;









int main() {
    int i;
    enable_all_sensors();
    lora_conn();
    // Loop principale
    while(1) {
      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];
    uint8_t i=0;
    sprintf(msg,"{\"pressure\":%.2f}", pres);
    pc.printf(msg);
    pc.printf("\r\n");
    pc.printf("Lunghezza messaggio %d",(int)strlen(msg));
    pc.printf("\r\n");
    sprintf(send,"AT+SEND=%d,",port);
    for(i=0;i<strlen(msg);i++)
    {
        sprintf(send+11+2*i,"%X",*(msg+i));
    }
    sprintf(send+11+2*i,",%d",ack);
    modem_at_cmd(send,(int)strlen(send));
    pc.printf(send);
    pc.printf("\r\nInviato send\r\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]);
    }
    lora.putc(13);
    pc.putc(13);
    pc.printf("\n");
    c=0;
    do {
        if (lora.readable()) {
            c = lora.getc();
            pc.putc(c);
        }
    } while(c!=' ');
}

void wait4join()
{
    c=0;
    do {
        if (lora.readable()) {
            c = lora.getc();
            pc.putc(c);
        }
    } while(c!='d');
}