PARCHEGGIO AMICO

Dependencies:   mbed Servo mbed-rtos beep hcsr04 TextLCD

Revision:
8:5fc14e646e91
Parent:
7:8ad50e27d002
Child:
9:5be4a23d1e86
diff -r 8ad50e27d002 -r 5fc14e646e91 main.cpp
--- a/main.cpp	Tue Apr 02 11:40:28 2019 +0000
+++ b/main.cpp	Wed Apr 03 11:09:37 2019 +0000
@@ -8,95 +8,120 @@
 #define echo1 D14
 #define trigger2 D12
 #define echo2 D13
+#define trigger3 PC_6
+#define echo3    PC_8
 /******************************/
 //bluetooth
-Serial pc(USBTX, USBRX);//tx e rx
-Servo servo(D9);
-TextLCD lcd(D10,D11,D5,D4,D3,D2);
+Serial pc(USBTX, USBRX);             //istanza oggetto porta seriale
+Servo servo(D9);                     //istanza oggetto servomotore
+TextLCD lcd(D10,D11,D5,D4,D3,D2);    //istanza oggetto schermo
 /******************************/
 //sensori ad ultrasuoni
-HCSR04 sensor1(trigger1, echo1);    
+
+HCSR04 sensor1(trigger1, echo1);     //istanza oggetto sensore a distanza
 HCSR04 sensor2(trigger2, echo2);
-//HCSR04 sensor3(D11, D9);
+HCSR04 sensor3(trigger3, echo3);
 /******************************/
-DigitalIn mybutton(USER_BUTTON);
+DigitalIn mybutton(USER_BUTTON);     //istanza oggetto bottone
 //Thread thread_sensori; // istanzia oggetto thread 
 
-bool occupata[3] = {false,false,false};
+bool occupata[] = { false, false, false }; 
+int numero_parcheggi = 3;
+
+//dichiarazione vettore booleano che indica gli stati del parcheggio 
+/*******************************************************************************************************/
+/* stato del parcheggio :
+   occupata = false; il parcheggio è libero
+   occupata = true; il parcheggio è occupato */
+   
 /******************************/ 
- void button_thread(void const *args){
-     bool sos= false;
-     int angle=0;
-//false== libero
-//true== occupato
-    while(1){
-        if (mybutton==0){
+ void button_thread(void const *args)
+ {
+     bool sos = false;
+     int angle = 0;
+
+     while(1)
+     {
+        if (mybutton == 0)
+        {
            
-                
-            int i=0;
+            int i = 0;
             sos = false;
+            
             do{
-               i++;
-               if(occupata[i]== false){
-                    
-                    pc.printf("il parcheggio numero %d e libero\r\n",i);
-                    lcd.printf("il parcheggio numero %d e libero\r\n",i);
-                    sos=true;
-                    
-                while(1) {
-        servo.write(angle);
-        angle+=10;
-        if(angle>90){
-            wait(3);
-            while(angle != 0 ){
-                servo.write(angle);
-                angle-=10;
-                wait(0.25); 
-                }
-                if(angle==0) break;
-}
-        wait(0.25);
-    }
-              if(occupata[1]==false && occupata[2]==false) break;     // if(occupata[1]==true && occupata[2]==true) //sos = !sos;
+                if (i < numero_parcheggi)    i++;
+                else    break;
+            
+                   if(occupata[i] == false)
+                   {
+                        pc.printf("il parcheggio numero %d e libero\r\n", i);       //stampa quali parcheggi sono liberi
+                        lcd.printf("il parcheggio numero %d e libero\r\n", i);      
+                        sos = true;                                                 //se un parcheggio è libero conseguentemente non possono essere tutti occupati
+                        while(1) 
+                        {
+                            servo.write(angle);                      //non toccare 
+                            angle += 10;
+                            if(angle > 90)
+                            {
+                                wait(3);
+                                while(angle != 0 )
+                                {
+                                    servo.write(angle);
+                                    angle -= 10;
+                                    wait(0.25); 
+                                }
+                           if(angle == 0) break;
+                        }
+                        wait(0.25);
+                    }
+              //if(occupata[1] == false && occupata[2] == false)    break;     // if(occupata[1]==true && occupata[2]==true) //sos = !sos;
                 }/*else if(sos==false && i==2){
                     pc.printf("tutti i parcheggi sono occupati");
                     break;
                     }//else if(occupata[1]==true && occupata[2]==true) pc.printf("tutti i parcheggi sono occupati");
            */
-            }while(i<2);
+            
+        } while(1);                                                       // ciclo infinito, segnalera sempre i parcheggi liberi
            //  if(occupata[1]==true && occupata[2]==true) pc.printf("tutti i parcheggi sono occupati");
-        if(sos==false){
-        pc.printf("tutti i parcheggi sono occupati\r\n");
-        lcd.printf("tutti i parcheggi sono occupati\r\n");
-        }
-
-        }
+            if (sos == false)
+                {
+                    pc.printf("tutti i parcheggi sono occupati\r\n");
+                    lcd.printf("tutti i parcheggi sono occupati\r\n");
+                }
+            else 
+            {
+                 lcd.printf("per riavviare premere l'apposito pulsante");
+                 pc.printf("per riavviare premere l'apposito pulsante");
+            }
+        }//if pulsante
         
            
-    }
-}
+    }//chiusura iterazione del pulsante
+}// chiusura funzione 
 //sensore semaforo 1
 /******************************/
-void sensori(){
+void sensori()
+{
        // float distanza1;
        // float distanza2;
         sensor1.start();
         wait_ms(100);
         sensor2.start();         //partono i sensori 
         wait_ms(100);  
+        sensor3.start();
+        wait_ms(100);
         //distanza1= sensor1.get_dist_cm() ;  
         //distanza2=sensor2.get_dist_cm();
         //pc.printf("%.0fcm\r\n%.0fcm\r\n", distanza1,distanza2);
-        if(sensor1.get_dist_cm() < 10.0 && occupata[1] ==  false)    //se uno dei sensori capta una distanza minore 10
-            occupata[1] = true;
-        else
-            occupata[1] = false;
+        if(sensor1.get_dist_cm() < 10.0 && occupata[0] ==  false)   occupata[1] = true;
+        else    occupata[0] = false;
             
-        if(sensor2.get_dist_cm() < 10.0 && occupata[2] == false)      //se uno dei sensori capta una distanza minore a 10 e gianello è false
-            occupata[2] = true;
-        else
-            occupata[2] = false;
-  }          
+        if(sensor2.get_dist_cm() < 10.0 && occupata[2] == false)    occupata[2] = true;
+        else    occupata[2] = false;
+        
+        if(sensor3.get_dist_cm() < 10.0 && occupata[3] == false)    occupata[3] = true;
+        else    occupata[3] = false;
+}          
 
 int main(){
    // pc.printf("prova");
@@ -104,8 +129,9 @@
        //Thread button_th(button_thread);
        //int i=0;
     
-       Thread button_th(button_thread);
-       while(1){
+        Thread button_th(button_thread);
+        while(1)
+        {
              sensori();
         }
 }