Lavoro terminato

Dependencies:   mbed Servo mbed-rtos beep hcsr04 TextLCD

Committer:
altoimperatore
Date:
Tue Apr 09 09:56:34 2019 +0000
Revision:
10:2fd7e922103f
Parent:
9:5be4a23d1e86
Lavoro terminato

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