Wirelessly controlled robot through Xbee

Dependencies:   4DGL-uLCD-SE Motordriver SDFileSystem mbed-rtos mbed wave_player

Fork of XBee_read by Alex Louden

Revision:
1:9ec68db5fe52
Parent:
0:2eaf86314aea
--- a/main.cpp	Fri Jun 04 10:23:38 2010 +0000
+++ b/main.cpp	Fri Nov 04 16:25:35 2016 +0000
@@ -1,15 +1,84 @@
 #include "mbed.h"
-#include "TextLCD.h"
+#include "uLCD_4DGL.h"
+#include "motordriver.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
 
-Serial xbee1(p9, p10);
+uLCD_4DGL uLCD(p28, p27, p30); // serial tx, serial rx, reset pin;
+
+Serial xbee1(p13,p14);
 DigitalOut rst1(p11);
 
 DigitalOut myled(LED1);
 DigitalOut myled2(LED2);
 
-TextLCD lcd(p16, p15, p14, p17, p18, p19, p20); // rs, rw, e, d0, d1, d2, d3
+Motor  left(p21, p22, p23, 1); 
+Motor right(p26, p25, p24, 1);
+
+SDFileSystem sd(p5, p6, p7, p8, "sd");
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+int a = 0;
+int f = 0;
+int b = 0;
+int l = 0;
+int r = 0;
+
+void thread1(void const *args) {
+  while (true) {  
+    while (f >0) {
+        FILE *wave_file;
+        wave_file=fopen("/sd/forward.wav","r");
+        waver.play(wave_file);
+        fclose(wave_file);
+        Thread::wait(100);
+    }
+  }
+}
+
+void thread2(void const *args) {
+  while (true) {  
+    while (b >0) {
+        FILE *wave_file;
+        wave_file=fopen("/sd/backward.wav","r");
+        waver.play(wave_file);
+        fclose(wave_file);
+        Thread::wait(100);
+    }
+  }
+}
+
+void thread3(void const *args) {
+  while (true) {  
+    while (l >0) {
+        FILE *wave_file;
+        wave_file=fopen("/sd/left.wav","r");
+        waver.play(wave_file);
+        fclose(wave_file);
+        Thread::wait(100);
+    }
+  }
+}
+
+void thread4(void const *args) {
+  while (true) {  
+    while (r >0) {
+        FILE *wave_file;
+        wave_file=fopen("/sd/right.wav","r");
+        waver.play(wave_file);
+        fclose(wave_file);
+        Thread::wait(100);
+    }
+  }
+}
 
 int main() {
+    Thread t1(thread1);
+    Thread t2(thread2);
+    Thread t3(thread3);
+    Thread t4(thread4);
+
+    uLCD.display_control(PORTRAIT);
     rst1 = 0;   //Set reset pin to 0
     myled = 0;
     myled2= 0;
@@ -17,27 +86,99 @@
     rst1 = 1;   //Set reset pin to 1
     wait_ms(1);
 
-    lcd.printf("starting");
+    uLCD.printf("starting");
     wait(2);
-    lcd.cls();
+    uLCD.cls();
 
-    int a = 0;
+    
     int prev = 0;
-
-    while (1) {
-
+    float base = 0.1;
+    float lSpeed = 0.0;
+    float rSpeed = 0.0;
+        while (1) {
+        //uLCD.printf("wating");
         if(xbee1.readable()){
+            
             prev = a;
             a = xbee1.getc(); //XBee read
             
+            if (a !=0) {
+            switch(a) {
+                case 1 : //forward
+                  //uLCD.cls();
+                  f++;
+                  lSpeed = f*base*-1;
+                  rSpeed = f*base*-1;
+                  break;
+                case 2 : //reverse
+                  b++;
+                  lSpeed = b*base;
+                  rSpeed = b*base;
+                  break;
+                case 3 : //counter clockwise roation
+                  l++;
+                  lSpeed = l*base*-1;
+                  rSpeed = l*base;
+                  break;
+                case 4 : //clockwise rotation
+                  r++;
+                  lSpeed = r*base;
+                  rSpeed = r*base*-1;
+                  break;
+                case 5 : //stop/reset
+                  f = 0;
+                  b = 0;
+                  l = 0;
+                  r = 0;
+                  lSpeed = 0.0;
+                  rSpeed = 0.0;
+                  break;
+                default :
+                  //left.speed(0.0);
+                  //right.speed(0.0);
+            }
+            }
+            //uLCD.printf("move");
+            left.speed(lSpeed);
+            right.speed(rSpeed);
+            /*if (a == 1) {
+                left.speed(-0.7);
+                right.speed(-0.7);
+                
+                wave_file=fopen("/sd/fire.wav","r");
+                waver.play(wave_file);
+                fclose(wave_file);
+            } else if (a == 2) {
+                left.speed(0.7);
+                right.speed(0.7);
+            } else if (a == 3) {
+                left.speed(-0.7);
+                right.speed(0.7);
+            } else if (a == 4) {
+                left.speed(0.7);
+                right.speed(-0.7);
+            } else if (a == 5) {
+                left.speed(0);
+                right.speed(0); 
+            } */
             if (a != prev){
-                if (a < 10){
-                    lcd.printf("%d", a);
-                }
-                if (a == 254 || a == 253){
-                    lcd.cls();
-                }
+            
+                    uLCD.cls();
+                    //uLCD.text_width(3); //1X size text
+                    //uLCD.text_height(3);
+                    //uLCD.locate(64,64);
+                    //uLCD.printf("%d", a);
+                    uLCD.printf("%f", lSpeed);
+                    uLCD.printf(" ");
+                    uLCD.printf("%d", b);
+                    uLCD.printf(" ");
+                    uLCD.printf("%d", a);
+                    uLCD.printf(" ");
+                    uLCD.printf("%f", rSpeed);
+                
             }
+            
         }
+        a = 0;
     }
 }