aggiornato con servomotore e display

Dependencies:   mbed Servo mbed-rtos beep hcsr04 TextLCD

main.cpp

Committer:
CiroSamu
Date:
2019-04-02
Revision:
7:8ad50e27d002
Parent:
6:0088253be231

File content as of revision 7:8ad50e27d002:

#include "mbed.h"
#include "rtos.h"
#include "hcsr04.h"
#include "beep.h"
#include "TextLCD.h"
#include "Servo.h"
#define trigger1 D15
#define echo1 D14
#define trigger2 D12
#define echo2 D13
/******************************/
//bluetooth
Serial pc(USBTX, USBRX);//tx e rx
Servo servo(D9);
TextLCD lcd(D10,D11,D5,D4,D3,D2);
/******************************/
//sensori ad ultrasuoni
HCSR04 sensor1(trigger1, echo1);    
HCSR04 sensor2(trigger2, echo2);
//HCSR04 sensor3(D11, D9);
/******************************/
DigitalIn mybutton(USER_BUTTON);
//Thread thread_sensori; // istanzia oggetto thread 

bool occupata[3] = {false,false,false};
/******************************/ 
 void button_thread(void const *args){
     bool sos= false;
     int angle=0;
//false== libero
//true== occupato
    while(1){
        if (mybutton==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;
                }/*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);
           //  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");
        }

        }
        
           
    }
}
//sensore semaforo 1
/******************************/
void sensori(){
       // float distanza1;
       // float distanza2;
        sensor1.start();
        wait_ms(100);
        sensor2.start();         //partono i sensori 
        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(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;
  }          

int main(){
   // pc.printf("prova");
    //while(true) {
       //Thread button_th(button_thread);
       //int i=0;
    
       Thread button_th(button_thread);
       while(1){
             sensori();
        }
}