codice pressione
Dependencies: mbed X_NUCLEO_IKS01A2
main.cpp@2:03da1eb4ebc8, 2020-04-23 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |