da completare (non funzionante)

Dependencies:   mbed Servo mbed-rtos beep hcsr04 TextLCD

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