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
Revision 5:1487badf0793, committed 2020-04-09
- Comitter:
- pinofal
- Date:
- Thu Apr 09 09:13:21 2020 +0000
- Parent:
- 4:3a3ba27a08ee
- Commit message:
- Diagnostica dei parametri TesysRail
Changed in this revision
TesysRail_Diag.cpp | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show diff for this revision Revisions of this file |
--- /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
--- a/main.cpp Mon Feb 17 22:07:11 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -#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