FormazioneSitael / Mbed 2 deprecated SITAEL-TesysRail_Diag_Rev2_FINALE

Dependencies:   mbed

Revision:
5:1487badf0793
Parent:
4:3a3ba27a08ee
--- /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