Bluetooth Controlled Robot with Audio Feedback and Variable Speed Control
Dependencies: Motor SDFileSystem mbed wave_player
main.cpp@0:5b3fe01b3a0e, 2017-03-09 (annotated)
- Committer:
- iemretep
- Date:
- Thu Mar 09 17:22:33 2017 +0000
- Revision:
- 0:5b3fe01b3a0e
Bluetooth Controlled Robot with Audio Feedback and Variable Speed Control
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
iemretep | 0:5b3fe01b3a0e | 1 | #include "mbed.h" |
iemretep | 0:5b3fe01b3a0e | 2 | #include "SDFileSystem.h" |
iemretep | 0:5b3fe01b3a0e | 3 | #include "wave_player.h" |
iemretep | 0:5b3fe01b3a0e | 4 | #include "Motor.h" |
iemretep | 0:5b3fe01b3a0e | 5 | |
iemretep | 0:5b3fe01b3a0e | 6 | DigitalOut led1(LED1); |
iemretep | 0:5b3fe01b3a0e | 7 | DigitalOut led2(LED2); |
iemretep | 0:5b3fe01b3a0e | 8 | DigitalOut led3(LED3); |
iemretep | 0:5b3fe01b3a0e | 9 | DigitalOut led4(LED4); |
iemretep | 0:5b3fe01b3a0e | 10 | |
iemretep | 0:5b3fe01b3a0e | 11 | Serial blue(p28,p27); |
iemretep | 0:5b3fe01b3a0e | 12 | |
iemretep | 0:5b3fe01b3a0e | 13 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card |
iemretep | 0:5b3fe01b3a0e | 14 | AnalogOut DACout(p18); |
iemretep | 0:5b3fe01b3a0e | 15 | wave_player waver(&DACout); |
iemretep | 0:5b3fe01b3a0e | 16 | FILE *wave_file; |
iemretep | 0:5b3fe01b3a0e | 17 | |
iemretep | 0:5b3fe01b3a0e | 18 | Motor A(p21, p20, p19); //pwm, inB, inA |
iemretep | 0:5b3fe01b3a0e | 19 | Motor B(p22, p17, p16); //pwm, inA, inB |
iemretep | 0:5b3fe01b3a0e | 20 | float speed = 0.5f; |
iemretep | 0:5b3fe01b3a0e | 21 | float speed1 = 0.25f; |
iemretep | 0:5b3fe01b3a0e | 22 | float speed2 = 0.50f; |
iemretep | 0:5b3fe01b3a0e | 23 | float speed3 = 0.75f; |
iemretep | 0:5b3fe01b3a0e | 24 | float speed4 = 1.0f; |
iemretep | 0:5b3fe01b3a0e | 25 | |
iemretep | 0:5b3fe01b3a0e | 26 | int main() |
iemretep | 0:5b3fe01b3a0e | 27 | { |
iemretep | 0:5b3fe01b3a0e | 28 | char bnum=0; |
iemretep | 0:5b3fe01b3a0e | 29 | char bhit=0; |
iemretep | 0:5b3fe01b3a0e | 30 | while(1) { |
iemretep | 0:5b3fe01b3a0e | 31 | if (blue.getc()=='!') { |
iemretep | 0:5b3fe01b3a0e | 32 | if (blue.getc()=='B') { //button data packet |
iemretep | 0:5b3fe01b3a0e | 33 | bnum = blue.getc(); //button number |
iemretep | 0:5b3fe01b3a0e | 34 | bhit = blue.getc(); //1=hit, 0=release |
iemretep | 0:5b3fe01b3a0e | 35 | if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? |
iemretep | 0:5b3fe01b3a0e | 36 | //myled = bnum - '0'; //current button number will appear on LEDs |
iemretep | 0:5b3fe01b3a0e | 37 | switch (bnum) { |
iemretep | 0:5b3fe01b3a0e | 38 | case '1': //number button 1 |
iemretep | 0:5b3fe01b3a0e | 39 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 40 | speed = speed1; |
iemretep | 0:5b3fe01b3a0e | 41 | } else { |
iemretep | 0:5b3fe01b3a0e | 42 | //add release code here |
iemretep | 0:5b3fe01b3a0e | 43 | } |
iemretep | 0:5b3fe01b3a0e | 44 | break; |
iemretep | 0:5b3fe01b3a0e | 45 | case '2': //number button 2 |
iemretep | 0:5b3fe01b3a0e | 46 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 47 | speed = speed2; |
iemretep | 0:5b3fe01b3a0e | 48 | } else { |
iemretep | 0:5b3fe01b3a0e | 49 | //add release code here |
iemretep | 0:5b3fe01b3a0e | 50 | } |
iemretep | 0:5b3fe01b3a0e | 51 | break; |
iemretep | 0:5b3fe01b3a0e | 52 | case '3': //number button 3 |
iemretep | 0:5b3fe01b3a0e | 53 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 54 | speed = speed3; |
iemretep | 0:5b3fe01b3a0e | 55 | } else { |
iemretep | 0:5b3fe01b3a0e | 56 | //add release code here |
iemretep | 0:5b3fe01b3a0e | 57 | } |
iemretep | 0:5b3fe01b3a0e | 58 | break; |
iemretep | 0:5b3fe01b3a0e | 59 | case '4': //number button 4 |
iemretep | 0:5b3fe01b3a0e | 60 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 61 | speed = speed4; |
iemretep | 0:5b3fe01b3a0e | 62 | } else { |
iemretep | 0:5b3fe01b3a0e | 63 | //add release code here |
iemretep | 0:5b3fe01b3a0e | 64 | } |
iemretep | 0:5b3fe01b3a0e | 65 | break; |
iemretep | 0:5b3fe01b3a0e | 66 | case '5': //button 5 up arrow |
iemretep | 0:5b3fe01b3a0e | 67 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 68 | led1=!led1; |
iemretep | 0:5b3fe01b3a0e | 69 | A.speed(speed); |
iemretep | 0:5b3fe01b3a0e | 70 | B.speed(speed); |
iemretep | 0:5b3fe01b3a0e | 71 | wave_file=fopen("/sd/upbeep.wav","r"); |
iemretep | 0:5b3fe01b3a0e | 72 | waver.play(wave_file); |
iemretep | 0:5b3fe01b3a0e | 73 | fclose(wave_file); |
iemretep | 0:5b3fe01b3a0e | 74 | } else { |
iemretep | 0:5b3fe01b3a0e | 75 | led1=!led1; |
iemretep | 0:5b3fe01b3a0e | 76 | A.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 77 | B.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 78 | } |
iemretep | 0:5b3fe01b3a0e | 79 | break; |
iemretep | 0:5b3fe01b3a0e | 80 | case '6': //button 6 down arrow |
iemretep | 0:5b3fe01b3a0e | 81 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 82 | A.speed(-speed); |
iemretep | 0:5b3fe01b3a0e | 83 | B.speed(-speed); |
iemretep | 0:5b3fe01b3a0e | 84 | wave_file=fopen("/sd/downbeep.wav","r"); |
iemretep | 0:5b3fe01b3a0e | 85 | waver.play(wave_file); |
iemretep | 0:5b3fe01b3a0e | 86 | fclose(wave_file); |
iemretep | 0:5b3fe01b3a0e | 87 | } else { |
iemretep | 0:5b3fe01b3a0e | 88 | led2=!led2; |
iemretep | 0:5b3fe01b3a0e | 89 | A.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 90 | B.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 91 | } |
iemretep | 0:5b3fe01b3a0e | 92 | break; |
iemretep | 0:5b3fe01b3a0e | 93 | case '7': //button 7 left arrow |
iemretep | 0:5b3fe01b3a0e | 94 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 95 | A.speed(speed); |
iemretep | 0:5b3fe01b3a0e | 96 | B.speed(-speed); |
iemretep | 0:5b3fe01b3a0e | 97 | wave_file=fopen("/sd/leftbeep.wav","r"); |
iemretep | 0:5b3fe01b3a0e | 98 | waver.play(wave_file); |
iemretep | 0:5b3fe01b3a0e | 99 | fclose(wave_file); |
iemretep | 0:5b3fe01b3a0e | 100 | } else { |
iemretep | 0:5b3fe01b3a0e | 101 | led3=!led3; |
iemretep | 0:5b3fe01b3a0e | 102 | A.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 103 | B.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 104 | } |
iemretep | 0:5b3fe01b3a0e | 105 | break; |
iemretep | 0:5b3fe01b3a0e | 106 | case '8': //button 8 right arrow |
iemretep | 0:5b3fe01b3a0e | 107 | if (bhit=='1') { |
iemretep | 0:5b3fe01b3a0e | 108 | A.speed(-speed); |
iemretep | 0:5b3fe01b3a0e | 109 | B.speed(speed); |
iemretep | 0:5b3fe01b3a0e | 110 | wave_file=fopen("/sd/rightbeep.wav","r"); |
iemretep | 0:5b3fe01b3a0e | 111 | waver.play(wave_file); |
iemretep | 0:5b3fe01b3a0e | 112 | fclose(wave_file); |
iemretep | 0:5b3fe01b3a0e | 113 | } else { |
iemretep | 0:5b3fe01b3a0e | 114 | led4=!led4; |
iemretep | 0:5b3fe01b3a0e | 115 | A.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 116 | B.speed(0.0f); |
iemretep | 0:5b3fe01b3a0e | 117 | } |
iemretep | 0:5b3fe01b3a0e | 118 | break; |
iemretep | 0:5b3fe01b3a0e | 119 | default: |
iemretep | 0:5b3fe01b3a0e | 120 | break; |
iemretep | 0:5b3fe01b3a0e | 121 | } |
iemretep | 0:5b3fe01b3a0e | 122 | } |
iemretep | 0:5b3fe01b3a0e | 123 | } |
iemretep | 0:5b3fe01b3a0e | 124 | } |
iemretep | 0:5b3fe01b3a0e | 125 | } |
iemretep | 0:5b3fe01b3a0e | 126 | } |