![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
RYU HoSeong
Dependencies: HC_SR04_Ultrasonic_Library mbed-rtos mbed-src mbed HCSR04
Fork of Nucleo_UltrasonicHelloWorld by
Diff: main.cpp
- Revision:
- 2:3dcb6f86ed22
- Parent:
- 1:4a5586eb1765
- Child:
- 4:eb5a51640b43
--- a/main.cpp Thu Dec 04 08:04:55 2014 +0000 +++ b/main.cpp Thu Aug 06 12:27:21 2015 +0000 @@ -1,23 +1,106 @@ #include "mbed.h" #include "ultrasonic.h" - void dist(int distance) + +//#define USE_THREAD +#ifdef USE_THREAD +#include "rtos.h" +#endif + +int sum_dist[3] = {0,}; //ryuhs74@20150712 - +int avg_dist = 0; //ryuhs74@20150712 - +int index_dist = 0; //ryuhs74@20150712 - + +Serial pc(USBTX, USBRX); // tx, rx + +#ifdef USE_THREAD +int isRun_thread = 0; +Thread *pThread = NULL; + +void camera_thread( void const* args) +{ + isRun_thread = 1; + + while(isRun_thread){ + //ryuhs74@20150713 START - TEST code + for(int i = 0; i<100;i++){ + wait(1); + } + break; + //ryuhs74@20150713 - TEST code END + } + + if( pThread != NULL ){ + pThread->terminate(); + pThread = NULL; + } + isRun_thread = 0; + return; +} +#endif + +void dist(int distance) { //put code here to happen when the distance is changed - printf("Distance changed to %dmm\r\n", distance); + pc.printf("Distance changed to %d mm\r\n", distance); } +#define TEST_ULTRASONIC +#ifdef TEST_ULTRASONIC ultrasonic mu(D8, D9, .1, 1, &dist); //Set the trigger pin to D8 and the echo pin to D9 - //have updates every .1 seconds and a timeout after 1 - //second, and call dist when the distance changes +//have updates every .1 seconds and a timeout after 1 +//second, and call dist when the distance changes +#endif int main() { + pc.printf("Start ----> \n"); + +#ifdef TEST_ULTRASONIC mu.startUpdates();//start mesuring the distance - while(1) - { +#endif + + while(1) { +#ifdef TEST_ULTRASONIC + pc.printf("Before mu.checkDistance();\n"); //Do something else here mu.checkDistance(); //call checkDistance() as much as possible, as this is where - //the class checks if dist needs to be called. + //the class checks if dist needs to be called. + pc.printf("After mu.checkDistance();\n"); + + //ryuhs74@20150712 START - + if( index_dist < 3){ + pc.printf("Before mu.getCurrentDistance();\n"); + sum_dist[index_dist] = mu.getCurrentDistance(); + pc.printf("sum_dist[index_dist(%d)] = %d\n", index_dist, sum_dist[index_dist]); + index_dist ++; + } else { + pc.printf("Before index_dist( %d ) ", index_dist); + index_dist = 0; + pc.printf("After index_dist( %d )\n", index_dist); + + for(int i =0; i<3;i++){ + avg_dist += sum_dist[i]; + } + + //avg_dist /= avg_dist; + + if( avg_dist <= 1 ){ + #ifdef USE_THREAD + if( isRun_thread == 0 ){ + Thread thread(camera_thread); + + if( pThread == NULL) + pThread = (Thread*)&thread; + + } + #endif + + } + } +#endif + pc.printf("wait(1)\n"); + //ryuhs74@20150712 - END + wait(1); //ryuhs7474@20150713 - 초당 한번씩 딜레이를 준다 } }