insist / Mbed 2 deprecated IKS02A1_LoRaWAN

Dependencies:   mbed X_NUCLEO_IKS01A2 mbed-dsp

Committer:
Ignazio
Date:
Mon Oct 11 08:49:03 2021 +0000
Revision:
18:b35e44c016c2
Parent:
13:fc873da5b445
Programma per monitoraggio del ponte  con nodo sensore composto da IKS02A1 e modulo LoRaWAN

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cparata 0:69566eea0fba 1 /**
cparata 0:69566eea0fba 2 ******************************************************************************
cparata 0:69566eea0fba 3 * @file main.cpp
cparata 8:8f495e604424 4 * @author CLab
cparata 8:8f495e604424 5 * @version V1.0.0
cparata 8:8f495e604424 6 * @date 2-December-2016
Ignazio 18:b35e44c016c2 7 * @brief Simple Example application for using the X_NUCLEO_IKS01A1
cparata 0:69566eea0fba 8 * MEMS Inertial & Environmental Sensor Nucleo expansion board.
cparata 0:69566eea0fba 9 ******************************************************************************
cparata 0:69566eea0fba 10 * @attention
cparata 0:69566eea0fba 11 *
cparata 0:69566eea0fba 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
cparata 0:69566eea0fba 13 *
cparata 0:69566eea0fba 14 * Redistribution and use in source and binary forms, with or without modification,
cparata 0:69566eea0fba 15 * are permitted provided that the following conditions are met:
cparata 0:69566eea0fba 16 * 1. Redistributions of source code must retain the above copyright notice,
cparata 0:69566eea0fba 17 * this list of conditions and the following disclaimer.
cparata 0:69566eea0fba 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
cparata 0:69566eea0fba 19 * this list of conditions and the following disclaimer in the documentation
cparata 0:69566eea0fba 20 * and/or other materials provided with the distribution.
cparata 0:69566eea0fba 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
cparata 0:69566eea0fba 22 * may be used to endorse or promote products derived from this software
cparata 0:69566eea0fba 23 * without specific prior written permission.
cparata 0:69566eea0fba 24 *
cparata 0:69566eea0fba 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
cparata 0:69566eea0fba 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
cparata 0:69566eea0fba 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
cparata 0:69566eea0fba 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
cparata 0:69566eea0fba 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
cparata 0:69566eea0fba 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
cparata 0:69566eea0fba 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
cparata 0:69566eea0fba 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
cparata 0:69566eea0fba 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
cparata 0:69566eea0fba 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cparata 0:69566eea0fba 35 *
cparata 0:69566eea0fba 36 ******************************************************************************
Ignazio 18:b35e44c016c2 37 */
cparata 0:69566eea0fba 38
cparata 0:69566eea0fba 39 /* Includes */
cparata 0:69566eea0fba 40 #include "mbed.h"
davide.aliprandi@st.com 13:fc873da5b445 41 #include "XNucleoIKS01A2.h"
Ignazio 18:b35e44c016c2 42 /* Include arm_math.h mathematic functions */
Ignazio 18:b35e44c016c2 43 #include "arm_math.h"
Ignazio 18:b35e44c016c2 44 /* Include mbed-dsp libraries */
Ignazio 18:b35e44c016c2 45 #include "arm_common_tables.h"
Ignazio 18:b35e44c016c2 46 #include "arm_const_structs.h"
Ignazio 18:b35e44c016c2 47 #include "math_helper.h"
Ignazio 18:b35e44c016c2 48
Ignazio 18:b35e44c016c2 49
Ignazio 18:b35e44c016c2 50 /* FFT settings */
Ignazio 18:b35e44c016c2 51 #define SAMPLES 4096 /* 2048 real party and 2048 imaginary parts */
Ignazio 18:b35e44c016c2 52 #define FFT_SIZE SAMPLES / 2 /* FFT size is always the same size as we have samples, so 256 in our case */
Ignazio 18:b35e44c016c2 53
Ignazio 18:b35e44c016c2 54 /* Variables FFT*/
Ignazio 18:b35e44c016c2 55 float InputX[SAMPLES],InputY[SAMPLES],InputZ[SAMPLES];
Ignazio 18:b35e44c016c2 56 //float Input_X[SAMPLES-2],Input_Y[SAMPLES-2],Input_Z[SAMPLES-2];
Ignazio 18:b35e44c016c2 57 float OutputX[FFT_SIZE],OutputY[FFT_SIZE],OutputZ[FFT_SIZE];
Ignazio 18:b35e44c016c2 58 float Output_X[FFT_SIZE-1],Output_Y[FFT_SIZE-1],Output_Z[FFT_SIZE-1];
Ignazio 18:b35e44c016c2 59 uint8_t cx_f, cy_f, cz_f;
Ignazio 18:b35e44c016c2 60 uint8_t M_cx_f,M_cy_f,M_cz_f;
Ignazio 18:b35e44c016c2 61 //int M_cx_f,M_cy_f,M_cz_f;
Ignazio 18:b35e44c016c2 62 bool trig=0;
Ignazio 18:b35e44c016c2 63
Ignazio 18:b35e44c016c2 64 /*Variabili accellerometro*/
Ignazio 18:b35e44c016c2 65 //int32_t axes[3];
Ignazio 18:b35e44c016c2 66 int16_t int_axes[3];
cparata 0:69566eea0fba 67
cparata 0:69566eea0fba 68 /* Instantiate the expansion board */
davide.aliprandi@st.com 13:fc873da5b445 69 static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
cparata 0:69566eea0fba 70
cparata 0:69566eea0fba 71 static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro;
Ignazio 18:b35e44c016c2 72
Ignazio 18:b35e44c016c2 73 //Seriali
Ignazio 18:b35e44c016c2 74 Serial pc(USBTX, USBRX,115200);
Ignazio 18:b35e44c016c2 75 I2C i2c(D14, D15);
cparata 0:69566eea0fba 76
Ignazio 18:b35e44c016c2 77 /* LoRaWAN */
Ignazio 18:b35e44c016c2 78 Serial lora(D8,D2,115200);
Ignazio 18:b35e44c016c2 79 void setup_lora(void);
Ignazio 18:b35e44c016c2 80 void modem_at_cmd(char*,int);
Ignazio 18:b35e44c016c2 81 void wait4join(void);
Ignazio 18:b35e44c016c2 82 void inviaMessaggio(float,uint8_t, float,uint8_t, float,uint8_t);
Ignazio 18:b35e44c016c2 83 char c;
Ignazio 18:b35e44c016c2 84 uint16_t i_M=351;// indice per invio messaggio
cparata 0:69566eea0fba 85
Ignazio 18:b35e44c016c2 86 char* msg1 = {"AT"};
Ignazio 18:b35e44c016c2 87 char* msg2 = {"AT+APPEUI=1111111111111111"};
Ignazio 18:b35e44c016c2 88 char* msg3 = {"AT+AK=11111111111111111111111111111111"};
Ignazio 18:b35e44c016c2 89 char* msg4 = {"AT+JOIN=1"};
Ignazio 18:b35e44c016c2 90 //char* msg5 = {"AT+SEND=15,3031323334,0"};
Ignazio 18:b35e44c016c2 91 char msg5[64]; // = {"AT+SEND=15,3031323334,0"};
Ignazio 18:b35e44c016c2 92 char msg6[80];
cparata 0:69566eea0fba 93
Ignazio 18:b35e44c016c2 94 /* Timer */
Ignazio 18:b35e44c016c2 95 //Timer tempo, temp;
Ignazio 18:b35e44c016c2 96 //Ticker tic;
cparata 0:69566eea0fba 97
cparata 0:69566eea0fba 98
Ignazio 18:b35e44c016c2 99 void sample()
Ignazio 18:b35e44c016c2 100 {
Ignazio 18:b35e44c016c2 101 trig=1;
Ignazio 18:b35e44c016c2 102
Ignazio 18:b35e44c016c2 103 }
Ignazio 18:b35e44c016c2 104 int calcolare_max(float* Vettore)
Ignazio 18:b35e44c016c2 105 {
cparata 0:69566eea0fba 106
Ignazio 18:b35e44c016c2 107 uint16_t I=0;
Ignazio 18:b35e44c016c2 108 float max=Vettore[0];
Ignazio 18:b35e44c016c2 109 for(int w=0; w<=sizeof(Vettore); w++)
Ignazio 18:b35e44c016c2 110 if(max<Vettore[w]) {
Ignazio 18:b35e44c016c2 111 max=Vettore[w];
Ignazio 18:b35e44c016c2 112 I=w;
Ignazio 18:b35e44c016c2 113 }
Ignazio 18:b35e44c016c2 114 return I;
cparata 0:69566eea0fba 115 }
cparata 0:69566eea0fba 116
Ignazio 18:b35e44c016c2 117
Ignazio 18:b35e44c016c2 118 int main()
Ignazio 18:b35e44c016c2 119 {
Ignazio 18:b35e44c016c2 120 i2c.frequency(1000000);
Ignazio 18:b35e44c016c2 121 float dato_final[3];
Ignazio 18:b35e44c016c2 122 float sens;
Ignazio 18:b35e44c016c2 123 //sens =0.061; //FS= 2g
Ignazio 18:b35e44c016c2 124 uint16_t imX, imY, imZ;
Ignazio 18:b35e44c016c2 125
Ignazio 18:b35e44c016c2 126 float MaxValueX,MaxValueY,MaxValueZ; //Massimo valore dei vettoridei massimi di FFT in 1 ora
Ignazio 18:b35e44c016c2 127 //arm_cfft_instance_f32 S; // ARM CFFT module
Ignazio 18:b35e44c016c2 128 float maxValueX,maxValueY,maxValueZ; // Max FFT value is stored here
Ignazio 18:b35e44c016c2 129 uint32_t maxIndexX,maxIndexY,maxIndexZ; // Index in Output array where max value is
Ignazio 18:b35e44c016c2 130 float V_maxX[i_M],V_maxY[i_M],V_maxZ[i_M]; // Vettori contenente i max del FFT in un ora
Ignazio 18:b35e44c016c2 131 float V_cx_f[i_M],V_cy_f[i_M], V_cz_f[i_M];
Ignazio 18:b35e44c016c2 132 i_M=0;
Ignazio 18:b35e44c016c2 133 /* Enable accellerometro */
Ignazio 18:b35e44c016c2 134 acc_gyro->enable_x();
Ignazio 18:b35e44c016c2 135 acc_gyro->set_x_odr(1666.0);
Ignazio 18:b35e44c016c2 136 acc_gyro->get_x_sensitivity(&sens);
Ignazio 18:b35e44c016c2 137 //Inizializzazione comunicazione con modem LoRaWAN
Ignazio 18:b35e44c016c2 138 setup_lora();
Ignazio 18:b35e44c016c2 139
Ignazio 18:b35e44c016c2 140 pc.printf("\r\n--- Starting new run ---\r\n");
Ignazio 18:b35e44c016c2 141
Ignazio 18:b35e44c016c2 142 while(1) {
Ignazio 18:b35e44c016c2 143 pc.printf("Nuovo ciclo while \r\n");
Ignazio 18:b35e44c016c2 144 /* memset(V_maxX,0,360);
Ignazio 18:b35e44c016c2 145 memset(V_maxY,0,360);
Ignazio 18:b35e44c016c2 146 memset(V_maxZ,0,360);
Ignazio 18:b35e44c016c2 147
Ignazio 18:b35e44c016c2 148 pc.printf("Vettore dei max di x: ");
Ignazio 18:b35e44c016c2 149 for(int j=0; j<360; j++) {
Ignazio 18:b35e44c016c2 150 pc.printf(" %f",V_maxX[j]);
Ignazio 18:b35e44c016c2 151 }
Ignazio 18:b35e44c016c2 152 pc.printf("\r\n");
Ignazio 18:b35e44c016c2 153 */
Ignazio 18:b35e44c016c2 154 /*
Ignazio 18:b35e44c016c2 155 // azzera vettori
Ignazio 18:b35e44c016c2 156 memset(InputX,0,SAMPLES*sizeof(float));
Ignazio 18:b35e44c016c2 157 //for(int j=0;j<SAMPLES;j++)
Ignazio 18:b35e44c016c2 158 //printf(" %f%",InputX[j]);
Ignazio 18:b35e44c016c2 159 memset(InputY,0,SAMPLES*sizeof(float));
Ignazio 18:b35e44c016c2 160 memset(InputZ,0,SAMPLES*sizeof(float));
Ignazio 18:b35e44c016c2 161 memset(OutputX,0,FFT_SIZE*sizeof(float));
Ignazio 18:b35e44c016c2 162 memset(OutputY,0,FFT_SIZE*sizeof(float));
Ignazio 18:b35e44c016c2 163 memset(OutputZ,0,FFT_SIZE*sizeof(float));
Ignazio 18:b35e44c016c2 164 */
Ignazio 18:b35e44c016c2 165 /*
Ignazio 18:b35e44c016c2 166 float t=0;
Ignazio 18:b35e44c016c2 167 tempo.start();
Ignazio 18:b35e44c016c2 168 tempo.reset();
Ignazio 18:b35e44c016c2 169 acc_gyro->get_x_axes_raw(int_axes);
Ignazio 18:b35e44c016c2 170 t=tempo.read();
Ignazio 18:b35e44c016c2 171 printf("Tempo1: %f\r\n", t);
Ignazio 18:b35e44c016c2 172 */
Ignazio 18:b35e44c016c2 173 //pc.printf("Fa partire tic\r\n");
Ignazio 18:b35e44c016c2 174 /*
Ignazio 18:b35e44c016c2 175 float t0=0;
Ignazio 18:b35e44c016c2 176 temp.start();
Ignazio 18:b35e44c016c2 177 temp.reset();
Ignazio 18:b35e44c016c2 178 */
Ignazio 18:b35e44c016c2 179 //printf("Acquisisco\r\n");
Ignazio 18:b35e44c016c2 180 Ticker tic;
Ignazio 18:b35e44c016c2 181 tic.attach_us(&sample,5000); //5 ms 200Hz sampling rate
Ignazio 18:b35e44c016c2 182 //pc.printf("Trig prima del for di acquisizione = %d\r\n",trig);
Ignazio 18:b35e44c016c2 183 for (int i = 0; i < SAMPLES; i += 2) {
Ignazio 18:b35e44c016c2 184 //printf("Dentro il for \r\n");
Ignazio 18:b35e44c016c2 185 while (trig==0);
Ignazio 18:b35e44c016c2 186 //pc.printf("Trig = %d e i= %d\r\n",trig,i);
Ignazio 18:b35e44c016c2 187 trig=0;
Ignazio 18:b35e44c016c2 188 //printf("trig= %d\r\n",trig);
Ignazio 18:b35e44c016c2 189 acc_gyro->get_x_axes_raw(int_axes);
Ignazio 18:b35e44c016c2 190 //printf("Preso dato\r\n");
Ignazio 18:b35e44c016c2 191 dato_final[0]=float(int_axes[0]*sens);//mg //solo x
Ignazio 18:b35e44c016c2 192 dato_final[1]=float(int_axes[1]*sens);//mg //solo y
Ignazio 18:b35e44c016c2 193 dato_final[2]=float(int_axes[2]*sens);//mg //solo z
Ignazio 18:b35e44c016c2 194 InputX[i] = dato_final[0]; //Real part NB removing DC offset
Ignazio 18:b35e44c016c2 195 InputX[i + 1] = 0; //Imaginary Part set to zero
Ignazio 18:b35e44c016c2 196 InputY[i] = dato_final[1];
Ignazio 18:b35e44c016c2 197 InputY[i + 1] = 0;
Ignazio 18:b35e44c016c2 198 InputZ[i] = dato_final[2];
Ignazio 18:b35e44c016c2 199 InputZ[i + 1] = 0;
Ignazio 18:b35e44c016c2 200 }
Ignazio 18:b35e44c016c2 201 tic.detach();
Ignazio 18:b35e44c016c2 202
Ignazio 18:b35e44c016c2 203 /*
Ignazio 18:b35e44c016c2 204 t0=temp.read();
Ignazio 18:b35e44c016c2 205 float t=0;
Ignazio 18:b35e44c016c2 206 tempo.start();
Ignazio 18:b35e44c016c2 207 tempo.reset();
Ignazio 18:b35e44c016c2 208 */
Ignazio 18:b35e44c016c2 209 // azzera vettori
Ignazio 18:b35e44c016c2 210 /* memset(Input_X,0,SAMPLES*sizeof(float));
Ignazio 18:b35e44c016c2 211 memset(Input_Y,0,SAMPLES*sizeof(float));
Ignazio 18:b35e44c016c2 212 memset(Input_Z,0,SAMPLES*sizeof(float));
Ignazio 18:b35e44c016c2 213 */
Ignazio 18:b35e44c016c2 214 //printf("Tolgo l'indice zero\r\n");
Ignazio 18:b35e44c016c2 215 //Tolgo l'indice zero che è quell della componete continua
Ignazio 18:b35e44c016c2 216 /*for (int h=0; h<SAMPLES-2; h++) {
Ignazio 18:b35e44c016c2 217 Input_X[h]=InputX[h+2];
Ignazio 18:b35e44c016c2 218 Input_Y[h]=InputY[h+2];
Ignazio 18:b35e44c016c2 219 Input_Z[h]=InputZ[h+2];
Ignazio 18:b35e44c016c2 220 }*/
Ignazio 18:b35e44c016c2 221
Ignazio 18:b35e44c016c2 222 // Init the Complex FFT module, intFlag = 0, doBitReverse = 1
Ignazio 18:b35e44c016c2 223 //NB using predefined arm_cfft_sR_f32_lenXXX, in this case XXX is 4096
Ignazio 18:b35e44c016c2 224 arm_cfft_f32(&arm_cfft_sR_f32_len2048, InputX, 0, 1);
Ignazio 18:b35e44c016c2 225 arm_cfft_f32(&arm_cfft_sR_f32_len2048, InputY, 0, 1);
Ignazio 18:b35e44c016c2 226 arm_cfft_f32(&arm_cfft_sR_f32_len2048, InputZ, 0, 1);
Ignazio 18:b35e44c016c2 227 // Complex Magniture Module put results into Output(Half size of the Input)
Ignazio 18:b35e44c016c2 228 arm_cmplx_mag_f32(InputX, OutputX, FFT_SIZE);
Ignazio 18:b35e44c016c2 229 arm_cmplx_mag_f32(InputY, OutputY, FFT_SIZE);
Ignazio 18:b35e44c016c2 230 arm_cmplx_mag_f32(InputZ, OutputZ, FFT_SIZE);
Ignazio 18:b35e44c016c2 231
Ignazio 18:b35e44c016c2 232 for (int h=0; h<FFT_SIZE-1; h++) {
Ignazio 18:b35e44c016c2 233 Output_X[h]=OutputX[h+1];
Ignazio 18:b35e44c016c2 234 Output_Y[h]=OutputY[h+1];
Ignazio 18:b35e44c016c2 235 Output_Z[h]=OutputZ[h+1];
Ignazio 18:b35e44c016c2 236 }
Ignazio 18:b35e44c016c2 237 //Calculates maxValue and returns corresponding value
Ignazio 18:b35e44c016c2 238 arm_max_f32(Output_X, FFT_SIZE-1, &maxValueX, &maxIndexX);
Ignazio 18:b35e44c016c2 239 arm_max_f32(Output_Y, FFT_SIZE-1, &maxValueY, &maxIndexY);
Ignazio 18:b35e44c016c2 240 arm_max_f32(Output_Z, FFT_SIZE-1, &maxValueZ, &maxIndexZ);
Ignazio 18:b35e44c016c2 241 printf("Massimo valore di X e' : %f\r\n",maxValueX/2048*2/1000);
Ignazio 18:b35e44c016c2 242 printf("Massimo valore di Y e' : %f\r\n",maxValueY/2048*2/1000);
Ignazio 18:b35e44c016c2 243 printf("Massimo valore di Z e' : %f\r\n",maxValueZ/2048*2/1000);
Ignazio 18:b35e44c016c2 244
Ignazio 18:b35e44c016c2 245
cparata 0:69566eea0fba 246
Ignazio 18:b35e44c016c2 247 cx_f= maxIndexX*200/2048;
Ignazio 18:b35e44c016c2 248 cy_f= maxIndexY*200/2048;
Ignazio 18:b35e44c016c2 249 cz_f= maxIndexZ*200/2048;
Ignazio 18:b35e44c016c2 250 /* if (maxValueX>142000 || maxValueY>213000 || maxValueZ>211000){
Ignazio 18:b35e44c016c2 251 printf("ALLARME, troppe vibrazioni!!!\r\n");
Ignazio 18:b35e44c016c2 252 inviaMessaggio(maxValueX,cx_f,maxValueY,cy_f,maxValueZ,cz_f);
Ignazio 18:b35e44c016c2 253 i_M=0;
Ignazio 18:b35e44c016c2 254 }
Ignazio 18:b35e44c016c2 255 */
Ignazio 18:b35e44c016c2 256 //pc.printf("Valore del Max di x: %f e valore della sua componete frequenziale: %d\r\n",maxValueX,cx_f);
Ignazio 18:b35e44c016c2 257 //printf("Valore del Max di y: %f e valore della sua componete frequenziale: %d\r\n",maxValueY,cy_f);
Ignazio 18:b35e44c016c2 258 /* printf("Indice del max di x %d\r\n",maxIndexX);
Ignazio 18:b35e44c016c2 259 printf("Valore del Max di x: %f e valore della sua componete frequenziale: %d\r\n",maxValueX,cx_f);
Ignazio 18:b35e44c016c2 260 printf("Indice del max di y: %d\r\n",maxIndexY);
Ignazio 18:b35e44c016c2 261 printf("Valore del Max di y: %f e valore della sua componete frequenziale: %d\r\n",maxValueY,cy_f);
Ignazio 18:b35e44c016c2 262 printf("Indice del max di z: %d\r\n",maxIndexZ);
Ignazio 18:b35e44c016c2 263 printf("Valore del Max di z: %f e valore della sua componete frequenziale: %d\r\n",maxValueZ,cz_f);
Ignazio 18:b35e44c016c2 264 printf("\r\n");
Ignazio 18:b35e44c016c2 265 */
Ignazio 18:b35e44c016c2 266 /* t=tempo.read();
Ignazio 18:b35e44c016c2 267 printf("Tempo acquisizione: %f\r\n", t0);
Ignazio 18:b35e44c016c2 268 printf("Tempo per FFT e max: %f\r\n", t);
Ignazio 18:b35e44c016c2 269 */
Ignazio 18:b35e44c016c2 270
Ignazio 18:b35e44c016c2 271 V_maxX[i_M]=maxValueX/2048*2/1000; //Ai=bin/N*2 diviso 1000 per passare da mg a g
Ignazio 18:b35e44c016c2 272 V_cx_f[i_M]=cx_f;
Ignazio 18:b35e44c016c2 273 V_maxY[i_M]=maxValueY/2048*2/1000;
Ignazio 18:b35e44c016c2 274 V_cy_f[i_M]=cy_f;
Ignazio 18:b35e44c016c2 275 V_maxZ[i_M]=maxValueZ/2048*2/1000;
Ignazio 18:b35e44c016c2 276 V_cz_f[i_M]=cz_f;
Ignazio 18:b35e44c016c2 277
Ignazio 18:b35e44c016c2 278
Ignazio 18:b35e44c016c2 279 if(i_M==60 || V_maxX[i_M]>0.139 || V_maxY[i_M]>0.208 || V_maxZ[i_M]>0.206) { //360 circa un ora con precisione 351
Ignazio 18:b35e44c016c2 280 //X
Ignazio 18:b35e44c016c2 281 /*
Ignazio 18:b35e44c016c2 282 pc.printf("Vettore dei max di x: ");
Ignazio 18:b35e44c016c2 283 for(int j=0; j<=i_M; j++) {
Ignazio 18:b35e44c016c2 284 pc.printf(" %f",V_maxX[j]);
Ignazio 18:b35e44c016c2 285 }
Ignazio 18:b35e44c016c2 286 pc.printf("\r\n");*/
Ignazio 18:b35e44c016c2 287 imX=calcolare_max(V_maxX);
Ignazio 18:b35e44c016c2 288 MaxValueX=V_maxX[imX];
Ignazio 18:b35e44c016c2 289 M_cx_f=V_cx_f[imX];
Ignazio 18:b35e44c016c2 290 pc.printf("Massimo di x rilevato in questo lasso temporale e' di : %f, componente frequenziale %d\r\n",MaxValueX,M_cx_f);
Ignazio 18:b35e44c016c2 291 //Y
Ignazio 18:b35e44c016c2 292 /* printf("Vettore dei max di y: ");
Ignazio 18:b35e44c016c2 293 for(int j=0; j<=i_M; j++) {
Ignazio 18:b35e44c016c2 294 printf(" %f",V_maxY[j]);
Ignazio 18:b35e44c016c2 295 }
Ignazio 18:b35e44c016c2 296 printf("\r\n"); */
Ignazio 18:b35e44c016c2 297 imY=calcolare_max(V_maxY);
Ignazio 18:b35e44c016c2 298 MaxValueY=V_maxY[imY];
Ignazio 18:b35e44c016c2 299 M_cy_f=V_cy_f[calcolare_max(V_maxY)];
Ignazio 18:b35e44c016c2 300 printf("Massimo di y rilevato in questo lasso temporale e' di : %f, componente frequenziale %d\r\n",MaxValueY,M_cy_f);
Ignazio 18:b35e44c016c2 301
Ignazio 18:b35e44c016c2 302 //Z
Ignazio 18:b35e44c016c2 303
Ignazio 18:b35e44c016c2 304 /* printf("Vettore dei max di z: ");
Ignazio 18:b35e44c016c2 305 for(int j=0; j<=i_M; j++) {
Ignazio 18:b35e44c016c2 306 printf(" %f",V_maxZ[j]);
Ignazio 18:b35e44c016c2 307 }
Ignazio 18:b35e44c016c2 308 printf("\r\n"); */
Ignazio 18:b35e44c016c2 309 imZ=calcolare_max(V_maxZ);
Ignazio 18:b35e44c016c2 310 MaxValueZ=V_maxZ[imZ];
Ignazio 18:b35e44c016c2 311 M_cz_f=V_cz_f[calcolare_max(V_maxZ)];
Ignazio 18:b35e44c016c2 312 printf("Massimo di z rilevato in questo lasso temporale e' di : %f, componente frequenziale %d\r\n",MaxValueZ,M_cz_f);
Ignazio 18:b35e44c016c2 313 inviaMessaggio(MaxValueX,M_cx_f,MaxValueY,M_cy_f,MaxValueZ,M_cz_f);
Ignazio 18:b35e44c016c2 314
Ignazio 18:b35e44c016c2 315 i_M=0;
Ignazio 18:b35e44c016c2 316 printf("\r\n");
Ignazio 18:b35e44c016c2 317 } else{
Ignazio 18:b35e44c016c2 318
Ignazio 18:b35e44c016c2 319 i_M++;
Ignazio 18:b35e44c016c2 320 }
Ignazio 18:b35e44c016c2 321 pc.printf("Valore di i_M : %d\r\n",i_M);
Ignazio 18:b35e44c016c2 322 }
Ignazio 18:b35e44c016c2 323
Ignazio 18:b35e44c016c2 324 }//Fine while(1)
Ignazio 18:b35e44c016c2 325
Ignazio 18:b35e44c016c2 326
cparata 0:69566eea0fba 327
Ignazio 18:b35e44c016c2 328 void setup_lora()
Ignazio 18:b35e44c016c2 329 {
cparata 0:69566eea0fba 330
Ignazio 18:b35e44c016c2 331 pc.printf("Setup comunicazione LoRa\r\n");
Ignazio 18:b35e44c016c2 332 modem_at_cmd(msg1,(int)strlen(msg1));
Ignazio 18:b35e44c016c2 333 pc.printf("Inviato AT\r\n");
Ignazio 18:b35e44c016c2 334 wait(1);
Ignazio 18:b35e44c016c2 335 modem_at_cmd(msg2,(int)strlen(msg2));
Ignazio 18:b35e44c016c2 336 pc.printf("Inviato EUI\r\n");
Ignazio 18:b35e44c016c2 337 wait(1);
Ignazio 18:b35e44c016c2 338 modem_at_cmd(msg3,(int)strlen(msg3));
Ignazio 18:b35e44c016c2 339 pc.printf("Inviato AK\r\n");
Ignazio 18:b35e44c016c2 340 wait(1);
Ignazio 18:b35e44c016c2 341 modem_at_cmd(msg4,(int)strlen(msg4));
Ignazio 18:b35e44c016c2 342 pc.printf("Inviato JOIN\r\n");
Ignazio 18:b35e44c016c2 343 wait4join();
Ignazio 18:b35e44c016c2 344 //pc.printf("+JoinAccepted\r\n");
Ignazio 18:b35e44c016c2 345 pc.printf("\r\n");
Ignazio 18:b35e44c016c2 346 //modem_at_cmd(msg5,(int)strlen(msg5));
Ignazio 18:b35e44c016c2 347 //pc.printf("Inviato send\r\n");
Ignazio 18:b35e44c016c2 348 }
Ignazio 18:b35e44c016c2 349
Ignazio 18:b35e44c016c2 350 void modem_at_cmd(char* buffer, int n)
Ignazio 18:b35e44c016c2 351 {
Ignazio 18:b35e44c016c2 352 for(uint8_t i=0; i<n; i++) {
Ignazio 18:b35e44c016c2 353 lora.putc(buffer[i]);
Ignazio 18:b35e44c016c2 354 pc.putc(buffer[i]);
Ignazio 18:b35e44c016c2 355 }
Ignazio 18:b35e44c016c2 356 lora.putc(13);//CR
Ignazio 18:b35e44c016c2 357 pc.putc(13);
Ignazio 18:b35e44c016c2 358 pc.printf("\n");
Ignazio 18:b35e44c016c2 359 c=0;
Ignazio 18:b35e44c016c2 360 do {
Ignazio 18:b35e44c016c2 361 if (lora.readable()) {
Ignazio 18:b35e44c016c2 362 c = lora.getc();
Ignazio 18:b35e44c016c2 363 pc.putc(c);
Ignazio 18:b35e44c016c2 364 }
Ignazio 18:b35e44c016c2 365 } while(c!=' ');
Ignazio 18:b35e44c016c2 366 }
cparata 0:69566eea0fba 367
Ignazio 18:b35e44c016c2 368 void wait4join()
Ignazio 18:b35e44c016c2 369 {
Ignazio 18:b35e44c016c2 370 c=0;
Ignazio 18:b35e44c016c2 371 do {
Ignazio 18:b35e44c016c2 372 if (lora.readable()) {
Ignazio 18:b35e44c016c2 373 c = lora.getc();
Ignazio 18:b35e44c016c2 374 pc.putc(c);
Ignazio 18:b35e44c016c2 375 }
Ignazio 18:b35e44c016c2 376 } while(c!='d');// Perchè il messaggio di successo è +JoinAccepted
Ignazio 18:b35e44c016c2 377 }
Ignazio 18:b35e44c016c2 378
Ignazio 18:b35e44c016c2 379 // invia messaggio
Ignazio 18:b35e44c016c2 380 void inviaMessaggio(float maxValueX,uint8_t M_cx_f,float maxValueY,uint8_t M_cy_f, float maxValueZ,uint8_t M_cz_f)
Ignazio 18:b35e44c016c2 381 {
Ignazio 18:b35e44c016c2 382 int i;
Ignazio 18:b35e44c016c2 383
Ignazio 18:b35e44c016c2 384
Ignazio 18:b35e44c016c2 385 // azzera vettori
Ignazio 18:b35e44c016c2 386 memset(msg5,0,64*sizeof(char));
Ignazio 18:b35e44c016c2 387 memset(msg6,0,80*sizeof(char));
cparata 0:69566eea0fba 388
Ignazio 18:b35e44c016c2 389 // comporre il JSON
Ignazio 18:b35e44c016c2 390
Ignazio 18:b35e44c016c2 391 sprintf(msg5,"%f, %d; %f, %d; %f, %d;", maxValueX, M_cx_f, maxValueY, M_cy_f, maxValueZ, M_cz_f );
Ignazio 18:b35e44c016c2 392 //printf("Compongo msg5 \r\n");
Ignazio 18:b35e44c016c2 393 pc.printf(" Il messaggio da inviare e': %s\r\n",msg5);
Ignazio 18:b35e44c016c2 394
Ignazio 18:b35e44c016c2 395 //pc.printf(msg5);
Ignazio 18:b35e44c016c2 396 //printf("\r\n");
Ignazio 18:b35e44c016c2 397 //printf("Lunghezza messaggio %d",(int)strlen(msg5));
Ignazio 18:b35e44c016c2 398 //printf("\r\n");
cparata 0:69566eea0fba 399
Ignazio 18:b35e44c016c2 400 int len = sprintf(msg6,"AT+SEND=");
Ignazio 18:b35e44c016c2 401
Ignazio 18:b35e44c016c2 402 len += sprintf(msg6+len,"15");
Ignazio 18:b35e44c016c2 403 len += sprintf(msg6+len,",");
cparata 0:69566eea0fba 404
Ignazio 18:b35e44c016c2 405 for(i=0; i<strlen(msg5); i++) {
Ignazio 18:b35e44c016c2 406 sprintf(msg6+len+2*i,"%X",*(msg5+i));
Ignazio 18:b35e44c016c2 407 }
Ignazio 18:b35e44c016c2 408 sprintf(msg6+len+2*i,",0");
Ignazio 18:b35e44c016c2 409 modem_at_cmd(msg6,(int)strlen(msg6));
Ignazio 18:b35e44c016c2 410 pc.printf("Inviato send\r\n");
cparata 0:69566eea0fba 411 }