Wirelessly controlled robot through Xbee
Dependencies: 4DGL-uLCD-SE Motordriver SDFileSystem mbed-rtos mbed wave_player
Fork of XBee_read by
main.cpp@1:9ec68db5fe52, 2016-11-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |