Amaldi / Mbed 2 deprecated Amaldi_17_Exercise_StripLED_ProxSensor

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
pinofal
Date:
Fri Dec 07 17:02:54 2018 +0000
Parent:
9:7bc670023361
Commit message:
Prox Sensor e Strip LED per Open day

Changed in this revision

StripLed-ProxSensor.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/StripLed-ProxSensor.cpp	Fri Dec 07 17:02:54 2018 +0000
@@ -0,0 +1,162 @@
+
+/* mbed specific header files. */
+#include "mbed.h"
+
+// TimeOut in [microsec] per verificare la presenza del sensore prossimità. Se il sensore non è presente il timer supera TIMEOUTPROXSENSOR
+#define TIMEOUTPROXSENSOR 1000 //tempo in [microsec]
+
+// seriale, pulsante Blu e LED verde su scheda
+Serial pc(USBTX, USBRX);
+DigitalOut myLed (LED2);
+DigitalIn myButton(USER_BUTTON);
+
+
+//AnalogOut OutRed(PA_0);
+//AnalogOut OutBlue(PA_1);
+//AnalogOut OutGreen(PA_4);
+
+DigitalOut OutRed(PA_0);
+DigitalOut OutBlue(PA_1);
+DigitalOut OutGreen(PA_4);
+
+// Pin su cui è collegato il sensore di prossimità
+DigitalInOut InOutProxSensor (PC_0, PIN_OUTPUT, PullDown, 0); // Pin di tipo In-Out per la gestione del segnale Sig del Sensore di prossimità a ultrasuoni
+
+// Indici per i cicli
+int nIndex, nIndexBlue, nIndexRed, nIndexGreen;
+
+// Timer per il calcolo dei tempi del sensore di prossimità
+Timer TimerProxSensor;
+
+// distanza in cm dell'ostacolo
+double fDistance;
+
+// tempo inizio intermedio e fine del timer che misura la distanza con il sensore ultrasuoni
+int nTimerStart, nTimerCurrent, nTimerStop, nTimerTillNow;
+
+
+
+
+
+/********/
+/* Main */
+/********/
+int main()
+{
+    // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
+    pc.baud(921600); //921600 bps
+    
+    // Inizializza LED con sequenza
+    OutRed=0;
+    OutBlue=0;
+    OutGreen=0;
+    //OutGreen.write_u16(0);
+    
+    wait_ms(500);
+    OutRed = 1;
+    wait_ms(500);
+    OutGreen = 1;
+    wait_ms(500);
+    OutBlue = 1;
+    wait_ms(500);
+    
+    
+    OutRed = 0;
+    wait_ms(300);
+    OutGreen = 0;
+    wait_ms(300);
+    OutBlue = 0;
+    wait_ms(500);
+    
+    
+    
+    
+    while(true)
+    {
+        //++++++++++++++ INIZIO Acquisisci distanza ostacoli +++++++++
+        //inizializza misura di distanza
+        fDistance=0.0;
+        // Fissa come Output il pin InOutProxSensor
+        InOutProxSensor.output();
+        // Poni 'L' sul Pin e mantienilo per qualche microsecondo
+        InOutProxSensor.write(0);
+        wait_us(5);
+        // Poni 'H' sul Pin e mantienilo per qualche microsecondo
+        InOutProxSensor.write(1);
+        wait_us(10);
+        // Poni 'L' sul Pin e mantienilo per qualche microsecondo
+        InOutProxSensor.write(0);
+        // Attendi assestamento e Fissa come Input il pin InOutProxSensor
+        wait_us(5);
+        InOutProxSensor.input();
+        InOutProxSensor.mode(PullDown); // se non è presente il sensore, il pin rimane a '0'
+        
+        // attende la risposta del sensore di prossimità per un tempo fissato da TIMEOUTPROXSENSOR. Dopo tale tempo dichiara inesistente il sensore
+        TimerProxSensor.start();
+        nTimerStart = TimerProxSensor.read_us();
+        nTimerTillNow=(TimerProxSensor.read_us()-nTimerStart);
+        while((InOutProxSensor ==0) && (nTimerTillNow< TIMEOUTPROXSENSOR))
+        {
+            nTimerCurrent = TimerProxSensor.read_us();
+            nTimerTillNow=nTimerCurrent-nTimerStart;
+            myLed=1; // se rimane nel while il LED rimane acceso
+            //pc.printf("sono qui 2 \r\n"); //scopi diagnostici
+        }
+        TimerProxSensor.stop(); // spegne il timer che serve per misurare il timeout quando assente il sensore di prossimità
+        //pc.printf("\r\nUscita dal while, nTimerTillNow = %d\r\n", nTimerTillNow); //scopi diagnostici
+        // se nTimerTillNow è inferiore al TIMEOUT, il sensore è presente e quindi misura la distanza dell'ostacolo
+        if(nTimerTillNow < TIMEOUTPROXSENSOR)
+        {
+            // riattiva il timer per misurare la distanza dell'ostacolo
+            TimerProxSensor.start();
+            nTimerStart = TimerProxSensor.read_us();
+            while(InOutProxSensor == 1)
+            {
+                myLed=1; // se rimane nel while il LED rimane acceso
+            }
+            TimerProxSensor.stop();
+            nTimerStop = TimerProxSensor.read_us();
+           
+            //pc.printf("\r\nSensore Presente, nTimerTillNow = %d\r\n", nTimerTillNow); //scopi diagnostici
+        
+            // velocità del suono = 343 [m/s] = 0.0343 [cm/us] = 1/29.1 [cm/us]
+            // tempo di andata e ritorno del segnale [us] = (TimerStop-TimerStart)[us]; per misurare la distanza bisogna dividere per due questo valore
+            // distanza dell'ostacolo [cm] = (TimerStop-TimerStart)/2 [us] * 1/29.1[cm/us]
+            fDistance = (nTimerStop-nTimerStart)/58.2;
+            // invia il dato al PC
+            pc.printf("Distanza dall'ostacolo = %f0.2\r\n", fDistance);
+        }    
+        else
+        {
+           // quando esce dai while bloccanti, il LED si spegne
+           myLed=0;
+           pc.printf("\r\nTimeOut\r\n");
+        }
+        //++++++++++++++ FINE Acquisisci distanza ostacoli +++++++++  
+        
+        //++++++++++++++ INIZIO pilota accensione delle strip LED +++++++++++++++++++++++++
+        //escludi le misure oltre il max
+        if((fDistance <= 50.0) && (fDistance >= 3)) 
+        {
+            OutRed = 1;
+            wait_ms(300);
+            //OutGreen.write_u16(32767);
+            OutGreen =1;
+            wait_ms(300);
+            OutBlue = 1;
+            wait_ms(300);
+        }
+        else
+        {
+            OutRed = 0;
+            wait_ms(300);
+            //OutGreen.write_u16(0);
+            OutGreen =0;
+            wait_ms(300);
+            OutBlue = 0;
+            wait_ms(300);
+        }
+        //++++++++++++++ FINE pilota accensione delle strip LED +++++++++++++++++++++++++
+        wait_ms(200);
+    }// while(true)
+}
--- a/main.cpp	Wed Nov 21 17:31:54 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-
-/* mbed specific header files. */
-#include "mbed.h"
-
-DigitalOut LedWAD (PC_2);
-DigitalOut LedWAS (PC_3);
-DigitalOut LedWPD (PC_10);
-DigitalOut LedWPS (PA_0) ;
-DigitalOut LedYAD (PC_13);
-DigitalOut LedYAS (PC_14);
-DigitalOut LedRPD (PC_12);
-DigitalOut LedRPS (PA_1) ;
-DigitalIn myButton(USER_BUTTON);
-
-int main()
-{
-    LedWAD=0;
-    LedWAS=0;
-    LedWPD=0;
-    LedWPS=0;
-    LedYAD=0;
-    LedYAS=0;
-    LedRPD=0;
-    LedRPS=0;
-    while(true)
-    {
-        if(myButton==1)
-        {
-            LedWAD = 1;
-        }
-        else
-        {
-            LedWAD = 0;
-        }
-    }
-
-
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/mbed.bld	Wed Nov 21 17:31:54 2018 +0000
+++ b/mbed.bld	Fri Dec 07 17:02:54 2018 +0000
@@ -1,1 +1,1 @@
-https://mbed.org/users/mbed_official/code/mbed/builds/a97add6d7e64
\ No newline at end of file
+https://os.mbed.com/users/mbed_official/code/mbed/builds/3a7713b1edbc
\ No newline at end of file