programma steve 22-05

Dependencies:   HCSR04 mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
Wonderjack996
Date:
Tue May 23 06:49:48 2017 +0000
Commit message:
programma steve 22-05

Changed in this revision

HCSR04.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d8dd32751c38 HCSR04.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HCSR04.lib	Tue May 23 06:49:48 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/prabhuvd/code/HCSR04/#71da0dbf4400
diff -r 000000000000 -r d8dd32751c38 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 23 06:49:48 2017 +0000
@@ -0,0 +1,159 @@
+/*---LIBRERIE---*/
+#include "mbed.h"
+#include "rtos.h"
+#include "hcsr04.h"
+/*--------------*/
+
+/*---COSTANTI---*/
+#define PWMB PC_7  //D9
+#define DIRB D8    //D8
+
+#define PWMA PB_4  //D5
+#define DIRA D4    //D4
+
+#define avantiTrigger PA_5  //D13
+#define avantiEcho PA_6     //D12
+#define sinistraTrigger PA_8  //D7
+#define sinistraEcho PB_10    //D6
+/*--------------*/
+
+/*---VARIABILI GLOBALI---*/
+PwmOut motorApower(PWMA); //istanzio oggetto per controllo motore A ( vedi scheda per capire quale sia )
+DigitalOut motorAdirection(DIRA);
+
+PwmOut motorBpower(PWMB); //istanzio oggetto per controllo motore B ( vedi scheda per capire quale sia )
+DigitalOut motorBdirection(DIRB);
+
+HCSR04 ultrasuoniAvanti(avantiTrigger, avantiEcho); //istanzio oggetti per controllo ultrasuoni
+HCSR04 ultrasuoniSinistra(sinistraTrigger, sinistraEcho); 
+
+Serial pc(USBTX, USBRX); //istanzio oggetto per utilizzo monitor seriale
+
+int distanceCtrl = 10; /*decido una distanza, in cm, per i vari controlli dell' ultrasuono, esempio utilizzo come valore
+                         per capire quando la macchina si deve fermare*/
+                         
+bool flagSirena = true;
+/*-----------------------*/
+
+
+/*---PROTOTIPI DELLE FUNZIONI---*/
+void avanti();
+void indietro();
+void destra();
+void sinistra();
+void fermo();
+bool checkFermo();
+void check_sirena_thread(void const *args);
+/*-------------------------------*/
+
+int main() {
+    
+    int avantiDis, sinistraDis;
+    
+    Thread sirenaThread(check_sirena_thread); // start Thread controllo sirena
+    
+    motorBpower.period_ms(10); //setto periodo per impulsi da inviare ai motori ( consiglio di non variare )
+    motorApower.period_ms(10);
+    
+    fermo();
+    
+    while(true){ //utilizzo per mandare in loop la funzione principale ( main tipo )
+        while(flagSirena){ //il robot si puo' muovere liberamente finche non sente il suono della sirena tipo ambulanza
+            ultrasuoniAvanti.start();
+            avantiDis = ultrasuoniAvanti.get_dist_cm();
+            //pc.printf("avanti: %d \r\n",avantiDis);
+            while( avantiDis >= distanceCtrl && flagSirena ){ //finche il valore letto dall' ultrasuono e' maggiore della distanza di urto la macchina puo' procedere
+                avanti();
+                ultrasuoniAvanti.start();
+                avantiDis = ultrasuoniAvanti.get_dist_cm();
+                //pc.printf("avanti: %d \r\n",avantiDis);
+                wait_ms(10);
+            }
+            
+            fermo();
+            
+            if( checkFermo() ){
+                destra();
+                wait_ms(1000);
+                
+                ultrasuoniSinistra.start();
+                sinistraDis = ultrasuoniSinistra.get_dist_cm();
+                //pc.printf("sinistra: %d \r\n",sinistraDis);
+                while(sinistraDis >= distanceCtrl && flagSirena ){ //il robot continua la rotazione per evitare l' ostacolo finche l' ultrasuono di destra lo avverte di aver trovato una superficie piana
+                    ultrasuoniSinistra.start();
+                    sinistraDis = ultrasuoniSinistra.get_dist_cm();
+                    //pc.printf("sinistra: %d \r\n",sinistraDis);
+                }
+                wait_ms(200);
+                
+                fermo();
+            }
+        }
+    }
+    
+}
+
+void check_sirena_thread(void const *args) {
+    /*thread che controlla sempre il pin dedicato alla sirena, se il pin diventa alto comunica il cambiamento 
+    con un flag al main che si adatta alla situazione*/
+    //DigitalIn in(D3);
+    while(true){
+        //int val = in.read();
+    } 
+}
+
+bool checkFermo()
+{
+    /*funzione utilizzata per evitare che disturbi dell ultrasuono vengano presi in considerazione come valori utili
+    La funzione controlla per un TOT volte se il valore e' attendibile e in caso positivo ritorna TRUE*/
+    bool ret = true;
+    int avantiDis, ctrl = 50;
+    for(int i = 0; i < ctrl; i++){
+        ultrasuoniAvanti.start();
+        avantiDis = ultrasuoniAvanti.get_dist_cm();
+        if( avantiDis >= distanceCtrl ){
+            ret = false;
+            break;
+        }
+        wait_ms(10);
+    }
+    return ret;
+}
+
+void avanti()
+{
+    motorBdirection = 1; 
+    motorAdirection = 0;
+    motorBpower.pulsewidth(0.01); // 100%
+    motorApower.pulsewidth(0.01); // 100%
+}
+
+void indietro()
+{
+    motorBdirection = 0; 
+    motorAdirection = 1;
+    motorBpower.pulsewidth(0.01); // 100%
+    motorApower.pulsewidth(0.01); // 100%
+}
+
+void destra()
+{
+    motorBdirection = 0; 
+    motorAdirection = 0;
+    motorBpower.pulsewidth(0.01); // 100%
+    motorApower.pulsewidth(0.007); // 70%
+}
+
+void sinistra()
+{
+    motorBdirection = 1; 
+    motorAdirection = 1;
+    motorBpower.pulsewidth(0.007); // 100%
+    motorApower.pulsewidth(0.01); // 100%
+}
+
+void fermo()
+{
+    motorBpower.pulsewidth(0); // fermo
+    motorApower.pulsewidth(0); // fermo
+}
diff -r 000000000000 -r d8dd32751c38 mbed-rtos.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Tue May 23 06:49:48 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed-rtos/#58563e6cba1e
diff -r 000000000000 -r d8dd32751c38 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue May 23 06:49:48 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/093f2bd7b9eb
\ No newline at end of file