Silvan Li
/
mbedKart_sp
single player mbedKart
(notes)
main.cpp@0:a9a4c0fd5f8a, 2018-11-27 (annotated)
- Committer:
- DerekW2015
- Date:
- Tue Nov 27 18:01:29 2018 +0000
- Revision:
- 0:a9a4c0fd5f8a
- Child:
- 1:ad77fbbd36cd
Start
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DerekW2015 | 0:a9a4c0fd5f8a | 1 | #include "mbed.h" |
DerekW2015 | 0:a9a4c0fd5f8a | 2 | #include "rtos.h" |
DerekW2015 | 0:a9a4c0fd5f8a | 3 | #include "Motor.h" |
DerekW2015 | 0:a9a4c0fd5f8a | 4 | #include "rgbled.h" |
DerekW2015 | 0:a9a4c0fd5f8a | 5 | #include "rgbSensor.h" |
DerekW2015 | 0:a9a4c0fd5f8a | 6 | #include "SDFileSystem.h" |
DerekW2015 | 0:a9a4c0fd5f8a | 7 | #include "wave_player.h" |
DerekW2015 | 0:a9a4c0fd5f8a | 8 | |
DerekW2015 | 0:a9a4c0fd5f8a | 9 | // Define devices |
DerekW2015 | 0:a9a4c0fd5f8a | 10 | Motor left(p22, p16, p15); // pwm, fwd, rev |
DerekW2015 | 0:a9a4c0fd5f8a | 11 | Motor right(p23, p19, p20); // pwm, fwd, rev |
DerekW2015 | 0:a9a4c0fd5f8a | 12 | BusOut myled(LED1,LED2,LED3,LED4); |
DerekW2015 | 0:a9a4c0fd5f8a | 13 | RGBLed myRGBled(p26, p25, p24); // red, green, blue |
DerekW2015 | 0:a9a4c0fd5f8a | 14 | rgbSensor rgbsensor(p28, p27); |
DerekW2015 | 0:a9a4c0fd5f8a | 15 | Serial blue(p13, p14); // serial tx, serial rx |
DerekW2015 | 0:a9a4c0fd5f8a | 16 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card |
DerekW2015 | 0:a9a4c0fd5f8a | 17 | AnalogOut DACout(p18); |
DerekW2015 | 0:a9a4c0fd5f8a | 18 | wave_player waver(&DACout); |
DerekW2015 | 0:a9a4c0fd5f8a | 19 | |
DerekW2015 | 0:a9a4c0fd5f8a | 20 | // Define threads |
DerekW2015 | 0:a9a4c0fd5f8a | 21 | Thread thread1; |
DerekW2015 | 0:a9a4c0fd5f8a | 22 | Thread thread2; |
DerekW2015 | 0:a9a4c0fd5f8a | 23 | Thread thread3; |
DerekW2015 | 0:a9a4c0fd5f8a | 24 | |
DerekW2015 | 0:a9a4c0fd5f8a | 25 | // Global game actions |
DerekW2015 | 0:a9a4c0fd5f8a | 26 | bool game_paused = false; |
DerekW2015 | 0:a9a4c0fd5f8a | 27 | void pause_game() { |
DerekW2015 | 0:a9a4c0fd5f8a | 28 | game_paused = true; |
DerekW2015 | 0:a9a4c0fd5f8a | 29 | // code to tell other mbeds game is paused |
DerekW2015 | 0:a9a4c0fd5f8a | 30 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 31 | |
DerekW2015 | 0:a9a4c0fd5f8a | 32 | // Thread for detecting item boxes |
DerekW2015 | 0:a9a4c0fd5f8a | 33 | int sensor_addr = 41 << 1; |
DerekW2015 | 0:a9a4c0fd5f8a | 34 | void item_thread() { |
DerekW2015 | 0:a9a4c0fd5f8a | 35 | // Read data from color sensor (Clear/Red/Green/Blue) |
DerekW2015 | 0:a9a4c0fd5f8a | 36 | while (true) { |
DerekW2015 | 0:a9a4c0fd5f8a | 37 | myRGBled.write(1.0,0.0,0.0); //red |
DerekW2015 | 0:a9a4c0fd5f8a | 38 | wait(2.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 39 | myRGBled.write(0.0,1.0,0.0); //green |
DerekW2015 | 0:a9a4c0fd5f8a | 40 | wait(2.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 41 | myRGBled.write(0.0,0.0,1.0); //blue |
DerekW2015 | 0:a9a4c0fd5f8a | 42 | wait(2.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 43 | myRGBled.write(1.0,0.2,0.0); //yellow = red + some green |
DerekW2015 | 0:a9a4c0fd5f8a | 44 | wait(2.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 45 | //white with a slow fade to black dimming effect |
DerekW2015 | 0:a9a4c0fd5f8a | 46 | for (float x=1.0; x>=0.0001; x=x*0.99) { |
DerekW2015 | 0:a9a4c0fd5f8a | 47 | myRGBled.write(x, x, x); |
DerekW2015 | 0:a9a4c0fd5f8a | 48 | wait(0.005); |
DerekW2015 | 0:a9a4c0fd5f8a | 49 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 50 | Thread::wait(100); |
DerekW2015 | 0:a9a4c0fd5f8a | 51 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 52 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 53 | |
DerekW2015 | 0:a9a4c0fd5f8a | 54 | |
DerekW2015 | 0:a9a4c0fd5f8a | 55 | |
DerekW2015 | 0:a9a4c0fd5f8a | 56 | int main() { |
DerekW2015 | 0:a9a4c0fd5f8a | 57 | |
DerekW2015 | 0:a9a4c0fd5f8a | 58 | |
DerekW2015 | 0:a9a4c0fd5f8a | 59 | // Start threads |
DerekW2015 | 0:a9a4c0fd5f8a | 60 | thread1.start(item_thread); |
DerekW2015 | 0:a9a4c0fd5f8a | 61 | |
DerekW2015 | 0:a9a4c0fd5f8a | 62 | // Bluetooth controller code |
DerekW2015 | 0:a9a4c0fd5f8a | 63 | char bnum=0; |
DerekW2015 | 0:a9a4c0fd5f8a | 64 | char bhit=0; |
DerekW2015 | 0:a9a4c0fd5f8a | 65 | while(1) { |
DerekW2015 | 0:a9a4c0fd5f8a | 66 | if (blue.getc()=='!') { |
DerekW2015 | 0:a9a4c0fd5f8a | 67 | if (blue.getc()=='B') { //button data packet |
DerekW2015 | 0:a9a4c0fd5f8a | 68 | bnum = blue.getc(); //button number |
DerekW2015 | 0:a9a4c0fd5f8a | 69 | bhit = blue.getc(); //1=hit, 0=release |
DerekW2015 | 0:a9a4c0fd5f8a | 70 | if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? |
DerekW2015 | 0:a9a4c0fd5f8a | 71 | switch (bnum) { |
DerekW2015 | 0:a9a4c0fd5f8a | 72 | case '1': //number button 1, pause |
DerekW2015 | 0:a9a4c0fd5f8a | 73 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 74 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 75 | //pause_game(); |
DerekW2015 | 0:a9a4c0fd5f8a | 76 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 77 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 78 | case '2': //number button 2, accelerate |
DerekW2015 | 0:a9a4c0fd5f8a | 79 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 80 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 81 | left.speed(1.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 82 | right.speed(1.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 83 | } else { |
DerekW2015 | 0:a9a4c0fd5f8a | 84 | left.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 85 | right.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 86 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 87 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 88 | case '3': //number button 3 |
DerekW2015 | 0:a9a4c0fd5f8a | 89 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 90 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 91 | //add hit code here |
DerekW2015 | 0:a9a4c0fd5f8a | 92 | } else { |
DerekW2015 | 0:a9a4c0fd5f8a | 93 | //add release code here |
DerekW2015 | 0:a9a4c0fd5f8a | 94 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 95 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 96 | case '4': //number button 4, brakes |
DerekW2015 | 0:a9a4c0fd5f8a | 97 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 98 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 99 | //add hit code here |
DerekW2015 | 0:a9a4c0fd5f8a | 100 | } else { |
DerekW2015 | 0:a9a4c0fd5f8a | 101 | //add release code here |
DerekW2015 | 0:a9a4c0fd5f8a | 102 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 103 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 104 | case '5': //button 5 up arrow |
DerekW2015 | 0:a9a4c0fd5f8a | 105 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 106 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 107 | //throw_item(); |
DerekW2015 | 0:a9a4c0fd5f8a | 108 | //item_box(); |
DerekW2015 | 0:a9a4c0fd5f8a | 109 | } else { |
DerekW2015 | 0:a9a4c0fd5f8a | 110 | |
DerekW2015 | 0:a9a4c0fd5f8a | 111 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 112 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 113 | case '6': //button 6 down arrow |
DerekW2015 | 0:a9a4c0fd5f8a | 114 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 115 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 116 | left.speed(-1.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 117 | right.speed(-1.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 118 | } else { |
DerekW2015 | 0:a9a4c0fd5f8a | 119 | left.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 120 | right.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 121 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 122 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 123 | case '7': //button 7 left arrow |
DerekW2015 | 0:a9a4c0fd5f8a | 124 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 125 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 126 | left.speed(0.3); |
DerekW2015 | 0:a9a4c0fd5f8a | 127 | right.speed(1.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 128 | } else { |
DerekW2015 | 0:a9a4c0fd5f8a | 129 | left.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 130 | right.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 131 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 132 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 133 | case '8': //button 8 right arrow |
DerekW2015 | 0:a9a4c0fd5f8a | 134 | if (bhit=='1') { |
DerekW2015 | 0:a9a4c0fd5f8a | 135 | //myled = bnum - '0'; //current button number will appear on LEDs |
DerekW2015 | 0:a9a4c0fd5f8a | 136 | left.speed(1.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 137 | right.speed(0.3); |
DerekW2015 | 0:a9a4c0fd5f8a | 138 | } else { |
DerekW2015 | 0:a9a4c0fd5f8a | 139 | left.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 140 | right.speed(0.0); |
DerekW2015 | 0:a9a4c0fd5f8a | 141 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 142 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 143 | default: |
DerekW2015 | 0:a9a4c0fd5f8a | 144 | break; |
DerekW2015 | 0:a9a4c0fd5f8a | 145 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 146 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 147 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 148 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 149 | } |
DerekW2015 | 0:a9a4c0fd5f8a | 150 | } |