PARALLAX sonar threaded

Dependencies:   C12832_lcd Pulse RangeFinder mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
hervel90
Date:
Mon Mar 23 14:58:40 2015 +0000
Revision:
7:cb446dbb54d9
Parent:
3:c92e21f305d8
PARALLAX sonar threaded

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hervel90 7:cb446dbb54d9 1 #include "rtos.h"
emilmont 1:491820ee784d 2 #include "mbed.h"
hervel90 7:cb446dbb54d9 3 #include "C12832_lcd.h"
hervel90 7:cb446dbb54d9 4 #include "RangeFinder.h"
hervel90 7:cb446dbb54d9 5
hervel90 7:cb446dbb54d9 6 // Seeed ultrasound range finder
hervel90 7:cb446dbb54d9 7 RangeFinder rf(p21, 10, 5800.0, 100000);
hervel90 7:cb446dbb54d9 8 BusOut myleds(LED1, LED2, LED3, LED4);
hervel90 7:cb446dbb54d9 9 C12832_LCD lcd;
hervel90 7:cb446dbb54d9 10
hervel90 7:cb446dbb54d9 11 float sonar_data;
hervel90 7:cb446dbb54d9 12
hervel90 7:cb446dbb54d9 13
hervel90 7:cb446dbb54d9 14 void lcd_display(void const *args) {
emilmont 1:491820ee784d 15 while (true) {
hervel90 7:cb446dbb54d9 16 lcd.locate(0,0);
hervel90 7:cb446dbb54d9 17 if (sonar_data == -1.0) {
hervel90 7:cb446dbb54d9 18 lcd.printf("Timeout Error.\n");
hervel90 7:cb446dbb54d9 19 } else if (sonar_data > 5.0) {
hervel90 7:cb446dbb54d9 20 lcd.printf("No object within detection range.\n");
hervel90 7:cb446dbb54d9 21 } else {
hervel90 7:cb446dbb54d9 22 lcd.printf("Distance = %f m.\n", sonar_data);
hervel90 7:cb446dbb54d9 23 }
hervel90 7:cb446dbb54d9 24 Thread::wait(250);
emilmont 1:491820ee784d 25 }
emilmont 1:491820ee784d 26 }
hervel90 7:cb446dbb54d9 27
hervel90 7:cb446dbb54d9 28 void led_display(void const *args) {
hervel90 7:cb446dbb54d9 29 while (true) {
hervel90 7:cb446dbb54d9 30 float led_m = 0.790474;
hervel90 7:cb446dbb54d9 31 if (sonar_data <= led_m)
hervel90 7:cb446dbb54d9 32 {
hervel90 7:cb446dbb54d9 33 myleds = 15;
hervel90 7:cb446dbb54d9 34 }
hervel90 7:cb446dbb54d9 35 else if (sonar_data > led_m && sonar_data <= 2*led_m )
hervel90 7:cb446dbb54d9 36 {
hervel90 7:cb446dbb54d9 37 myleds = 7;
hervel90 7:cb446dbb54d9 38 }
hervel90 7:cb446dbb54d9 39 else if (sonar_data > 2*led_m && sonar_data <= 3*led_m )
hervel90 7:cb446dbb54d9 40 {
hervel90 7:cb446dbb54d9 41 myleds = 3;
hervel90 7:cb446dbb54d9 42 }
hervel90 7:cb446dbb54d9 43 else
hervel90 7:cb446dbb54d9 44 {
hervel90 7:cb446dbb54d9 45 myleds = 1;
hervel90 7:cb446dbb54d9 46 }
emilmont 1:491820ee784d 47
hervel90 7:cb446dbb54d9 48 Thread::wait(250);
emilmont 1:491820ee784d 49 }
emilmont 1:491820ee784d 50 }
hervel90 7:cb446dbb54d9 51
hervel90 7:cb446dbb54d9 52 void serial_display(void const *args) {
hervel90 7:cb446dbb54d9 53 while (true) {
hervel90 7:cb446dbb54d9 54 lcd.locate(0,0);
hervel90 7:cb446dbb54d9 55 if (sonar_data == -1.0) {
hervel90 7:cb446dbb54d9 56 printf("Timeout Error.\n");
hervel90 7:cb446dbb54d9 57 } else if (sonar_data > 5.0) {
hervel90 7:cb446dbb54d9 58 printf("No object within detection range.\n");
hervel90 7:cb446dbb54d9 59 } else {
hervel90 7:cb446dbb54d9 60 printf("Distance = %f m.\n", sonar_data);
hervel90 7:cb446dbb54d9 61 }
hervel90 7:cb446dbb54d9 62 Thread::wait(250);
hervel90 7:cb446dbb54d9 63 }
hervel90 7:cb446dbb54d9 64 }
hervel90 7:cb446dbb54d9 65
hervel90 7:cb446dbb54d9 66
hervel90 7:cb446dbb54d9 67 int main() {
hervel90 7:cb446dbb54d9 68 lcd.cls();
hervel90 7:cb446dbb54d9 69
hervel90 7:cb446dbb54d9 70 Thread thread1(led_display);
hervel90 7:cb446dbb54d9 71 Thread thread2(lcd_display);
hervel90 7:cb446dbb54d9 72 Thread thread3(serial_display);
hervel90 7:cb446dbb54d9 73
hervel90 7:cb446dbb54d9 74 while (1) {
hervel90 7:cb446dbb54d9 75 sonar_data = rf.read_m();
hervel90 7:cb446dbb54d9 76 Thread::wait(250);
hervel90 7:cb446dbb54d9 77 }
hervel90 7:cb446dbb54d9 78 }