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