programma commando motori
Dependencies: mbed HCSR04 mbed-rtos
Revision 5:f4923705f199, committed 2017-06-13
- Comitter:
- Wonderjack996
- Date:
- Tue Jun 13 09:46:35 2017 +0000
- Parent:
- 4:088a0fad279a
- Commit message:
- sistemati commenti e porzioni di codice
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 088a0fad279a -r f4923705f199 main.cpp --- a/main.cpp Fri Jun 09 10:57:05 2017 +0000 +++ b/main.cpp Tue Jun 13 09:46:35 2017 +0000 @@ -14,11 +14,10 @@ #define NUMBER_CRC 9 //numero utilizzato per controlli nell avanzamento automatico (vedi nella funzione che lo utilizza per spiegazione approfondita) - #define LED_AUTOMATIC PB_2 //attacco led controllo modalita automatica /*---PIN BLUETHOOT---*/ - /*I pin utilizzati per TX e RX sono pin morfo, a livello hardware collegare il pin TX dell HC05 al PA_12 e quello RX a PA_11 ( a livello harware vanno invertiti )*/ + /*I pin utilizzati per TX e RX sono pin morfo, a livello hardware collegare il pin TX dell HC05 al PA_12 e quello RX a PA_11 (a livello harware vanno invertiti rispetto a ciò che è scritto qui nella dichiarazione)*/ #define TX PA_11 #define RX PA_12 /*-------------------*/ @@ -43,7 +42,7 @@ /*---VARIABILI---*/ /*---CONTROLLO MOTORI---*/ - PwmOut motorBpower(PWMB); //oggetti controllo motori + PwmOut motorBpower(PWMB); DigitalOut motorBdirection(DIRB); PwmOut motorApower(PWMA); @@ -51,12 +50,12 @@ /*---------------------*/ /*---CONTROLLO ULTRASUONI---*/ - HCSR04 ultrasuoniAvanti(AVANTI_TRIGGER, AVANTI_ECHO); //istanzio oggetti per utilizzo ultrasuoni + HCSR04 ultrasuoniAvanti(AVANTI_TRIGGER, AVANTI_ECHO); HCSR04 ultrasuoniSinistra(SINISTRA_TRIGGER, SINISTRA_ECHO); HCSR04 ultrasuoniDestra(DESTRA_TRIGGER, DESTRA_ECHO); /*--------------------------*/ - DigitalOut ledAutomatic(LED_AUTOMATIC); //pin in rifermineto al led controllo mod automatica + DigitalOut ledAutomatic(LED_AUTOMATIC); //pin in rifermineto al led controllo modalità automatica Serial pc(USBTX, USBRX); //istanzio oggetto per utilizzo monitor seriale @@ -66,7 +65,7 @@ bool flagAutomatic; //utilizzo per sapere se utilizzare modalita automatica o meno - bool flagStopAvanti; + bool flagStopAvanti; //utilizzo per fermare il robot se riceve da seriale un segnale di stop /*----------------*/ /*---PROTOTIPI---*/ @@ -92,7 +91,7 @@ Thread sirenaThread(check_sirena_thread); // start Thread controllo sirena Thread ctrlStopThread(check_stop_thread); // start Thread controllo fine processo automatico - Thread ctrlStopAvanti(check_stop_avanti); // start Thread controllo fine processo avanzamentofunn + Thread ctrlStopAvanti(check_stop_avanti); // start Thread controllo fine processo avanzamento while(true){ if( device.readable() ) { //funzione simile alla Serial.available() di arduino, solo se il monitor e` attivo permette di utilizzarlo @@ -151,14 +150,17 @@ void automaticProgram() { - int avantiDis, distance; //la variabile direction contiene 0 se il robot deve andare a destra, 1 se deve andare a sinistra + int avantiDis, distance; int distanceDx, distanceSx; fermo(); + /*tutte le strutture di controllo contengono i controllo dei FLAG sirena e automatic in modo che in qualunque momento uno + dei due cambi il robot lo capisca subito*/ + while(flagAutomatic){ //flag modificabile dal thread che aspetta il segnale di stop - while(flagSirena && flagAutomatic){ //il robot si puo' muovere liberamente finche non sente il suono della sirena tipo ambulanza + while(flagSirena && flagAutomatic){ //il robot si puo' muovere liberamente finche non sente il suono della sirena tipo ambulanza oppure non riceve il segnale di stop dall'utente ultrasuoniAvanti.start(); avantiDis = ultrasuoniAvanti.get_dist_cm(); //pc.printf("avanti: %d \r\n",avantiDis); @@ -172,11 +174,11 @@ fermo(); - if( checkFermo() && flagSirena && flagAutomatic ){ - /*funzione utilizzata per leggere un valore attendibile ( nel range dell ultrasuono ). se dopo 100 tentativi - il valore non e' ancora attendibile allora esco dal controllo in modo da non rimanere bloccato*/ + if( checkFermo() && flagSirena && flagAutomatic ){ distanceDx = MAX; distanceSx = MAX; + /*funzione utilizzata per leggere un valore attendibile ( nel range dell ultrasuono ). se dopo 100 tentativi + il valore non e' ancora attendibile allora esco dal controllo in modo da non rimanere bloccato*/ for( int i = 0; i < 100 && ( distanceDx < 2 || distanceDx > 400 ); i++ ){ //questo perche il range dell'ultrasuono usato va da 2 cm a 4 m ( 400 cm ) ultrasuoniDestra.start(); distanceDx = ultrasuoniDestra.get_dist_cm(); @@ -208,7 +210,7 @@ ultrasuoniDestra.start(); distance = ultrasuoniDestra.get_dist_cm(); //pc.printf("sinistra: %d \r\n",sinistraDis); - while( distance >= DISTANCE_CTRL && flagSirena && flagAutomatic ){ //il robot continua la rotazione per evitare l' ostacolo finche l' ultrasuono di destra lo avverte di aver trovato una superficie piana + while( distance >= DISTANCE_CTRL && flagSirena && flagAutomatic ){ //il robot continua la rotazione per evitare l' ostacolo finche l' ultrasuono di destra avverte di aver trovato una superficie piana ultrasuoniDestra.start(); distance = ultrasuoniDestra.get_dist_cm(); //pc.printf("distance: %d \r\n",distance); @@ -221,7 +223,7 @@ ultrasuoniSinistra.start(); distance = ultrasuoniSinistra.get_dist_cm(); //pc.printf("sinistra: %d \r\n",sinistraDis); - while( distance >= DISTANCE_CTRL && flagSirena && flagAutomatic ){ //il robot continua la rotazione per evitare l' ostacolo finche l' ultrasuono di destra lo avverte di aver trovato una superficie piana + while( distance >= DISTANCE_CTRL && flagSirena && flagAutomatic ){ //il robot continua la rotazione per evitare l' ostacolo finche l' ultrasuono di sinistra avverte di aver trovato una superficie piana ultrasuoniSinistra.start(); distance = ultrasuoniSinistra.get_dist_cm(); //pc.printf("distance: %d \r\n",distance); @@ -238,7 +240,7 @@ void check_stop_avanti(void const *args) { /*questo thread ha il compito di attendere che l utente richieda lo stop del mezzo, quando cio avviene il thread setta il flag a - false e interrompe sia se stesso che la funzione avanti*/ + false e interrompe sia se stesso che la funzione avanti (questo thread lavora solo sulla funzione avanti)*/ unsigned char rx; while(true) while( flagStopAvanti ) @@ -251,7 +253,7 @@ void check_stop_thread(void const *args) { - /*thread che controlla se l'utente via dispositivi ha chiesto lo stop del proamma automatico*/ + /*thread che controlla se l'utente via dispositivi ha chiesto lo stop del programma automatico*/ unsigned char rx; while(true) while( flagAutomatic )