progetto11

Dependencies:   mbed Servo mbed-rtos beep hcsr04 TextLCD

Committer:
altoimperatore
Date:
Wed Apr 03 11:09:37 2019 +0000
Revision:
8:5fc14e646e91
Parent:
7:8ad50e27d002
Child:
9:5be4a23d1e86
prog

Who changed what in which revision?

UserRevisionLine numberNew contents of line
huntR 0:650a24681467 1 #include "mbed.h"
huntR 0:650a24681467 2 #include "rtos.h"
huntR 0:650a24681467 3 #include "hcsr04.h"
huntR 0:650a24681467 4 #include "beep.h"
CiroSamu 7:8ad50e27d002 5 #include "TextLCD.h"
CiroSamu 7:8ad50e27d002 6 #include "Servo.h"
CiroSamu 4:48754f3702d7 7 #define trigger1 D15
CiroSamu 4:48754f3702d7 8 #define echo1 D14
CiroSamu 4:48754f3702d7 9 #define trigger2 D12
CiroSamu 4:48754f3702d7 10 #define echo2 D13
altoimperatore 8:5fc14e646e91 11 #define trigger3 PC_6
altoimperatore 8:5fc14e646e91 12 #define echo3 PC_8
huntR 0:650a24681467 13 /******************************/
huntR 0:650a24681467 14 //bluetooth
altoimperatore 8:5fc14e646e91 15 Serial pc(USBTX, USBRX); //istanza oggetto porta seriale
altoimperatore 8:5fc14e646e91 16 Servo servo(D9); //istanza oggetto servomotore
altoimperatore 8:5fc14e646e91 17 TextLCD lcd(D10,D11,D5,D4,D3,D2); //istanza oggetto schermo
huntR 0:650a24681467 18 /******************************/
huntR 0:650a24681467 19 //sensori ad ultrasuoni
altoimperatore 8:5fc14e646e91 20
altoimperatore 8:5fc14e646e91 21 HCSR04 sensor1(trigger1, echo1); //istanza oggetto sensore a distanza
CiroSamu 4:48754f3702d7 22 HCSR04 sensor2(trigger2, echo2);
altoimperatore 8:5fc14e646e91 23 HCSR04 sensor3(trigger3, echo3);
huntR 0:650a24681467 24 /******************************/
altoimperatore 8:5fc14e646e91 25 DigitalIn mybutton(USER_BUTTON); //istanza oggetto bottone
CiroSamu 5:8eb27286a3e3 26 //Thread thread_sensori; // istanzia oggetto thread
altoimperatore 1:13556d8b4a34 27
altoimperatore 8:5fc14e646e91 28 bool occupata[] = { false, false, false };
altoimperatore 8:5fc14e646e91 29 int numero_parcheggi = 3;
altoimperatore 8:5fc14e646e91 30
altoimperatore 8:5fc14e646e91 31 //dichiarazione vettore booleano che indica gli stati del parcheggio
altoimperatore 8:5fc14e646e91 32 /*******************************************************************************************************/
altoimperatore 8:5fc14e646e91 33 /* stato del parcheggio :
altoimperatore 8:5fc14e646e91 34 occupata = false; il parcheggio è libero
altoimperatore 8:5fc14e646e91 35 occupata = true; il parcheggio è occupato */
altoimperatore 8:5fc14e646e91 36
huntR 0:650a24681467 37 /******************************/
altoimperatore 8:5fc14e646e91 38 void button_thread(void const *args)
altoimperatore 8:5fc14e646e91 39 {
altoimperatore 8:5fc14e646e91 40 bool sos = false;
altoimperatore 8:5fc14e646e91 41 int angle = 0;
altoimperatore 8:5fc14e646e91 42
altoimperatore 8:5fc14e646e91 43 while(1)
altoimperatore 8:5fc14e646e91 44 {
altoimperatore 8:5fc14e646e91 45 if (mybutton == 0)
altoimperatore 8:5fc14e646e91 46 {
CiroSamu 6:0088253be231 47
altoimperatore 8:5fc14e646e91 48 int i = 0;
CiroSamu 6:0088253be231 49 sos = false;
altoimperatore 8:5fc14e646e91 50
CiroSamu 5:8eb27286a3e3 51 do{
altoimperatore 8:5fc14e646e91 52 if (i < numero_parcheggi) i++;
altoimperatore 8:5fc14e646e91 53 else break;
altoimperatore 8:5fc14e646e91 54
altoimperatore 8:5fc14e646e91 55 if(occupata[i] == false)
altoimperatore 8:5fc14e646e91 56 {
altoimperatore 8:5fc14e646e91 57 pc.printf("il parcheggio numero %d e libero\r\n", i); //stampa quali parcheggi sono liberi
altoimperatore 8:5fc14e646e91 58 lcd.printf("il parcheggio numero %d e libero\r\n", i);
altoimperatore 8:5fc14e646e91 59 sos = true; //se un parcheggio è libero conseguentemente non possono essere tutti occupati
altoimperatore 8:5fc14e646e91 60 while(1)
altoimperatore 8:5fc14e646e91 61 {
altoimperatore 8:5fc14e646e91 62 servo.write(angle); //non toccare
altoimperatore 8:5fc14e646e91 63 angle += 10;
altoimperatore 8:5fc14e646e91 64 if(angle > 90)
altoimperatore 8:5fc14e646e91 65 {
altoimperatore 8:5fc14e646e91 66 wait(3);
altoimperatore 8:5fc14e646e91 67 while(angle != 0 )
altoimperatore 8:5fc14e646e91 68 {
altoimperatore 8:5fc14e646e91 69 servo.write(angle);
altoimperatore 8:5fc14e646e91 70 angle -= 10;
altoimperatore 8:5fc14e646e91 71 wait(0.25);
altoimperatore 8:5fc14e646e91 72 }
altoimperatore 8:5fc14e646e91 73 if(angle == 0) break;
altoimperatore 8:5fc14e646e91 74 }
altoimperatore 8:5fc14e646e91 75 wait(0.25);
altoimperatore 8:5fc14e646e91 76 }
altoimperatore 8:5fc14e646e91 77 //if(occupata[1] == false && occupata[2] == false) break; // if(occupata[1]==true && occupata[2]==true) //sos = !sos;
CiroSamu 6:0088253be231 78 }/*else if(sos==false && i==2){
CiroSamu 6:0088253be231 79 pc.printf("tutti i parcheggi sono occupati");
CiroSamu 6:0088253be231 80 break;
CiroSamu 6:0088253be231 81 }//else if(occupata[1]==true && occupata[2]==true) pc.printf("tutti i parcheggi sono occupati");
CiroSamu 6:0088253be231 82 */
altoimperatore 8:5fc14e646e91 83
altoimperatore 8:5fc14e646e91 84 } while(1); // ciclo infinito, segnalera sempre i parcheggi liberi
CiroSamu 6:0088253be231 85 // if(occupata[1]==true && occupata[2]==true) pc.printf("tutti i parcheggi sono occupati");
altoimperatore 8:5fc14e646e91 86 if (sos == false)
altoimperatore 8:5fc14e646e91 87 {
altoimperatore 8:5fc14e646e91 88 pc.printf("tutti i parcheggi sono occupati\r\n");
altoimperatore 8:5fc14e646e91 89 lcd.printf("tutti i parcheggi sono occupati\r\n");
altoimperatore 8:5fc14e646e91 90 }
altoimperatore 8:5fc14e646e91 91 else
altoimperatore 8:5fc14e646e91 92 {
altoimperatore 8:5fc14e646e91 93 lcd.printf("per riavviare premere l'apposito pulsante");
altoimperatore 8:5fc14e646e91 94 pc.printf("per riavviare premere l'apposito pulsante");
altoimperatore 8:5fc14e646e91 95 }
altoimperatore 8:5fc14e646e91 96 }//if pulsante
CiroSamu 4:48754f3702d7 97
CiroSamu 4:48754f3702d7 98
altoimperatore 8:5fc14e646e91 99 }//chiusura iterazione del pulsante
altoimperatore 8:5fc14e646e91 100 }// chiusura funzione
huntR 0:650a24681467 101 //sensore semaforo 1
huntR 0:650a24681467 102 /******************************/
altoimperatore 8:5fc14e646e91 103 void sensori()
altoimperatore 8:5fc14e646e91 104 {
CiroSamu 7:8ad50e27d002 105 // float distanza1;
CiroSamu 7:8ad50e27d002 106 // float distanza2;
huntR 0:650a24681467 107 sensor1.start();
huntR 0:650a24681467 108 wait_ms(100);
CiroSamu 5:8eb27286a3e3 109 sensor2.start(); //partono i sensori
CiroSamu 5:8eb27286a3e3 110 wait_ms(100);
altoimperatore 8:5fc14e646e91 111 sensor3.start();
altoimperatore 8:5fc14e646e91 112 wait_ms(100);
CiroSamu 7:8ad50e27d002 113 //distanza1= sensor1.get_dist_cm() ;
CiroSamu 7:8ad50e27d002 114 //distanza2=sensor2.get_dist_cm();
CiroSamu 6:0088253be231 115 //pc.printf("%.0fcm\r\n%.0fcm\r\n", distanza1,distanza2);
altoimperatore 8:5fc14e646e91 116 if(sensor1.get_dist_cm() < 10.0 && occupata[0] == false) occupata[1] = true;
altoimperatore 8:5fc14e646e91 117 else occupata[0] = false;
CiroSamu 5:8eb27286a3e3 118
altoimperatore 8:5fc14e646e91 119 if(sensor2.get_dist_cm() < 10.0 && occupata[2] == false) occupata[2] = true;
altoimperatore 8:5fc14e646e91 120 else occupata[2] = false;
altoimperatore 8:5fc14e646e91 121
altoimperatore 8:5fc14e646e91 122 if(sensor3.get_dist_cm() < 10.0 && occupata[3] == false) occupata[3] = true;
altoimperatore 8:5fc14e646e91 123 else occupata[3] = false;
altoimperatore 8:5fc14e646e91 124 }
altoimperatore 1:13556d8b4a34 125
huntR 0:650a24681467 126 int main(){
CiroSamu 4:48754f3702d7 127 // pc.printf("prova");
altoimperatore 3:272fb57c7fcb 128 //while(true) {
CiroSamu 4:48754f3702d7 129 //Thread button_th(button_thread);
CiroSamu 5:8eb27286a3e3 130 //int i=0;
CiroSamu 5:8eb27286a3e3 131
altoimperatore 8:5fc14e646e91 132 Thread button_th(button_thread);
altoimperatore 8:5fc14e646e91 133 while(1)
altoimperatore 8:5fc14e646e91 134 {
CiroSamu 5:8eb27286a3e3 135 sensori();
CiroSamu 5:8eb27286a3e3 136 }
CiroSamu 5:8eb27286a3e3 137 }
CiroSamu 2:33e2a092cab6 138