single player mbedKart

Dependencies:   Motor

(notes)

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?

UserRevisionLine numberNew 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 }