codice pressione

Dependencies:   mbed X_NUCLEO_IKS01A2

Committer:
ambromar
Date:
Thu Apr 23 20:01:15 2020 +0000
Revision:
2:03da1eb4ebc8
Parent:
1:7b9e61c70708
Revisione post cena;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ambromar 0:3494d33e3b04 1 #include "mbed.h"
ambromar 0:3494d33e3b04 2 #include "string.h"
ambromar 2:03da1eb4ebc8 3 #include "XNucleoIKS01A2.h"
ambromar 0:3494d33e3b04 4
ambromar 2:03da1eb4ebc8 5 static XNucleoIKS01A2 *myboard = XNucleoIKS01A2::instance(D14,D15,D4,D5); // scheda
ambromar 2:03da1eb4ebc8 6 static LSM303AGRMagSensor *magSensor = myboard -> magnetometer; // magnetoscopio
ambromar 2:03da1eb4ebc8 7 static LPS22HBSensor *pressure = myboard->pt_sensor; // pressione
ambromar 2:03da1eb4ebc8 8 static HTS221Sensor *temperature = myboard->ht_sensor; // temperatura e umidita'
ambromar 2:03da1eb4ebc8 9 static LSM6DSLSensor *iNemo = myboard->acc_gyro; // giroscopio
ambromar 0:3494d33e3b04 10
ambromar 2:03da1eb4ebc8 11 // Prototipi Fuzioni
ambromar 0:3494d33e3b04 12 void modem_at_cmd(char*,int);
ambromar 0:3494d33e3b04 13 void wait4join(void);
ambromar 2:03da1eb4ebc8 14 void lora_conn(void);
rschiano75 1:7b9e61c70708 15 void at_send(uint8_t port, float pres, uint8_t ack);
ambromar 2:03da1eb4ebc8 16 void enable_all_sensors();
ambromar 2:03da1eb4ebc8 17 void get_pressure();
ambromar 2:03da1eb4ebc8 18 void get_magnetic_field();
ambromar 2:03da1eb4ebc8 19 void get_temperature();
ambromar 2:03da1eb4ebc8 20 void get_humidity();
ambromar 2:03da1eb4ebc8 21 void get_acceleration();
ambromar 2:03da1eb4ebc8 22 void get_gyroscope();
ambromar 2:03da1eb4ebc8 23 void Sensor_Switch(int Sensor_Port);
ambromar 0:3494d33e3b04 24
ambromar 2:03da1eb4ebc8 25 // Variabili Globali
ambromar 2:03da1eb4ebc8 26 float val_pressure;
ambromar 2:03da1eb4ebc8 27 float val_temperature;
ambromar 2:03da1eb4ebc8 28 float val_humidity = 0;
ambromar 2:03da1eb4ebc8 29 int assi_giroscopio[3];
ambromar 2:03da1eb4ebc8 30 int assi_accelerazione[3];
ambromar 2:03da1eb4ebc8 31 int assi_magnetometro[3];
ambromar 2:03da1eb4ebc8 32
ambromar 2:03da1eb4ebc8 33 //// Definizione Porte
ambromar 2:03da1eb4ebc8 34
ambromar 2:03da1eb4ebc8 35 // Accelerometer
ambromar 2:03da1eb4ebc8 36 int acce_port = 12;
ambromar 2:03da1eb4ebc8 37 // Gyroscope
ambromar 2:03da1eb4ebc8 38 int gyro_port = 13;
ambromar 2:03da1eb4ebc8 39 // Magnetic Field
ambromar 2:03da1eb4ebc8 40 int magn_port = 14;
ambromar 2:03da1eb4ebc8 41 // Temperature
ambromar 2:03da1eb4ebc8 42 int temp_port = 15;
ambromar 2:03da1eb4ebc8 43 // Humidity
ambromar 2:03da1eb4ebc8 44 int humi_port = 16;
ambromar 2:03da1eb4ebc8 45 // Pressure
ambromar 2:03da1eb4ebc8 46 int press_port = 17;
ambromar 2:03da1eb4ebc8 47
ambromar 2:03da1eb4ebc8 48 // Definizione Porte Comunicazione
ambromar 0:3494d33e3b04 49 Serial pc(D1,D0,115200);
ambromar 0:3494d33e3b04 50 Serial lora(PB_6,PA_10,115200);
ambromar 0:3494d33e3b04 51
ambromar 2:03da1eb4ebc8 52 // Stringhe messaggi
ambromar 0:3494d33e3b04 53 char c;
ambromar 0:3494d33e3b04 54
ambromar 0:3494d33e3b04 55 char* msg1 = {"AT"};
ambromar 0:3494d33e3b04 56 char* msg2 = {"AT+APPEUI=0000000000000001"};
ambromar 0:3494d33e3b04 57 char* msg3 = {"AT+AK=00000000000000000000000000000001"};
ambromar 0:3494d33e3b04 58 char* msg4 = {"AT+JOIN=1"};
ambromar 2:03da1eb4ebc8 59 char msg5[64]; // = {"AT+SEND=15,3031323334,0"};
ambromar 2:03da1eb4ebc8 60 char msg6[80];
ambromar 2:03da1eb4ebc8 61
ambromar 2:03da1eb4ebc8 62 float waitingTime = 1.0;
ambromar 2:03da1eb4ebc8 63
ambromar 2:03da1eb4ebc8 64
ambromar 2:03da1eb4ebc8 65
ambromar 2:03da1eb4ebc8 66
ambromar 2:03da1eb4ebc8 67
ambromar 2:03da1eb4ebc8 68
ambromar 2:03da1eb4ebc8 69
ambromar 2:03da1eb4ebc8 70
ambromar 0:3494d33e3b04 71
ambromar 0:3494d33e3b04 72 int main() {
ambromar 2:03da1eb4ebc8 73 int i;
ambromar 2:03da1eb4ebc8 74 enable_all_sensors();
ambromar 2:03da1eb4ebc8 75 lora_conn();
ambromar 2:03da1eb4ebc8 76 // Loop principale
ambromar 0:3494d33e3b04 77 while(1) {
ambromar 2:03da1eb4ebc8 78 for(int sensor_port = 12; sensor_port <= 17; sensor_port++) {
ambromar 2:03da1eb4ebc8 79 //init msg sensore
ambromar 2:03da1eb4ebc8 80 memset(msg5,0,64*sizeof(char));
ambromar 2:03da1eb4ebc8 81 //Sensor Switch
ambromar 2:03da1eb4ebc8 82 Sensor_Switch(sensor_port);
ambromar 2:03da1eb4ebc8 83 pc.printf(msg5);
ambromar 2:03da1eb4ebc8 84 pc.printf("\r\n");
ambromar 2:03da1eb4ebc8 85 pc.printf("Lunghezza messaggio %d",(int)strlen(msg5));
ambromar 2:03da1eb4ebc8 86 pc.printf("\r\n");
ambromar 2:03da1eb4ebc8 87 sprintf(msg6,"AT+SEND=");
ambromar 2:03da1eb4ebc8 88 sprintf(msg6,"%d",sensor_port);
ambromar 2:03da1eb4ebc8 89 for(i=0;i<strlen(msg5);i++)
ambromar 2:03da1eb4ebc8 90 {
ambromar 2:03da1eb4ebc8 91 sprintf(msg6+11+2*i,"%X",*(msg5+i));
ambromar 2:03da1eb4ebc8 92 }
ambromar 2:03da1eb4ebc8 93 sprintf(msg6+11+2*i,",0");
ambromar 2:03da1eb4ebc8 94 modem_at_cmd(msg6,(int)strlen(msg6));
ambromar 2:03da1eb4ebc8 95 pc.printf("Inviato send\r\n");
ambromar 2:03da1eb4ebc8 96 wait(3);
ambromar 2:03da1eb4ebc8 97 }
ambromar 0:3494d33e3b04 98 }
ambromar 0:3494d33e3b04 99 }
ambromar 0:3494d33e3b04 100
ambromar 2:03da1eb4ebc8 101
ambromar 2:03da1eb4ebc8 102 // Funzione che esegue le azioni per singola porta
ambromar 2:03da1eb4ebc8 103 void Sensor_Switch(int Sensor_Port) {
ambromar 2:03da1eb4ebc8 104 switch(Sensor_Port) {
ambromar 2:03da1eb4ebc8 105 case 12: // Accelerometer
ambromar 2:03da1eb4ebc8 106 get_acceleration();
ambromar 2:03da1eb4ebc8 107 sprintf(msg5,"{\"accx\":%6ld,\"accy\":%6ld,\"accz\":%6ld}", assi_accelerazione[0], assi_accelerazione[1], assi_accelerazione[2]);
ambromar 2:03da1eb4ebc8 108 break;
ambromar 2:03da1eb4ebc8 109
ambromar 2:03da1eb4ebc8 110 case 13: // Gyroscope
ambromar 2:03da1eb4ebc8 111 get_gyroscope();
ambromar 2:03da1eb4ebc8 112 sprintf(msg5,"{\"gyrox\":%6ld,\"gyroy\":%6ld,\"gyroz\":%6ld}", assi_giroscopio[0], assi_giroscopio[1], assi_giroscopio[2]);
ambromar 2:03da1eb4ebc8 113 break;
ambromar 2:03da1eb4ebc8 114
ambromar 2:03da1eb4ebc8 115 case 14: // Magnetic Field
ambromar 2:03da1eb4ebc8 116 get_magnetic_field();
ambromar 2:03da1eb4ebc8 117 sprintf(msg5,"{\"magnx\":%6ld,\"magny\":%6ld,\"magnz\":%6ld}", assi_magnetometro[0], assi_magnetometro[1], assi_magnetometro[2]);
ambromar 2:03da1eb4ebc8 118 break;
ambromar 2:03da1eb4ebc8 119
ambromar 2:03da1eb4ebc8 120 case 15: // Temperature
ambromar 2:03da1eb4ebc8 121 get_temperature();
ambromar 2:03da1eb4ebc8 122 sprintf(msg5,"{\"temperature\":%6f}", val_temperature);
ambromar 2:03da1eb4ebc8 123 break;
ambromar 2:03da1eb4ebc8 124
ambromar 2:03da1eb4ebc8 125 case 16: // Humidity
ambromar 2:03da1eb4ebc8 126 get_humidity();
ambromar 2:03da1eb4ebc8 127 sprintf(msg5,"{\"humidity\":%6f}", val_humidity);
ambromar 2:03da1eb4ebc8 128 break;
ambromar 2:03da1eb4ebc8 129
ambromar 2:03da1eb4ebc8 130 case 17: // Pressure
ambromar 2:03da1eb4ebc8 131 get_pressure();
ambromar 2:03da1eb4ebc8 132 sprintf(msg5,"{\"pressure\":%6f}", val_pressure);
ambromar 2:03da1eb4ebc8 133 break;
ambromar 2:03da1eb4ebc8 134
ambromar 2:03da1eb4ebc8 135 default:
ambromar 2:03da1eb4ebc8 136 printf("Porta Errata");
ambromar 2:03da1eb4ebc8 137 }
ambromar 2:03da1eb4ebc8 138 }
ambromar 2:03da1eb4ebc8 139
ambromar 2:03da1eb4ebc8 140
ambromar 2:03da1eb4ebc8 141
ambromar 2:03da1eb4ebc8 142
ambromar 2:03da1eb4ebc8 143
ambromar 2:03da1eb4ebc8 144
ambromar 2:03da1eb4ebc8 145
ambromar 2:03da1eb4ebc8 146
ambromar 2:03da1eb4ebc8 147
ambromar 2:03da1eb4ebc8 148
ambromar 2:03da1eb4ebc8 149
ambromar 2:03da1eb4ebc8 150
ambromar 2:03da1eb4ebc8 151
ambromar 2:03da1eb4ebc8 152
ambromar 2:03da1eb4ebc8 153 ///
ambromar 2:03da1eb4ebc8 154 /// Definizione Funzioni
ambromar 2:03da1eb4ebc8 155 ///
ambromar 2:03da1eb4ebc8 156
ambromar 2:03da1eb4ebc8 157
rschiano75 1:7b9e61c70708 158 void at_send(uint8_t port, float pres, uint8_t ack) {
rschiano75 1:7b9e61c70708 159 char msg[30];
rschiano75 1:7b9e61c70708 160 char send[64];
rschiano75 1:7b9e61c70708 161 uint8_t i=0;
rschiano75 1:7b9e61c70708 162 sprintf(msg,"{\"pressure\":%.2f}", pres);
rschiano75 1:7b9e61c70708 163 pc.printf(msg);
rschiano75 1:7b9e61c70708 164 pc.printf("\r\n");
rschiano75 1:7b9e61c70708 165 pc.printf("Lunghezza messaggio %d",(int)strlen(msg));
rschiano75 1:7b9e61c70708 166 pc.printf("\r\n");
rschiano75 1:7b9e61c70708 167 sprintf(send,"AT+SEND=%d,",port);
rschiano75 1:7b9e61c70708 168 for(i=0;i<strlen(msg);i++)
rschiano75 1:7b9e61c70708 169 {
rschiano75 1:7b9e61c70708 170 sprintf(send+11+2*i,"%X",*(msg+i));
rschiano75 1:7b9e61c70708 171 }
rschiano75 1:7b9e61c70708 172 sprintf(send+11+2*i,",%d",ack);
rschiano75 1:7b9e61c70708 173 modem_at_cmd(send,(int)strlen(send));
rschiano75 1:7b9e61c70708 174 pc.printf(send);
rschiano75 1:7b9e61c70708 175 pc.printf("\r\nInviato send\r\n");
rschiano75 1:7b9e61c70708 176 }
rschiano75 1:7b9e61c70708 177
ambromar 2:03da1eb4ebc8 178
ambromar 2:03da1eb4ebc8 179 void enable_all_sensors() {
ambromar 2:03da1eb4ebc8 180 pressure->enable();
ambromar 2:03da1eb4ebc8 181 magSensor -> enable();
ambromar 2:03da1eb4ebc8 182 temperature -> enable();
ambromar 2:03da1eb4ebc8 183 iNemo -> enable_g();
ambromar 2:03da1eb4ebc8 184 iNemo -> enable_x();
ambromar 2:03da1eb4ebc8 185 }
ambromar 2:03da1eb4ebc8 186
ambromar 2:03da1eb4ebc8 187 void get_pressure() {
ambromar 2:03da1eb4ebc8 188 pressure->get_pressure(&val_pressure);
ambromar 2:03da1eb4ebc8 189 pc.printf("pressione [mbar]:\t%f\r\n",val_pressure);
ambromar 2:03da1eb4ebc8 190 }
ambromar 2:03da1eb4ebc8 191
ambromar 2:03da1eb4ebc8 192 void get_magnetic_field() {
ambromar 2:03da1eb4ebc8 193 magSensor -> get_m_axes(assi_magnetometro);
ambromar 2:03da1eb4ebc8 194 pc.printf("campo magnetico [mmgauss]:\t%d\t%d\t%d\n\r", assi_magnetometro[0] , assi_magnetometro[1] , assi_magnetometro[2]);
ambromar 2:03da1eb4ebc8 195 }
ambromar 2:03da1eb4ebc8 196
ambromar 2:03da1eb4ebc8 197 void get_temperature() {
ambromar 2:03da1eb4ebc8 198 temperature->get_temperature(&val_temperature);
ambromar 2:03da1eb4ebc8 199 pc.printf("temperatura [Celsius]: %f\n\r", val_temperature);
ambromar 2:03da1eb4ebc8 200 }
ambromar 2:03da1eb4ebc8 201
ambromar 2:03da1eb4ebc8 202 void get_humidity() {
ambromar 2:03da1eb4ebc8 203 temperature->get_humidity(&val_humidity);
ambromar 2:03da1eb4ebc8 204 pc.printf("Humidity [%%]\t\t%f\r\n", val_humidity);
ambromar 2:03da1eb4ebc8 205 }
ambromar 2:03da1eb4ebc8 206
ambromar 2:03da1eb4ebc8 207 void get_acceleration() {
ambromar 2:03da1eb4ebc8 208 iNemo->get_x_axes(assi_accelerazione);
ambromar 2:03da1eb4ebc8 209 pc.printf("accelerazione [mg]:\t%d\t%d\t%d\n\r", assi_accelerazione[0] , assi_accelerazione[1] , assi_accelerazione[2]);
ambromar 2:03da1eb4ebc8 210 }
ambromar 2:03da1eb4ebc8 211
ambromar 2:03da1eb4ebc8 212 void get_gyroscope() {
ambromar 2:03da1eb4ebc8 213 iNemo->get_g_axes(assi_giroscopio);
ambromar 2:03da1eb4ebc8 214 pc.printf("velocita' angolare [rad/s]:\t%d\t%d\t%d\n\r", assi_giroscopio[0] , assi_giroscopio[1] , assi_giroscopio[2]);
ambromar 2:03da1eb4ebc8 215 }
ambromar 2:03da1eb4ebc8 216
ambromar 2:03da1eb4ebc8 217 void lora_conn(void) {
ambromar 2:03da1eb4ebc8 218 pc.printf("Connessione al modem\r\n");
ambromar 2:03da1eb4ebc8 219 modem_at_cmd(msg1,(int)strlen(msg1));
ambromar 2:03da1eb4ebc8 220 pc.printf("Inviato AT\r\n");
ambromar 2:03da1eb4ebc8 221 wait(1);
ambromar 2:03da1eb4ebc8 222 modem_at_cmd(msg2,(int)strlen(msg2));
ambromar 2:03da1eb4ebc8 223 pc.printf("Inviato EUI\r\n");
ambromar 2:03da1eb4ebc8 224 wait(1);
ambromar 2:03da1eb4ebc8 225 modem_at_cmd(msg3,(int)strlen(msg3));
ambromar 2:03da1eb4ebc8 226 pc.printf("Inviato AK\r\n");
ambromar 2:03da1eb4ebc8 227 wait(1);
ambromar 2:03da1eb4ebc8 228 modem_at_cmd("AT+ADR=1",(int)strlen("AT+ADR=1"));
ambromar 2:03da1eb4ebc8 229 pc.printf("Inviato AK\r\n");
ambromar 2:03da1eb4ebc8 230 wait(1);
ambromar 2:03da1eb4ebc8 231 modem_at_cmd("AT+DC=0",(int)strlen("AT+DC=0"));
ambromar 2:03da1eb4ebc8 232 pc.printf("Inviato AK\r\n");
ambromar 2:03da1eb4ebc8 233 wait(1);
ambromar 2:03da1eb4ebc8 234 modem_at_cmd(msg4,(int)strlen(msg4));
ambromar 2:03da1eb4ebc8 235 pc.printf("Inviato JOIN\r\n");
ambromar 2:03da1eb4ebc8 236 wait4join();
ambromar 2:03da1eb4ebc8 237 }
ambromar 2:03da1eb4ebc8 238
ambromar 2:03da1eb4ebc8 239 void modem_at_cmd(char* buffer, int n) {
ambromar 0:3494d33e3b04 240 for(uint8_t i=0; i<n; i++) {
ambromar 0:3494d33e3b04 241 lora.putc(buffer[i]);
ambromar 0:3494d33e3b04 242 pc.putc(buffer[i]);
ambromar 0:3494d33e3b04 243 }
ambromar 0:3494d33e3b04 244 lora.putc(13);
ambromar 0:3494d33e3b04 245 pc.putc(13);
ambromar 0:3494d33e3b04 246 pc.printf("\n");
ambromar 0:3494d33e3b04 247 c=0;
ambromar 0:3494d33e3b04 248 do {
ambromar 0:3494d33e3b04 249 if (lora.readable()) {
ambromar 0:3494d33e3b04 250 c = lora.getc();
ambromar 0:3494d33e3b04 251 pc.putc(c);
ambromar 0:3494d33e3b04 252 }
ambromar 0:3494d33e3b04 253 } while(c!=' ');
ambromar 0:3494d33e3b04 254 }
ambromar 0:3494d33e3b04 255
ambromar 2:03da1eb4ebc8 256 void wait4join()
ambromar 2:03da1eb4ebc8 257 {
ambromar 0:3494d33e3b04 258 c=0;
ambromar 0:3494d33e3b04 259 do {
ambromar 0:3494d33e3b04 260 if (lora.readable()) {
ambromar 0:3494d33e3b04 261 c = lora.getc();
ambromar 0:3494d33e3b04 262 pc.putc(c);
ambromar 0:3494d33e3b04 263 }
ambromar 2:03da1eb4ebc8 264 } while(c!='d');
ambromar 2:03da1eb4ebc8 265 }