RYU HoSeong

Dependencies:   HC_SR04_Ultrasonic_Library mbed-rtos mbed-src mbed HCSR04

Fork of Nucleo_UltrasonicHelloWorld by EJ Teb

Committer:
ryuhs74
Date:
Thu Aug 06 12:27:21 2015 +0000
Revision:
2:3dcb6f86ed22
Parent:
1:4a5586eb1765
Child:
4:eb5a51640b43
RYU HoSeong

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ejteb 0:1704ea055c4f 1 #include "mbed.h"
ejteb 0:1704ea055c4f 2 #include "ultrasonic.h"
ejteb 0:1704ea055c4f 3
ryuhs74 2:3dcb6f86ed22 4
ryuhs74 2:3dcb6f86ed22 5 //#define USE_THREAD
ryuhs74 2:3dcb6f86ed22 6 #ifdef USE_THREAD
ryuhs74 2:3dcb6f86ed22 7 #include "rtos.h"
ryuhs74 2:3dcb6f86ed22 8 #endif
ryuhs74 2:3dcb6f86ed22 9
ryuhs74 2:3dcb6f86ed22 10 int sum_dist[3] = {0,}; //ryuhs74@20150712 -
ryuhs74 2:3dcb6f86ed22 11 int avg_dist = 0; //ryuhs74@20150712 -
ryuhs74 2:3dcb6f86ed22 12 int index_dist = 0; //ryuhs74@20150712 -
ryuhs74 2:3dcb6f86ed22 13
ryuhs74 2:3dcb6f86ed22 14 Serial pc(USBTX, USBRX); // tx, rx
ryuhs74 2:3dcb6f86ed22 15
ryuhs74 2:3dcb6f86ed22 16 #ifdef USE_THREAD
ryuhs74 2:3dcb6f86ed22 17 int isRun_thread = 0;
ryuhs74 2:3dcb6f86ed22 18 Thread *pThread = NULL;
ryuhs74 2:3dcb6f86ed22 19
ryuhs74 2:3dcb6f86ed22 20 void camera_thread( void const* args)
ryuhs74 2:3dcb6f86ed22 21 {
ryuhs74 2:3dcb6f86ed22 22 isRun_thread = 1;
ryuhs74 2:3dcb6f86ed22 23
ryuhs74 2:3dcb6f86ed22 24 while(isRun_thread){
ryuhs74 2:3dcb6f86ed22 25 //ryuhs74@20150713 START - TEST code
ryuhs74 2:3dcb6f86ed22 26 for(int i = 0; i<100;i++){
ryuhs74 2:3dcb6f86ed22 27 wait(1);
ryuhs74 2:3dcb6f86ed22 28 }
ryuhs74 2:3dcb6f86ed22 29 break;
ryuhs74 2:3dcb6f86ed22 30 //ryuhs74@20150713 - TEST code END
ryuhs74 2:3dcb6f86ed22 31 }
ryuhs74 2:3dcb6f86ed22 32
ryuhs74 2:3dcb6f86ed22 33 if( pThread != NULL ){
ryuhs74 2:3dcb6f86ed22 34 pThread->terminate();
ryuhs74 2:3dcb6f86ed22 35 pThread = NULL;
ryuhs74 2:3dcb6f86ed22 36 }
ryuhs74 2:3dcb6f86ed22 37 isRun_thread = 0;
ryuhs74 2:3dcb6f86ed22 38 return;
ryuhs74 2:3dcb6f86ed22 39 }
ryuhs74 2:3dcb6f86ed22 40 #endif
ryuhs74 2:3dcb6f86ed22 41
ryuhs74 2:3dcb6f86ed22 42 void dist(int distance)
ejteb 0:1704ea055c4f 43 {
ejteb 1:4a5586eb1765 44 //put code here to happen when the distance is changed
ryuhs74 2:3dcb6f86ed22 45 pc.printf("Distance changed to %d mm\r\n", distance);
ejteb 0:1704ea055c4f 46 }
ejteb 0:1704ea055c4f 47
ryuhs74 2:3dcb6f86ed22 48 #define TEST_ULTRASONIC
ryuhs74 2:3dcb6f86ed22 49 #ifdef TEST_ULTRASONIC
ejteb 1:4a5586eb1765 50 ultrasonic mu(D8, D9, .1, 1, &dist); //Set the trigger pin to D8 and the echo pin to D9
ryuhs74 2:3dcb6f86ed22 51 //have updates every .1 seconds and a timeout after 1
ryuhs74 2:3dcb6f86ed22 52 //second, and call dist when the distance changes
ryuhs74 2:3dcb6f86ed22 53 #endif
ejteb 0:1704ea055c4f 54
ejteb 0:1704ea055c4f 55 int main()
ejteb 0:1704ea055c4f 56 {
ryuhs74 2:3dcb6f86ed22 57 pc.printf("Start ----> \n");
ryuhs74 2:3dcb6f86ed22 58
ryuhs74 2:3dcb6f86ed22 59 #ifdef TEST_ULTRASONIC
ejteb 1:4a5586eb1765 60 mu.startUpdates();//start mesuring the distance
ryuhs74 2:3dcb6f86ed22 61 #endif
ryuhs74 2:3dcb6f86ed22 62
ryuhs74 2:3dcb6f86ed22 63 while(1) {
ryuhs74 2:3dcb6f86ed22 64 #ifdef TEST_ULTRASONIC
ryuhs74 2:3dcb6f86ed22 65 pc.printf("Before mu.checkDistance();\n");
ejteb 1:4a5586eb1765 66 //Do something else here
ejteb 1:4a5586eb1765 67 mu.checkDistance(); //call checkDistance() as much as possible, as this is where
ryuhs74 2:3dcb6f86ed22 68 //the class checks if dist needs to be called.
ryuhs74 2:3dcb6f86ed22 69 pc.printf("After mu.checkDistance();\n");
ryuhs74 2:3dcb6f86ed22 70
ryuhs74 2:3dcb6f86ed22 71 //ryuhs74@20150712 START -
ryuhs74 2:3dcb6f86ed22 72 if( index_dist < 3){
ryuhs74 2:3dcb6f86ed22 73 pc.printf("Before mu.getCurrentDistance();\n");
ryuhs74 2:3dcb6f86ed22 74 sum_dist[index_dist] = mu.getCurrentDistance();
ryuhs74 2:3dcb6f86ed22 75 pc.printf("sum_dist[index_dist(%d)] = %d\n", index_dist, sum_dist[index_dist]);
ryuhs74 2:3dcb6f86ed22 76 index_dist ++;
ryuhs74 2:3dcb6f86ed22 77 } else {
ryuhs74 2:3dcb6f86ed22 78 pc.printf("Before index_dist( %d ) ", index_dist);
ryuhs74 2:3dcb6f86ed22 79 index_dist = 0;
ryuhs74 2:3dcb6f86ed22 80 pc.printf("After index_dist( %d )\n", index_dist);
ryuhs74 2:3dcb6f86ed22 81
ryuhs74 2:3dcb6f86ed22 82 for(int i =0; i<3;i++){
ryuhs74 2:3dcb6f86ed22 83 avg_dist += sum_dist[i];
ryuhs74 2:3dcb6f86ed22 84 }
ryuhs74 2:3dcb6f86ed22 85
ryuhs74 2:3dcb6f86ed22 86 //avg_dist /= avg_dist;
ryuhs74 2:3dcb6f86ed22 87
ryuhs74 2:3dcb6f86ed22 88 if( avg_dist <= 1 ){
ryuhs74 2:3dcb6f86ed22 89 #ifdef USE_THREAD
ryuhs74 2:3dcb6f86ed22 90 if( isRun_thread == 0 ){
ryuhs74 2:3dcb6f86ed22 91 Thread thread(camera_thread);
ryuhs74 2:3dcb6f86ed22 92
ryuhs74 2:3dcb6f86ed22 93 if( pThread == NULL)
ryuhs74 2:3dcb6f86ed22 94 pThread = (Thread*)&thread;
ryuhs74 2:3dcb6f86ed22 95
ryuhs74 2:3dcb6f86ed22 96 }
ryuhs74 2:3dcb6f86ed22 97 #endif
ryuhs74 2:3dcb6f86ed22 98
ryuhs74 2:3dcb6f86ed22 99 }
ryuhs74 2:3dcb6f86ed22 100 }
ryuhs74 2:3dcb6f86ed22 101 #endif
ryuhs74 2:3dcb6f86ed22 102 pc.printf("wait(1)\n");
ryuhs74 2:3dcb6f86ed22 103 //ryuhs74@20150712 - END
ryuhs74 2:3dcb6f86ed22 104 wait(1); //ryuhs7474@20150713 - 초당 한번씩 딜레이를 준다
ejteb 0:1704ea055c4f 105 }
ejteb 0:1704ea055c4f 106 }