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: RobotFinale5.cpp
- Revision:
- 20:dd351590581d
- Parent:
- 19:eb21b7baa88b
--- 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++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-}
+
+
+
+
+