Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: TesysRail_Diag.cpp
- Revision:
- 5:1487badf0793
- Parent:
- 4:3a3ba27a08ee
diff -r 3a3ba27a08ee -r 1487badf0793 TesysRail_Diag.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/TesysRail_Diag.cpp Thu Apr 09 09:13:21 2020 +0000
@@ -0,0 +1,207 @@
+#include "mbed.h"
+
+// tempo in secondi dl Ticker
+#define SECPERTICK 1
+
+DigitalOut MyLed(LED1);
+AnalogIn In20(PA_0); //20 Volt
+AnalogIn In5(PB_0); //5 Volt
+AnalogIn In42(PC_0); //4.2 Volt
+Serial pc(USBTX,USBRX);
+Serial MyBle(PA_9,PA_10);
+
+// numero di volte che il programma entra nella funzione Ticker
+int nCountTick;
+int nOldCountTick;
+volatile bool bSwitch;
+volatile float fSommaMisureVPiezo = 0.0;
+volatile float fSommaMisureVOut = 0.0;
+volatile float fSommaMisureVBatt = 0.0;
+volatile int nContaMisure= 0;
+volatile float fAverageVBatt =0.0;
+volatile float fAverageVOut =0.0;
+volatile float fAverageVPiezo =0.0;
+
+// variabili contenenti le tensioni lette con gli ADC
+float fOut;
+float fPiezo;
+float fBatt;
+float temp;
+char stringa[128];
+char stringapc[128];
+const float R1 = 562000.0;
+const float R2 = 100000.0;
+const float R3 = 274000.0;
+const float R4 = 562000.0;
+const float R5 = 100000.0;
+const float R6 = 332000.0;
+int contStr = 0;
+int contStrPc = 0;
+
+// indice per i cicli
+int nIndex;
+
+
+
+Ticker TimeTick;
+
+void TimeTickFunction()
+{
+ if(bSwitch == true) //Variabile accensione o spegnimento trasmissione dati(cambia attraverso uno switch sull'app)
+ {
+ // Calcolo valore medio di: VPiezo,VOut,VBatt
+ fAverageVBatt = fSommaMisureVBatt/nContaMisure;
+ fAverageVPiezo = fSommaMisureVPiezo/nContaMisure;
+ fAverageVOut = fSommaMisureVOut/nContaMisure;
+ // Reinizzializzo le variabili necessarie alla somma
+ fSommaMisureVBatt =0.0;
+ fSommaMisureVOut = 0.0;
+ fSommaMisureVPiezo = 0.0;
+ /* Mando Valori medi all'applicazione tramite Bluetooth utilizzando il seguente protocollo:
+ *P Piezo
+ *O VOut
+ *B VBatt
+ */
+ MyBle.printf("*P%.2f",fAverageVPiezo);
+ pc.printf("PC>: P %.2f\n\r",fAverageVPiezo);
+ MyBle.printf("*O%.2f",fAverageVOut);
+ pc.printf("PC>: O %.2f\n\r",fAverageVOut);
+ MyBle.printf("*B%.2f",fAverageVBatt);
+ pc.printf("PC>: B %.2f\n\r",fAverageVBatt);
+
+ // indice di tick
+ nCountTick++;
+ // reinizializzo contatore di misure
+ nContaMisure =0;
+ //Mando valori medi in seriale al pc per questioni di diagnostica
+ pc.printf("Secondi= %d; fPiezo = %.3f; fOut = %.3f; fBatt = %.3f\n\r", (nCountTick*SECPERTICK), fAverageVPiezo, fAverageVOut, fAverageVBatt);
+ }
+
+
+
+
+}
+int main()
+{
+ //Inizializzazione del contatore delle misure
+ nContaMisure =0;
+ TimeTick.attach(&TimeTickFunction,SECPERTICK);
+ char cRxChar;
+ char pcRxChar;
+ while(true)
+ {
+ fPiezo=In20.read(); //Acquisice la tensione in dal piezo
+ fPiezo=fPiezo*3.3; //Converte la tensione del piezo in un range da 0 a 3.3 Volt
+ fPiezo= (fPiezo/(R2/(R1+R2))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
+ fSommaMisureVPiezo += fPiezo;
+ fOut=In5.read(); //Acquisice la tensione in uscita dall'alimentatore
+ fOut=fOut*3.3; //Converte la tensione del tensione in uscita in un range da 0 a 3.3 Volt
+ fOut= (fOut/(R4/(R3+R4))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
+ fSommaMisureVOut += fOut;
+ fBatt=In42.read(); //Acquisice la tensione della batteria
+ fBatt=fBatt*3.3; //Converte la tensione della batteria in un range da 0 a 3.3 Volt
+ fBatt= (fBatt/(R6/(R5+R6))); //Riporta il valore di tensione a prima del cambiamento causato dai partitori di tensione
+ fSommaMisureVBatt +=fBatt;
+ nContaMisure++;
+
+
+
+
+
+
+ //Non ci possono essere trasmissioni contemporanee da Bluetooth e da Usb
+
+ //Protocollo comunicazione, invio messaggi da PC a Bluetooth
+ while(MyBle.readable())
+ {
+ cRxChar = MyBle.getc();
+ //Protocollo di accensione e spegnimento della visualizzazione delle tensioni sull'APP
+ if(cRxChar == 'S')
+ { pc.printf("PC<: Communication switched on\n\r");
+ MyBle.printf("*#Communication switched on\n\r*");
+ bSwitch = true;
+
+ }
+
+ if(cRxChar == 'E')
+ {
+ pc.printf("PC<: Communication switched off\n\r");
+ MyBle.printf("*#Communication switched off\n\r*");
+ bSwitch = false;
+ }
+
+ //Protocollo comunicazione, invio messaggi da Bluetooh a PC
+ if(cRxChar == '#')
+ {
+ stringa[0] = '#';
+ for(int i = 1;i<=128;i++)
+ {
+ stringa[i] = MyBle.getc(); //Acquisisce caratteri dallo smartphone e li inserisco in un'array
+ contStr = i;
+ if(stringa[i] == '#') //Termina il caricamento dell'array quando riceve il '#'
+ {
+ break;
+ }
+
+ }
+ pc.printf("\rPC<: ");
+
+ for(int i = 1;i<contStr;i++)
+ //Stampa sulla seriale del PC l'array caricato precedentemente
+ { pc.printf("%c", stringa[i]);
+
+ }
+ pc.printf("\n\r");
+ }
+
+ }//if(MyBle.readable())
+ // SISTEMA DI COMUNICAZIONE FUNZIONANTE
+ while(pc.readable())
+ {
+ pcRxChar = pc.getc();
+ switch(pcRxChar)
+ {
+ case '#':
+ if(stringapc[0] == '#')
+ {
+ pc.printf("\rPC>: ");
+ MyBle.putc('*');
+
+ for(int i = 0;i<contStrPc;i++)
+ {
+ MyBle.printf("%c" , stringapc[i]);
+ pc.printf("%c", stringapc[i]);
+ }
+ pc.printf("\n\r");
+ MyBle.printf("\n\r*");
+ for(int i = 0;i<contStrPc;i++)
+ {
+ stringapc[i] = ' ';
+ }
+ contStrPc = 0;
+
+
+ }
+ else
+ {
+ stringapc[0] = '#';
+ contStrPc++;
+ }
+ break;
+ default:
+ if(stringapc[0] == '#')
+ {
+ stringapc[contStrPc] = pcRxChar;
+ contStrPc++;
+ }
+ break;
+
+ }//switch(pcRxChar)
+ }//while(MyBle.readable())
+
+ } //while (true)
+
+}
+
+
+
\ No newline at end of file