programma commando motori

Dependencies:   mbed HCSR04 mbed-rtos

Revision:
5:f4923705f199
Parent:
4:088a0fad279a
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 )