Wirelessly controlled robot through Xbee

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

Fork of XBee_read by Alex Louden

Committer:
etorres31
Date:
Fri Nov 04 16:25:35 2016 +0000
Revision:
1:9ec68db5fe52
Parent:
0:2eaf86314aea
Xbee robot code;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alex89 0:2eaf86314aea 1 #include "mbed.h"
etorres31 1:9ec68db5fe52 2 #include "uLCD_4DGL.h"
etorres31 1:9ec68db5fe52 3 #include "motordriver.h"
etorres31 1:9ec68db5fe52 4 #include "SDFileSystem.h"
etorres31 1:9ec68db5fe52 5 #include "wave_player.h"
alex89 0:2eaf86314aea 6
etorres31 1:9ec68db5fe52 7 uLCD_4DGL uLCD(p28, p27, p30); // serial tx, serial rx, reset pin;
etorres31 1:9ec68db5fe52 8
etorres31 1:9ec68db5fe52 9 Serial xbee1(p13,p14);
alex89 0:2eaf86314aea 10 DigitalOut rst1(p11);
alex89 0:2eaf86314aea 11
alex89 0:2eaf86314aea 12 DigitalOut myled(LED1);
alex89 0:2eaf86314aea 13 DigitalOut myled2(LED2);
alex89 0:2eaf86314aea 14
etorres31 1:9ec68db5fe52 15 Motor left(p21, p22, p23, 1);
etorres31 1:9ec68db5fe52 16 Motor right(p26, p25, p24, 1);
etorres31 1:9ec68db5fe52 17
etorres31 1:9ec68db5fe52 18 SDFileSystem sd(p5, p6, p7, p8, "sd");
etorres31 1:9ec68db5fe52 19 AnalogOut DACout(p18);
etorres31 1:9ec68db5fe52 20 wave_player waver(&DACout);
etorres31 1:9ec68db5fe52 21 int a = 0;
etorres31 1:9ec68db5fe52 22 int f = 0;
etorres31 1:9ec68db5fe52 23 int b = 0;
etorres31 1:9ec68db5fe52 24 int l = 0;
etorres31 1:9ec68db5fe52 25 int r = 0;
etorres31 1:9ec68db5fe52 26
etorres31 1:9ec68db5fe52 27 void thread1(void const *args) {
etorres31 1:9ec68db5fe52 28 while (true) {
etorres31 1:9ec68db5fe52 29 while (f >0) {
etorres31 1:9ec68db5fe52 30 FILE *wave_file;
etorres31 1:9ec68db5fe52 31 wave_file=fopen("/sd/forward.wav","r");
etorres31 1:9ec68db5fe52 32 waver.play(wave_file);
etorres31 1:9ec68db5fe52 33 fclose(wave_file);
etorres31 1:9ec68db5fe52 34 Thread::wait(100);
etorres31 1:9ec68db5fe52 35 }
etorres31 1:9ec68db5fe52 36 }
etorres31 1:9ec68db5fe52 37 }
etorres31 1:9ec68db5fe52 38
etorres31 1:9ec68db5fe52 39 void thread2(void const *args) {
etorres31 1:9ec68db5fe52 40 while (true) {
etorres31 1:9ec68db5fe52 41 while (b >0) {
etorres31 1:9ec68db5fe52 42 FILE *wave_file;
etorres31 1:9ec68db5fe52 43 wave_file=fopen("/sd/backward.wav","r");
etorres31 1:9ec68db5fe52 44 waver.play(wave_file);
etorres31 1:9ec68db5fe52 45 fclose(wave_file);
etorres31 1:9ec68db5fe52 46 Thread::wait(100);
etorres31 1:9ec68db5fe52 47 }
etorres31 1:9ec68db5fe52 48 }
etorres31 1:9ec68db5fe52 49 }
etorres31 1:9ec68db5fe52 50
etorres31 1:9ec68db5fe52 51 void thread3(void const *args) {
etorres31 1:9ec68db5fe52 52 while (true) {
etorres31 1:9ec68db5fe52 53 while (l >0) {
etorres31 1:9ec68db5fe52 54 FILE *wave_file;
etorres31 1:9ec68db5fe52 55 wave_file=fopen("/sd/left.wav","r");
etorres31 1:9ec68db5fe52 56 waver.play(wave_file);
etorres31 1:9ec68db5fe52 57 fclose(wave_file);
etorres31 1:9ec68db5fe52 58 Thread::wait(100);
etorres31 1:9ec68db5fe52 59 }
etorres31 1:9ec68db5fe52 60 }
etorres31 1:9ec68db5fe52 61 }
etorres31 1:9ec68db5fe52 62
etorres31 1:9ec68db5fe52 63 void thread4(void const *args) {
etorres31 1:9ec68db5fe52 64 while (true) {
etorres31 1:9ec68db5fe52 65 while (r >0) {
etorres31 1:9ec68db5fe52 66 FILE *wave_file;
etorres31 1:9ec68db5fe52 67 wave_file=fopen("/sd/right.wav","r");
etorres31 1:9ec68db5fe52 68 waver.play(wave_file);
etorres31 1:9ec68db5fe52 69 fclose(wave_file);
etorres31 1:9ec68db5fe52 70 Thread::wait(100);
etorres31 1:9ec68db5fe52 71 }
etorres31 1:9ec68db5fe52 72 }
etorres31 1:9ec68db5fe52 73 }
alex89 0:2eaf86314aea 74
alex89 0:2eaf86314aea 75 int main() {
etorres31 1:9ec68db5fe52 76 Thread t1(thread1);
etorres31 1:9ec68db5fe52 77 Thread t2(thread2);
etorres31 1:9ec68db5fe52 78 Thread t3(thread3);
etorres31 1:9ec68db5fe52 79 Thread t4(thread4);
etorres31 1:9ec68db5fe52 80
etorres31 1:9ec68db5fe52 81 uLCD.display_control(PORTRAIT);
alex89 0:2eaf86314aea 82 rst1 = 0; //Set reset pin to 0
alex89 0:2eaf86314aea 83 myled = 0;
alex89 0:2eaf86314aea 84 myled2= 0;
alex89 0:2eaf86314aea 85 wait_ms(1);
alex89 0:2eaf86314aea 86 rst1 = 1; //Set reset pin to 1
alex89 0:2eaf86314aea 87 wait_ms(1);
alex89 0:2eaf86314aea 88
etorres31 1:9ec68db5fe52 89 uLCD.printf("starting");
alex89 0:2eaf86314aea 90 wait(2);
etorres31 1:9ec68db5fe52 91 uLCD.cls();
alex89 0:2eaf86314aea 92
etorres31 1:9ec68db5fe52 93
alex89 0:2eaf86314aea 94 int prev = 0;
etorres31 1:9ec68db5fe52 95 float base = 0.1;
etorres31 1:9ec68db5fe52 96 float lSpeed = 0.0;
etorres31 1:9ec68db5fe52 97 float rSpeed = 0.0;
etorres31 1:9ec68db5fe52 98 while (1) {
etorres31 1:9ec68db5fe52 99 //uLCD.printf("wating");
alex89 0:2eaf86314aea 100 if(xbee1.readable()){
etorres31 1:9ec68db5fe52 101
alex89 0:2eaf86314aea 102 prev = a;
alex89 0:2eaf86314aea 103 a = xbee1.getc(); //XBee read
alex89 0:2eaf86314aea 104
etorres31 1:9ec68db5fe52 105 if (a !=0) {
etorres31 1:9ec68db5fe52 106 switch(a) {
etorres31 1:9ec68db5fe52 107 case 1 : //forward
etorres31 1:9ec68db5fe52 108 //uLCD.cls();
etorres31 1:9ec68db5fe52 109 f++;
etorres31 1:9ec68db5fe52 110 lSpeed = f*base*-1;
etorres31 1:9ec68db5fe52 111 rSpeed = f*base*-1;
etorres31 1:9ec68db5fe52 112 break;
etorres31 1:9ec68db5fe52 113 case 2 : //reverse
etorres31 1:9ec68db5fe52 114 b++;
etorres31 1:9ec68db5fe52 115 lSpeed = b*base;
etorres31 1:9ec68db5fe52 116 rSpeed = b*base;
etorres31 1:9ec68db5fe52 117 break;
etorres31 1:9ec68db5fe52 118 case 3 : //counter clockwise roation
etorres31 1:9ec68db5fe52 119 l++;
etorres31 1:9ec68db5fe52 120 lSpeed = l*base*-1;
etorres31 1:9ec68db5fe52 121 rSpeed = l*base;
etorres31 1:9ec68db5fe52 122 break;
etorres31 1:9ec68db5fe52 123 case 4 : //clockwise rotation
etorres31 1:9ec68db5fe52 124 r++;
etorres31 1:9ec68db5fe52 125 lSpeed = r*base;
etorres31 1:9ec68db5fe52 126 rSpeed = r*base*-1;
etorres31 1:9ec68db5fe52 127 break;
etorres31 1:9ec68db5fe52 128 case 5 : //stop/reset
etorres31 1:9ec68db5fe52 129 f = 0;
etorres31 1:9ec68db5fe52 130 b = 0;
etorres31 1:9ec68db5fe52 131 l = 0;
etorres31 1:9ec68db5fe52 132 r = 0;
etorres31 1:9ec68db5fe52 133 lSpeed = 0.0;
etorres31 1:9ec68db5fe52 134 rSpeed = 0.0;
etorres31 1:9ec68db5fe52 135 break;
etorres31 1:9ec68db5fe52 136 default :
etorres31 1:9ec68db5fe52 137 //left.speed(0.0);
etorres31 1:9ec68db5fe52 138 //right.speed(0.0);
etorres31 1:9ec68db5fe52 139 }
etorres31 1:9ec68db5fe52 140 }
etorres31 1:9ec68db5fe52 141 //uLCD.printf("move");
etorres31 1:9ec68db5fe52 142 left.speed(lSpeed);
etorres31 1:9ec68db5fe52 143 right.speed(rSpeed);
etorres31 1:9ec68db5fe52 144 /*if (a == 1) {
etorres31 1:9ec68db5fe52 145 left.speed(-0.7);
etorres31 1:9ec68db5fe52 146 right.speed(-0.7);
etorres31 1:9ec68db5fe52 147
etorres31 1:9ec68db5fe52 148 wave_file=fopen("/sd/fire.wav","r");
etorres31 1:9ec68db5fe52 149 waver.play(wave_file);
etorres31 1:9ec68db5fe52 150 fclose(wave_file);
etorres31 1:9ec68db5fe52 151 } else if (a == 2) {
etorres31 1:9ec68db5fe52 152 left.speed(0.7);
etorres31 1:9ec68db5fe52 153 right.speed(0.7);
etorres31 1:9ec68db5fe52 154 } else if (a == 3) {
etorres31 1:9ec68db5fe52 155 left.speed(-0.7);
etorres31 1:9ec68db5fe52 156 right.speed(0.7);
etorres31 1:9ec68db5fe52 157 } else if (a == 4) {
etorres31 1:9ec68db5fe52 158 left.speed(0.7);
etorres31 1:9ec68db5fe52 159 right.speed(-0.7);
etorres31 1:9ec68db5fe52 160 } else if (a == 5) {
etorres31 1:9ec68db5fe52 161 left.speed(0);
etorres31 1:9ec68db5fe52 162 right.speed(0);
etorres31 1:9ec68db5fe52 163 } */
alex89 0:2eaf86314aea 164 if (a != prev){
etorres31 1:9ec68db5fe52 165
etorres31 1:9ec68db5fe52 166 uLCD.cls();
etorres31 1:9ec68db5fe52 167 //uLCD.text_width(3); //1X size text
etorres31 1:9ec68db5fe52 168 //uLCD.text_height(3);
etorres31 1:9ec68db5fe52 169 //uLCD.locate(64,64);
etorres31 1:9ec68db5fe52 170 //uLCD.printf("%d", a);
etorres31 1:9ec68db5fe52 171 uLCD.printf("%f", lSpeed);
etorres31 1:9ec68db5fe52 172 uLCD.printf(" ");
etorres31 1:9ec68db5fe52 173 uLCD.printf("%d", b);
etorres31 1:9ec68db5fe52 174 uLCD.printf(" ");
etorres31 1:9ec68db5fe52 175 uLCD.printf("%d", a);
etorres31 1:9ec68db5fe52 176 uLCD.printf(" ");
etorres31 1:9ec68db5fe52 177 uLCD.printf("%f", rSpeed);
etorres31 1:9ec68db5fe52 178
alex89 0:2eaf86314aea 179 }
etorres31 1:9ec68db5fe52 180
alex89 0:2eaf86314aea 181 }
etorres31 1:9ec68db5fe52 182 a = 0;
alex89 0:2eaf86314aea 183 }
alex89 0:2eaf86314aea 184 }