FormazioneSitael / Mbed 2 deprecated SITAEL-TesysRail_Diag_Rev2_FINALE

Dependencies:   mbed

Committer:
di_tanno
Date:
Mon Feb 17 22:07:11 2020 +0000
Revision:
4:3a3ba27a08ee
Parent:
3:307e8b3d4968
asdfa;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hiro99ma 0:23f5942ba14e 1 #include "mbed.h"
hiro99ma 1:fa70127b3381 2
pinofal 3:307e8b3d4968 3 // tempo in secondi dl Ticker
di_tanno 4:3a3ba27a08ee 4 #define SECPERTICK 1
di_tanno 4:3a3ba27a08ee 5
di_tanno 4:3a3ba27a08ee 6 DigitalOut MyLed(LED1);
di_tanno 4:3a3ba27a08ee 7 AnalogIn In20(PA_0); //20 Volt
di_tanno 4:3a3ba27a08ee 8 AnalogIn In5(PB_0); //5 Volt
di_tanno 4:3a3ba27a08ee 9 AnalogIn In42(PC_0); //4.2 Volt
di_tanno 4:3a3ba27a08ee 10 Serial pc(USBTX,USBRX);
di_tanno 4:3a3ba27a08ee 11 Serial MyBle(PA_9,PA_10);
pinofal 3:307e8b3d4968 12
pinofal 3:307e8b3d4968 13 // numero di volte che il programma entra nella funzione Ticker
pinofal 3:307e8b3d4968 14 int nCountTick;
pinofal 3:307e8b3d4968 15 int nOldCountTick;
di_tanno 4:3a3ba27a08ee 16 volatile bool bSwitch;
di_tanno 4:3a3ba27a08ee 17 volatile float fSommaMisureVPiezo = 0.0;
di_tanno 4:3a3ba27a08ee 18 volatile float fSommaMisureVOut = 0.0;
di_tanno 4:3a3ba27a08ee 19 volatile float fSommaMisureVBatt = 0.0;
di_tanno 4:3a3ba27a08ee 20 volatile int nContaMisure= 0;
di_tanno 4:3a3ba27a08ee 21 volatile float fAverageVBatt =0.0;
di_tanno 4:3a3ba27a08ee 22 volatile float fAverageVOut =0.0;
di_tanno 4:3a3ba27a08ee 23 volatile float fAverageVPiezo =0.0;
pinofal 3:307e8b3d4968 24
pinofal 3:307e8b3d4968 25 // variabili contenenti le tensioni lette con gli ADC
pinofal 3:307e8b3d4968 26 float fOut;
pinofal 3:307e8b3d4968 27 float fPiezo;
pinofal 3:307e8b3d4968 28 float fBatt;
di_tanno 4:3a3ba27a08ee 29 float temp;
di_tanno 4:3a3ba27a08ee 30 char stringa[128];
di_tanno 4:3a3ba27a08ee 31 char stringapc[128];
di_tanno 4:3a3ba27a08ee 32 const float R1 = 562000.0;
di_tanno 4:3a3ba27a08ee 33 const float R2 = 100000.0;
di_tanno 4:3a3ba27a08ee 34 const float R3 = 274000.0;
di_tanno 4:3a3ba27a08ee 35 const float R4 = 562000.0;
di_tanno 4:3a3ba27a08ee 36 const float R5 = 100000.0;
di_tanno 4:3a3ba27a08ee 37 const float R6 = 332000.0;
di_tanno 4:3a3ba27a08ee 38 int contStr = 0;
di_tanno 4:3a3ba27a08ee 39 int contStrPc = 0;
pinofal 3:307e8b3d4968 40
pinofal 3:307e8b3d4968 41 // indice per i cicli
pinofal 3:307e8b3d4968 42 int nIndex;
pinofal 3:307e8b3d4968 43
pinofal 3:307e8b3d4968 44
pinofal 3:307e8b3d4968 45
pinofal 3:307e8b3d4968 46 Ticker TimeTick;
pinofal 3:307e8b3d4968 47
di_tanno 4:3a3ba27a08ee 48 void TimeTickFunction()
di_tanno 4:3a3ba27a08ee 49 {
di_tanno 4:3a3ba27a08ee 50 if(bSwitch == true) //Variabile accensione o spegnimento trasmissione dati(cambia attraverso uno switch sull'app)
hiro99ma 1:fa70127b3381 51 {
di_tanno 4:3a3ba27a08ee 52 // Calcolo valore medio di: VPiezo,VOut,VBatt
di_tanno 4:3a3ba27a08ee 53 fAverageVBatt = fSommaMisureVBatt/nContaMisure;
di_tanno 4:3a3ba27a08ee 54 fAverageVPiezo = fSommaMisureVPiezo/nContaMisure;
di_tanno 4:3a3ba27a08ee 55 fAverageVOut = fSommaMisureVOut/nContaMisure;
di_tanno 4:3a3ba27a08ee 56 // Reinizzializzo le variabili necessarie alla somma
di_tanno 4:3a3ba27a08ee 57 fSommaMisureVBatt =0.0;
di_tanno 4:3a3ba27a08ee 58 fSommaMisureVOut = 0.0;
di_tanno 4:3a3ba27a08ee 59 fSommaMisureVPiezo = 0.0;
di_tanno 4:3a3ba27a08ee 60 /* Mando Valori medi all'applicazione tramite Bluetooth utilizzando il seguente protocollo:
di_tanno 4:3a3ba27a08ee 61 *P Piezo
di_tanno 4:3a3ba27a08ee 62 *O VOut
di_tanno 4:3a3ba27a08ee 63 *B VBatt
di_tanno 4:3a3ba27a08ee 64 */
di_tanno 4:3a3ba27a08ee 65 MyBle.printf("*P%.2f",fAverageVPiezo);
di_tanno 4:3a3ba27a08ee 66 pc.printf("PC>: P %.2f\n\r",fAverageVPiezo);
di_tanno 4:3a3ba27a08ee 67 MyBle.printf("*O%.2f",fAverageVOut);
di_tanno 4:3a3ba27a08ee 68 pc.printf("PC>: O %.2f\n\r",fAverageVOut);
di_tanno 4:3a3ba27a08ee 69 MyBle.printf("*B%.2f",fAverageVBatt);
di_tanno 4:3a3ba27a08ee 70 pc.printf("PC>: B %.2f\n\r",fAverageVBatt);
di_tanno 4:3a3ba27a08ee 71
di_tanno 4:3a3ba27a08ee 72 // indice di tick
di_tanno 4:3a3ba27a08ee 73 nCountTick++;
di_tanno 4:3a3ba27a08ee 74 // reinizializzo contatore di misure
di_tanno 4:3a3ba27a08ee 75 nContaMisure =0;
di_tanno 4:3a3ba27a08ee 76 //Mando valori medi in seriale al pc per questioni di diagnostica
di_tanno 4:3a3ba27a08ee 77 pc.printf("Secondi= %d; fPiezo = %.3f; fOut = %.3f; fBatt = %.3f\n\r", (nCountTick*SECPERTICK), fAverageVPiezo, fAverageVOut, fAverageVBatt);
hiro99ma 1:fa70127b3381 78 }
di_tanno 4:3a3ba27a08ee 79
di_tanno 4:3a3ba27a08ee 80
hiro99ma 0:23f5942ba14e 81
di_tanno 4:3a3ba27a08ee 82
hiro99ma 0:23f5942ba14e 83 }
hiro99ma 0:23f5942ba14e 84 int main()
hiro99ma 0:23f5942ba14e 85 {
di_tanno 4:3a3ba27a08ee 86 //Inizializzazione del contatore delle misure
di_tanno 4:3a3ba27a08ee 87 nContaMisure =0;
pinofal 3:307e8b3d4968 88 TimeTick.attach(&TimeTickFunction,SECPERTICK);
di_tanno 4:3a3ba27a08ee 89 char cRxChar;
di_tanno 4:3a3ba27a08ee 90 char pcRxChar;
pinofal 3:307e8b3d4968 91 while(true)
di_tanno 4:3a3ba27a08ee 92 {
di_tanno 4:3a3ba27a08ee 93 fPiezo=In20.read(); //Acquisice la tensione in dal piezo
di_tanno 4:3a3ba27a08ee 94 fPiezo=fPiezo*3.3; //Converte la tensione del piezo in un range da 0 a 3.3 Volt
di_tanno 4:3a3ba27a08ee 95 fPiezo= (fPiezo/(R2/(R1+R2))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
di_tanno 4:3a3ba27a08ee 96 fSommaMisureVPiezo += fPiezo;
di_tanno 4:3a3ba27a08ee 97 fOut=In5.read(); //Acquisice la tensione in uscita dall'alimentatore
di_tanno 4:3a3ba27a08ee 98 fOut=fOut*3.3; //Converte la tensione del tensione in uscita in un range da 0 a 3.3 Volt
di_tanno 4:3a3ba27a08ee 99 fOut= (fOut/(R4/(R3+R4))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
di_tanno 4:3a3ba27a08ee 100 fSommaMisureVOut += fOut;
di_tanno 4:3a3ba27a08ee 101 fBatt=In42.read(); //Acquisice la tensione della batteria
di_tanno 4:3a3ba27a08ee 102 fBatt=fBatt*3.3; //Converte la tensione della batteria in un range da 0 a 3.3 Volt
di_tanno 4:3a3ba27a08ee 103 fBatt= (fBatt/(R6/(R5+R6))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
di_tanno 4:3a3ba27a08ee 104 fSommaMisureVBatt +=fBatt;
di_tanno 4:3a3ba27a08ee 105 nContaMisure++;
di_tanno 4:3a3ba27a08ee 106
di_tanno 4:3a3ba27a08ee 107
di_tanno 4:3a3ba27a08ee 108
di_tanno 4:3a3ba27a08ee 109
pinofal 3:307e8b3d4968 110
pinofal 3:307e8b3d4968 111
di_tanno 4:3a3ba27a08ee 112 //Non ci possono essere trasmissioni contemporanee da Bluetooth e da Usb
di_tanno 4:3a3ba27a08ee 113
di_tanno 4:3a3ba27a08ee 114 //Protocollo comunicazione, invio messaggi da PC a Bluetooth
di_tanno 4:3a3ba27a08ee 115 while(MyBle.readable())
di_tanno 4:3a3ba27a08ee 116 {
di_tanno 4:3a3ba27a08ee 117 cRxChar = MyBle.getc();
di_tanno 4:3a3ba27a08ee 118 //Protocollo di accensione e spegnimento della visualizzazione delle tensioni sull'APP
di_tanno 4:3a3ba27a08ee 119 if(cRxChar == 'S')
di_tanno 4:3a3ba27a08ee 120 { pc.printf("PC<: Communication switched on\n\r");
di_tanno 4:3a3ba27a08ee 121 MyBle.printf("*#Communication switched on\n\r*");
di_tanno 4:3a3ba27a08ee 122 bSwitch = true;
di_tanno 4:3a3ba27a08ee 123
di_tanno 4:3a3ba27a08ee 124 }
di_tanno 4:3a3ba27a08ee 125
di_tanno 4:3a3ba27a08ee 126 if(cRxChar == 'E')
di_tanno 4:3a3ba27a08ee 127 {
di_tanno 4:3a3ba27a08ee 128 pc.printf("PC<: Communication switched off\n\r");
di_tanno 4:3a3ba27a08ee 129 MyBle.printf("*#Communication switched off\n\r*");
di_tanno 4:3a3ba27a08ee 130 bSwitch = false;
di_tanno 4:3a3ba27a08ee 131 }
di_tanno 4:3a3ba27a08ee 132
di_tanno 4:3a3ba27a08ee 133 //Protocollo comunicazione, invio messaggi da Bluetooh a PC
di_tanno 4:3a3ba27a08ee 134 if(cRxChar == '#')
di_tanno 4:3a3ba27a08ee 135 {
di_tanno 4:3a3ba27a08ee 136 stringa[0] = '#';
di_tanno 4:3a3ba27a08ee 137 for(int i = 1;i<=128;i++)
di_tanno 4:3a3ba27a08ee 138 {
di_tanno 4:3a3ba27a08ee 139 stringa[i] = MyBle.getc(); //Acquisisce caratteri dallo smartphone e li inserisco in un'array
di_tanno 4:3a3ba27a08ee 140 contStr = i;
di_tanno 4:3a3ba27a08ee 141 if(stringa[i] == '#') //Termina il caricamento dell'array quando riceve il '#'
di_tanno 4:3a3ba27a08ee 142 {
di_tanno 4:3a3ba27a08ee 143 break;
di_tanno 4:3a3ba27a08ee 144 }
di_tanno 4:3a3ba27a08ee 145
di_tanno 4:3a3ba27a08ee 146 }
di_tanno 4:3a3ba27a08ee 147 pc.printf("\rPC<: ");
di_tanno 4:3a3ba27a08ee 148
di_tanno 4:3a3ba27a08ee 149 for(int i = 1;i<contStr;i++)
di_tanno 4:3a3ba27a08ee 150 //Stampa sulla seriale del PC l'array caricato precedentemente
di_tanno 4:3a3ba27a08ee 151 { pc.printf("%c", stringa[i]);
di_tanno 4:3a3ba27a08ee 152
di_tanno 4:3a3ba27a08ee 153 }
di_tanno 4:3a3ba27a08ee 154 pc.printf("\n\r");
di_tanno 4:3a3ba27a08ee 155 }
di_tanno 4:3a3ba27a08ee 156
di_tanno 4:3a3ba27a08ee 157 }//if(MyBle.readable())
di_tanno 4:3a3ba27a08ee 158 // SISTEMA DI COMUNICAZIONE FUNZIONANTE
di_tanno 4:3a3ba27a08ee 159 while(pc.readable())
di_tanno 4:3a3ba27a08ee 160 {
di_tanno 4:3a3ba27a08ee 161 pcRxChar = pc.getc();
di_tanno 4:3a3ba27a08ee 162 switch(pcRxChar)
di_tanno 4:3a3ba27a08ee 163 {
di_tanno 4:3a3ba27a08ee 164 case '#':
di_tanno 4:3a3ba27a08ee 165 if(stringapc[0] == '#')
di_tanno 4:3a3ba27a08ee 166 {
di_tanno 4:3a3ba27a08ee 167 pc.printf("\rPC>: ");
di_tanno 4:3a3ba27a08ee 168 MyBle.putc('*');
di_tanno 4:3a3ba27a08ee 169
di_tanno 4:3a3ba27a08ee 170 for(int i = 0;i<contStrPc;i++)
di_tanno 4:3a3ba27a08ee 171 {
di_tanno 4:3a3ba27a08ee 172 MyBle.printf("%c" , stringapc[i]);
di_tanno 4:3a3ba27a08ee 173 pc.printf("%c", stringapc[i]);
di_tanno 4:3a3ba27a08ee 174 }
di_tanno 4:3a3ba27a08ee 175 pc.printf("\n\r");
di_tanno 4:3a3ba27a08ee 176 MyBle.printf("\n\r*");
di_tanno 4:3a3ba27a08ee 177 for(int i = 0;i<contStrPc;i++)
di_tanno 4:3a3ba27a08ee 178 {
di_tanno 4:3a3ba27a08ee 179 stringapc[i] = ' ';
di_tanno 4:3a3ba27a08ee 180 }
di_tanno 4:3a3ba27a08ee 181 contStrPc = 0;
di_tanno 4:3a3ba27a08ee 182
di_tanno 4:3a3ba27a08ee 183
di_tanno 4:3a3ba27a08ee 184 }
di_tanno 4:3a3ba27a08ee 185 else
di_tanno 4:3a3ba27a08ee 186 {
di_tanno 4:3a3ba27a08ee 187 stringapc[0] = '#';
di_tanno 4:3a3ba27a08ee 188 contStrPc++;
di_tanno 4:3a3ba27a08ee 189 }
di_tanno 4:3a3ba27a08ee 190 break;
di_tanno 4:3a3ba27a08ee 191 default:
di_tanno 4:3a3ba27a08ee 192 if(stringapc[0] == '#')
di_tanno 4:3a3ba27a08ee 193 {
di_tanno 4:3a3ba27a08ee 194 stringapc[contStrPc] = pcRxChar;
di_tanno 4:3a3ba27a08ee 195 contStrPc++;
di_tanno 4:3a3ba27a08ee 196 }
di_tanno 4:3a3ba27a08ee 197 break;
di_tanno 4:3a3ba27a08ee 198
di_tanno 4:3a3ba27a08ee 199 }//switch(pcRxChar)
di_tanno 4:3a3ba27a08ee 200 }//while(MyBle.readable())
di_tanno 4:3a3ba27a08ee 201
di_tanno 4:3a3ba27a08ee 202 } //while (true)
di_tanno 4:3a3ba27a08ee 203
hiro99ma 0:23f5942ba14e 204 }
di_tanno 4:3a3ba27a08ee 205
di_tanno 4:3a3ba27a08ee 206
di_tanno 4:3a3ba27a08ee 207