1 sensor using RTOS Timer, another 2 over RTOS Semaphore

Dependents:   Autonomous_quadcopter

Fork of HCSR04 by Antoniolinux B.

Files at this revision

API Documentation at this revision

Comitter:
edy05
Date:
Tue May 22 19:35:58 2018 +0000
Parent:
12:6f6469b2f016
Commit message:
Final updates

Changed in this revision

front_back_sensors.h Show annotated file Show diff for this revision Revisions of this file
front_sensor.h Show diff for this revision Revisions of this file
hcsr04.cpp Show annotated file Show diff for this revision Revisions of this file
hcsr04.h Show annotated file Show diff for this revision Revisions of this file
diff -r 6f6469b2f016 -r e9b99635aa2d front_back_sensors.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/front_back_sensors.h	Tue May 22 19:35:58 2018 +0000
@@ -0,0 +1,141 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "hardware.h"
+
+
+void front_sensor(void);
+void back_sensor(void);
+
+void semaphore_thread(void const *name){
+    pc.printf("Starting semaphore thread\n\r");
+    while (true) {
+        _semaphore.wait();
+        //pc.printf("%s\n\r", (const char*)name);
+        if(strstr((const char*)name, "frontSensor") != NULL)
+            front_sensor();    
+        if(strstr((const char*)name, "backSensor") != NULL)
+            back_sensor();    
+        
+        Thread::wait(100);
+        _semaphore.release();
+    }
+
+} 
+
+void front_sensor(){
+    DigitalOut trig(p7);
+    DigitalIn echo(p8);
+    bool tooLong = false;
+    Timer timer;
+    
+    timer.start();
+    trig=1;
+    wait_us(10);
+    trig=0;
+    while(!echo){
+        if(timer.read_us() > 5000)
+            tooLong = true;            
+    }
+    if(tooLong == false){
+        timer.reset();
+        while(echo){
+           if(timer.read_us() > 5000)
+                break;    
+        }
+        _frontDistance = timer.read_us() / 58;
+        //_frontWall = true;
+        //pc.printf("front distance %d \n\n\r", _frontDistance);
+    }
+}
+
+void back_sensor(){
+    DigitalOut trig(p19);
+    DigitalIn echo(p20);
+    bool tooLong = false;
+    Timer timer;
+    
+    //printf("left sensor started \n\r");
+    timer.start();
+    trig=1;
+    wait_us(10);
+    trig=0;
+    while(!echo){
+        if(timer.read_us() > 5000)
+            tooLong = true;            
+    }
+    timer.reset();
+    if(tooLong == false){
+        timer.reset();
+        while(echo){
+           if(timer.read_us() > 5000)
+                break;    
+        }
+        _backDistance = timer.read_us() / 58;
+        //_backWall = true;
+        //pc.printf("                          back distance %d \n\n\r", _backDistance);
+    }
+
+}
+
+/*
+void left_sensor(){
+    DigitalOut trig(p19);
+    DigitalIn echo(p20);
+    bool tooLong = false;
+    Timer timer;
+    //printf("left sensor started \n\r");
+    timer.start();
+    //while(1){
+        trig=1;   //  trigger high
+        //printf("trig\n\r");
+        wait_us(10);
+        //printf("wait\n\r");
+        trig=0;  // trigger low
+        // start pulseIN
+        while(!echo){
+            if(timer.read_us() > 5000)
+                tooLong = true;            
+        }
+        if(tooLong == false){
+            timer.reset();
+            while(echo){
+               if(timer.read_us() > 5000)
+                    break;    
+            }
+            _leftDistance = timer.read_us() / 58;
+            if(_leftDistance <= 30)
+                _leftWall = true;
+            //pc.printf("left distance %d \n\n\r", _leftDistance);
+        }
+        //Thread::wait(100);
+    //}
+    
+}
+
+void right_sensor(){
+    DigitalOut trig(p17);
+    DigitalIn echo(p18);
+    
+    Timer timer;
+    //printf("left sensor started \n\r");
+    timer.start();
+    //while(1){
+        trig=1;   //  trigger high
+        //printf("trig\n\r");
+        wait_us(10);
+        //printf("wait\n\r");
+        trig=0;  // trigger low
+        // start pulseIN
+        while(!echo);
+        timer.reset();
+        while(echo);
+        _rightDistance = timer.read_us() / 58;
+        if(_rightDistance <= 40)
+            _rightWall = true;
+        pc.printf("right distance %d \n\n\r", _rightDistance);
+        
+        //Thread::wait(100);
+    //}
+    
+}
+*/
diff -r 6f6469b2f016 -r e9b99635aa2d front_sensor.h
--- a/front_sensor.h	Tue May 15 10:32:08 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-#include "mbed.h"
-#include "rtos.h"
-#include "hardware.h"
-
-
-void front_sensor(void);
-void left_sensor(void);
-void right_sensor(void);
-void back_sensor(void);
-
-void semaphore_thread(void const *name){
-    pc.printf("Starting semaphore thread\n\r");
-    while (true) {
-        _semaphore.wait();
-        //pc.printf("%s\n\r", (const char*)name);
-        
-        if(strstr((const char*)name, "leftSensor") != NULL)
-            left_sensor();    
-        if(strstr((const char*)name, "frontSensor") != NULL)
-            front_sensor();    
-        if(strstr((const char*)name, "rightSensor") != NULL)
-            right_sensor();    
-        if(strstr((const char*)name, "backSensor") != NULL)
-            back_sensor();    
-        
-        
-        Thread::wait(100);
-        _semaphore.release();
-    }
-
-} 
-
-void front_sensor(){
-    DigitalOut trig(p7);
-    DigitalIn echo(p8);
-    
-    Timer timer;
-    //printf("front sensor started \n\r");
-    timer.start();
-    //while(1){
-        trig=1;   //  trigger high
-        //printf("trig\n\r");
-        wait_us(10);
-        //printf("wait\n\r");
-        trig=0;  // trigger low
-        // start pulseIN
-        while(!echo);
-        timer.reset();
-        while(echo);
-        _frontDistance = timer.read_us() / 58;
-        //printf("front distance %d \n\n\r", _frontDistance);
-        
-        //Thread::wait(100);
-    //}
-        
-    
-}
-
-void left_sensor(){
-    DigitalOut trig(p19);
-    DigitalIn echo(p20);
-    
-    Timer timer;
-    //printf("left sensor started \n\r");
-    timer.start();
-    //while(1){
-        trig=1;   //  trigger high
-        //printf("trig\n\r");
-        wait_us(10);
-        //printf("wait\n\r");
-        trig=0;  // trigger low
-        // start pulseIN
-        while(!echo);
-        timer.reset();
-        while(echo);
-        _leftDistance = timer.read_us() / 58;
-        //pc.printf("left distance %d \n\n\r", _leftDistance);
-        
-        //Thread::wait(100);
-    //}
-    
-}
-
-void right_sensor(){
-    DigitalOut trig(p17);
-    DigitalIn echo(p18);
-    
-    Timer timer;
-    //printf("left sensor started \n\r");
-    timer.start();
-    //while(1){
-        trig=1;   //  trigger high
-        //printf("trig\n\r");
-        wait_us(10);
-        //printf("wait\n\r");
-        trig=0;  // trigger low
-        // start pulseIN
-        while(!echo);
-        timer.reset();
-        while(echo);
-        _rightDistance = timer.read_us() / 58;
-        //pc.printf("left distance %d \n\n\r", _leftDistance);
-        
-        //Thread::wait(100);
-    //}
-    
-}
-
-void back_sensor(){
-    DigitalOut trig(p15);
-    DigitalIn echo(p16);
-    
-    Timer timer;
-    //printf("left sensor started \n\r");
-    timer.start();
-    //while(1){
-        trig=1;   //  trigger high
-        //printf("trig\n\r");
-        wait_us(10);
-        //printf("wait\n\r");
-        trig=0;  // trigger low
-        // start pulseIN
-        while(!echo);
-        timer.reset();
-        while(echo);
-        _backDistance = timer.read_us() / 58;
-        //pc.printf("left distance %d \n\n\r", _leftDistance);
-        
-        //Thread::wait(100);
-    //}
-    
-}
\ No newline at end of file
diff -r 6f6469b2f016 -r e9b99635aa2d hcsr04.cpp
--- a/hcsr04.cpp	Tue May 15 10:32:08 2018 +0000
+++ b/hcsr04.cpp	Tue May 22 19:35:58 2018 +0000
@@ -14,6 +14,9 @@
     threadUpdateTimer1 = new RtosTimer(threadWorker1, osTimerPeriodic, this);
     threadUpdateTimer1->start(rate);
     
+    id = Thread::gettid();
+    printf("down sonic gettid 0x%08X \n\r", id);
+    
     //threadUpdateTimer2 = new RtosTimer(threadWorker2, osTimerPeriodic, this);
     //threadUpdateTimer2->start(rate);
 }
diff -r 6f6469b2f016 -r e9b99635aa2d hcsr04.h
--- a/hcsr04.h	Tue May 15 10:32:08 2018 +0000
+++ b/hcsr04.h	Tue May 22 19:35:58 2018 +0000
@@ -56,11 +56,14 @@
         Timer timerLimit;
         Timer timer2;
         
+        osThreadId id;
+        
         RtosTimer *threadUpdateTimer1;
         RtosTimer *threadUpdateTimer2;
         
         float distan1;
         uint32_t distan2;
+        bool tooLong;
 };
  
 #endif
\ No newline at end of file