5G Academy / Mbed 2 deprecated Pressure_Sensor_Gruppo_Ultimo

Dependencies:   mbed X_NUCLEO_IKS01A2

main.cpp

Committer:
rschiano75
Date:
2020-04-22
Revision:
1:7b9e61c70708
Parent:
0:3494d33e3b04
Child:
2:03da1eb4ebc8

File content as of revision 1:7b9e61c70708:

#include "mbed.h"
#include "XNucleoIKS01A2.h"
#include "string.h"
#include <sstream>
#include <iostream>
using namespace std;

//Sensore per la misura della pressione atmosferica + Comunicazione modem LoRa
// Ambrosino-Rivellini-Salernitano

// Prototipi funzioni
void modem_at_cmd(char*,int);
void wait4join(void);
void at_send(uint8_t port, float pres, uint8_t ack);

// Variabili globali
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;

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 : "

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

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

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