PARCHEGGIO AMICO

Dependencies:   mbed Servo mbed-rtos beep hcsr04 TextLCD

main.cpp

Committer:
altoimperatore
Date:
2019-04-09
Revision:
10:2fd7e922103f
Parent:
9:5be4a23d1e86
Child:
11:97703e714858

File content as of revision 10:2fd7e922103f:

#include "mbed.h"
#include "rtos.h"
#include "hcsr04.h"
#include "beep.h"
#include "TextLCD.h"
#include "Servo.h"
#define trigger1 PC_8 //sensore 1
#define echo1 PC_6
#define trigger2 D12  //sensore 2
#define echo2 D13
#define trigger3 PC_10    //sensore 3
#define echo3    PC_12
#define trigger4   D6  //sensore 4
#define echo4  D8
/******************************/
//bluetooth
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);     //istanza oggetto sensore a distanza
HCSR04 sensor2(trigger2, echo2);
HCSR04 sensor3(trigger3, echo3);
HCSR04 sensor4(trigger4, echo4);
/******************************/
DigitalIn mybutton(D7);     //istanza oggetto bottone
//Thread thread_sensori; // istanzia oggetto thread 

bool occupata[5] = { false, false, false,false, false}; 
int numero_parcheggi = 4;

//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;

     while(1)
     {
        if (mybutton == 0)
        {
           
            int i = 0;
            sos = false;
            
            do{
                if (i < numero_parcheggi)    i++;
                else    break;
            
                   if(occupata[i] == false)
                   {
                        if(sos == false)
                        {
                            
                            pc.printf(" parcheggio %d \r\n", i);       //stampa quali parcheggi sono liberi
                            lcd.cls();   
                            lcd.printf(" parcheggio %d \r\n", i); 
                              
                            sos = true;    
                            break;     
                        }                                        //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(1);   
           
              if(sos == true)
              {
              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);
                }     
            }                                               // 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("parcheggio pieno");
                    lcd.cls();
                    lcd.printf("parcheggio pieno");
    

                }
            /*else 
            {
                 lcd.printf("per riavviare premere l'apposito pulsante");
                 pc.printf("per riavviare premere l'apposito pulsante");
            }*/
        }//if pulsante
        
           
    }
}

/******************************/
void sensori()
{
        /*float distanza1;
        float distanza2;
        float distanza3;*/
        sensor1.start();
        wait_ms(100);
        sensor2.start();         //partono i sensori 
        wait_ms(100);  
        sensor3.start();
        wait_ms(100);
        sensor4.start();
        wait_ms(100);
        bool sos;

        if(sensor1.get_dist_cm() <= 10.0)   occupata[1] = true;
        else    occupata[1] = false;
        
        if(sensor2.get_dist_cm() <= 10.0)    occupata[2] = true;
        else    occupata[2] = false;
        
        if(sensor3.get_dist_cm() <= 10.0)    occupata[3] = true;
        else    occupata[3] = false;
        
        if(sensor4.get_dist_cm() <= 10.0)    occupata[4] = true;
        else    occupata[4] = false; 
}     

int main()
{

        Thread button_th(button_thread);
        
        while(1)
        {
             sensori();
        }
}