Amaldi / Mbed 2 deprecated Amaldi_RobotFinale_Rev5_1

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
francesco01
Date:
Fri Mar 22 11:57:01 2019 +0000
Parent:
19:eb21b7baa88b
Commit message:
messaggio temperatura

Changed in this revision

RobotFinale5.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/RobotFinale5.cpp	Wed Mar 20 12:46:02 2019 +0000
+++ b/RobotFinale5.cpp	Fri Mar 22 11:57:01 2019 +0000
@@ -5,6 +5,9 @@
 // mbed specific header files.
 #include "mbed.h"
 
+// numero di acqusizioni su cui effettuare la media della temperatura
+#define NUMSAMPLE 300
+
 // include suono del motore
 #include "SampledSoundGurgle.h" // rumore del motore da fermo durante gli spsotamenti
 #include "SampledSoundWelcomeDizione.h" // messaggio di benvenuto
@@ -119,6 +122,32 @@
  
 // sensore di prossimità. '1' = Sensore Presente, '0' = Sesnore Assente
 int nProximitySensorPresent; 
+   
+   
+//***************************
+// Acquisizione da ADC
+//***************************
+   
+  // ticker per l'acquisizione dell'onda con ADC
+Ticker SamplingTicker;
+
+// carattere in arrivo dal PC ed equivalente numerico
+volatile char cReadChar;
+volatile int nReadChar;
+
+// flag che diventa true quando si vuole fermare l'acquisizione
+volatile bool bStop;
+
+// valore letto dall'ADC e corrispondente in tensione
+//volatile unsigned short usReadADC;
+//volatile float fReadVoltage;
+
+// valore di temperatura letto dall'ADC
+volatile float fTemp;
+
+/*********************************************/
+/*********************************************/ 
+ 
     
 // pin di pilotaggio Motore DC
 DigitalOut OutMotorA (PB_0);
@@ -134,7 +163,7 @@
 DigitalOut LedRPD (PA_13);
 DigitalOut LedRPS (PA_14) ; 
 DigitalOut LedYRAll (PC_7); // Con questo pin si pilotano contemporaneamente i Led: YLD1, YLD2, YLD3, YLD4, YLS1, YLS2, YLS3, YLS4, RPD1, RPS1
-
+AnalogIn InWave(PC_0);
 
 // Input/Output Digitali usati per interfaccia RPI
 DigitalIn InShearRPI (PB_11, PullDown); // arriva un segnale alto su questo input quando Raspberry Invia un comando di apertura/chiusura cesoie. Collegato a Raspberry GPIO17
@@ -339,6 +368,10 @@
         wait_us(57);
     }
     //++++++++++++ FINE generazione messaggio di Arrivederci +++++++++++++++++
+ 
+ 
+ 
+ 
     
     //++++++++++++ INIZIO Spegni tutti i LED in sequenza +++++++++++++++++
     // spegni tutti i LED
@@ -363,10 +396,89 @@
             
 }
 
+/****************************************/
+/*Genera messaggio temperatura*/
+/****************************************/
+
+void Sampling() 
+{
+    // indice per l'array di DontTouch message
+    int nDontTouchMsgIndex;
+    // parametri per generare il messaggio di DontTouch
+    double fAmpDontTouchSound;
+    //double fFreqDontTouchSound;
+    //double fDeltaTDontTouchSound;
+     //++++++++++++ INIZIO generazione messaggio di Don't Touch +++++++++++++++++ 
+    fAmpDontTouchSound = 1.0;  // fissa l'amplificazione per il messaggio di DontTouch. Valori da 0[min] a 1[max] 
+    //fFreqDontTouchSound=nSamplePerSecDontTouch/nUnderSampleFactorDontTouch;// campioni per secondo del DontTouch message da generare = nSamplePerSec/nUnderSampleFactor
+    //fDeltaTDontTouchSound = (1.0/fFreqDontTouchSound);  // fFreq dipende dal periodo di campionamento e dal fattore di sottocampionamento
+    
+    // indice per i cicli
+    int nIndex;
+    // valore medio della temperatura su NUMACQUISISIONI acquisizioni
+    float fAvgTemp;
+    
+    // se è stato inviato il comando Stop, non fare niente fino a nuovo comando
+    if(bStop)
+    {
+    }
+    else // se non è stato inviato il comando di bStop continua
+    {
+        // inizializza il valore medio della temperatura 
+        fAvgTemp=0.0;
+        for(nIndex=0; nIndex < NUMSAMPLE; nIndex++)
+        {
+            // acquisisce dato da ADC
+            usReadADC = InWave.read_u16();
+            fReadVoltage=(usReadADC*3.3)/65535.0; // converte in Volt il valore numerico letto dall'ADC
+            //fReadVoltage=InWave.read(); // acquisisce il valore dall'ADC come valore di tensione in volt
+            fTemp= ((fReadVoltage-0.25)*100.0)/(3.05-0.25); //applica la formula della retta tra i valori minimo e massimo del sensore
+            fAvgTemp+=fTemp;
+        }   
+        // calcola valore medio su NUMSAMPLE acquisizioni 
+        fAvgTemp/= NUMSAMPLE;
+        
+        // accendi LED in base a superamento soglie
+        if (fAvgTemp <= 30.0)
+        {
+             // mette in output un campione della forma d'onda del DontTouch message  moltiplicato per l'amplificazione fAmp
+        OutWave.write_u16(naInputSoundWaveDontTouch[nDontTouchMsgIndex]*fAmpDontTouchSound*fSoundGain);
+        
+        // tra un campione e l'altro attendi un periodo pari al periodo di campionamento
+        //wait(fDeltaTDontTouchSound);
+        wait_us(57);
+        }
+        else
+        {      
+        }
+        
+        
+        
+        
+        // invia il dato al PC
+        //pc.printf("\n\r--- Voltage= %.1f [Volt]; Temperature= %.1f [Celsius] ---\n\r", fReadVoltage, fTemp);
+        pc.printf("\n\r--- Digital= %d [Volt]; Temperature= %.2f [Celsius] ---\n\r", usReadADC, fTemp);
+        
+        
+        
+        /*
+        // prepara il pacchetto di dati acquisiti  da restituire al PC
+        caTxPacket[nSampleInCount]= (char)(usReadADC&0xFF);
+        //+++caTxPacket[nSampleInCount]= 'a';
+        nSampleInCount++;
+        caTxPacket[nSampleInCount] = (char)((usReadADC>>8)&0xFF);
+        //++++caTxPacket[nSampleInCount]= 'b';
+        */
+          
+     }
+
+
+
 /**************************************/
 /* Genera Messaggio di Don't Touch Me */
 /**************************************/
-void DontTouchMessage()
+void DontTouchMessage();
+
 {
     // indice per l'array di DontTouch message
     int nDontTouchMsgIndex;
@@ -375,7 +487,7 @@
     //double fFreqDontTouchSound;
     //double fDeltaTDontTouchSound;
     
-    
+   
      
     //++++++++++++ INIZIO generazione messaggio di Don't Touch +++++++++++++++++ 
     fAmpDontTouchSound = 1.0;  // fissa l'amplificazione per il messaggio di DontTouch. Valori da 0[min] a 1[max] 
@@ -433,7 +545,7 @@
 /* Genera il suono di una motosega.                                    */ 
 /* Attivo quando arriva il comando di spostamento Cesoie da Raspberry  */
 /***********************************************************************/
-void ShearSoundGeneration()
+void ShearSoundGeneration();
 {
     // indice per l'array di suono Shear  
     int nShearSoundIndex;
@@ -460,11 +572,11 @@
     
     
     
-}
+
 /***********************************************************************/
 /* generazione suoni con i sample da file di campioni in SoundSample.h */
 /***********************************************************************/
-void SampleOut() 
+void SampleOut(); 
 {
     // interrompi il suono del motore per generare altri suoni. '1' = interrompi i suoni
     if(bEngineSoundStop == 0)
@@ -482,7 +594,7 @@
  /**************************************************************************************/
 /* Routine di gestione Interrupt associata al fronte di salita del segnale di encoder */
 /**************************************************************************************/
-void riseEncoderIRQ()
+void riseEncoderIRQ();
 {
     nCountRiseEdge++;
 }       
@@ -490,7 +602,7 @@
 /********/
 /* Main */
 /********/
-int main()
+int main();
 {
     // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
     pc.baud(921600); //921600 bps
@@ -928,11 +1040,15 @@
             fSoundGain = 0.0;
         } // fine if(nStandByRPI == 1)
         
-    } // fine ciclo while(true)
+    }; // fine ciclo while(true)
     
     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     //+++++++++++++++++++++++++++++++++++++ FINE CICLO OPERATIVO++++++++++++++++++++++++++++++++
     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
-}
+
+
 
+
+
+