Wirelessly controlled robot through Xbee

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

Fork of XBee_read by Alex Louden

Files at this revision

API Documentation at this revision

Comitter:
etorres31
Date:
Fri Nov 04 16:25:35 2016 +0000
Parent:
0:2eaf86314aea
Commit message:
Xbee robot code;

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
Motordriver.lib Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
wave_player.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 2eaf86314aea -r 9ec68db5fe52 4DGL-uLCD-SE.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/4DGL-uLCD-SE.lib	Fri Nov 04 16:25:35 2016 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#e39a44de229a
diff -r 2eaf86314aea -r 9ec68db5fe52 Motordriver.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Motordriver.lib	Fri Nov 04 16:25:35 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/littlexc/code/Motordriver/#3110b9209d3c
diff -r 2eaf86314aea -r 9ec68db5fe52 SDFileSystem.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Fri Nov 04 16:25:35 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/SDFileSystem/#8db0d3b02cec
diff -r 2eaf86314aea -r 9ec68db5fe52 main.cpp
--- 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;
     }
 }
diff -r 2eaf86314aea -r 9ec68db5fe52 mbed-rtos.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Fri Nov 04 16:25:35 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#3da5f554d8bf
diff -r 2eaf86314aea -r 9ec68db5fe52 mbed.bld
--- a/mbed.bld	Fri Jun 04 10:23:38 2010 +0000
+++ b/mbed.bld	Fri Nov 04 16:25:35 2016 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/029aa53d7323
+http://mbed.org/users/mbed_official/code/mbed/builds/9bcdf88f62b0
\ No newline at end of file
diff -r 2eaf86314aea -r 9ec68db5fe52 wave_player.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wave_player.lib	Fri Nov 04 16:25:35 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/sravet/code/wave_player/#acc3e18e77ad