single player mbedKart

Dependencies:   Motor

(notes)

Committer:
DerekW2015
Date:
Tue Nov 27 18:08:29 2018 +0000
Revision:
1:ad77fbbd36cd
Parent:
0:a9a4c0fd5f8a
Child:
2:b57d7156830c
Test

Who changed what in which revision?

UserRevisionLine numberNew 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 1:ad77fbbd36cd 48 Thread::wait(0.005);
DerekW2015 0:a9a4c0fd5f8a 49 }
DerekW2015 0:a9a4c0fd5f8a 50 Thread::wait(100);
DerekW2015 0:a9a4c0fd5f8a 51 }
DerekW2015 1:ad77fbbd36cd 52 }
DerekW2015 0:a9a4c0fd5f8a 53
DerekW2015 0:a9a4c0fd5f8a 54 int main() {
DerekW2015 0:a9a4c0fd5f8a 55 // Start threads
DerekW2015 0:a9a4c0fd5f8a 56 thread1.start(item_thread);
DerekW2015 0:a9a4c0fd5f8a 57
DerekW2015 0:a9a4c0fd5f8a 58 // Bluetooth controller code
DerekW2015 0:a9a4c0fd5f8a 59 char bnum=0;
DerekW2015 0:a9a4c0fd5f8a 60 char bhit=0;
DerekW2015 0:a9a4c0fd5f8a 61 while(1) {
DerekW2015 0:a9a4c0fd5f8a 62 if (blue.getc()=='!') {
DerekW2015 0:a9a4c0fd5f8a 63 if (blue.getc()=='B') { //button data packet
DerekW2015 0:a9a4c0fd5f8a 64 bnum = blue.getc(); //button number
DerekW2015 0:a9a4c0fd5f8a 65 bhit = blue.getc(); //1=hit, 0=release
DerekW2015 0:a9a4c0fd5f8a 66 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
DerekW2015 0:a9a4c0fd5f8a 67 switch (bnum) {
DerekW2015 0:a9a4c0fd5f8a 68 case '1': //number button 1, pause
DerekW2015 0:a9a4c0fd5f8a 69 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 70 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 71 //pause_game();
DerekW2015 0:a9a4c0fd5f8a 72 }
DerekW2015 0:a9a4c0fd5f8a 73 break;
DerekW2015 0:a9a4c0fd5f8a 74 case '2': //number button 2, accelerate
DerekW2015 0:a9a4c0fd5f8a 75 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 76 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 77 left.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 78 right.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 79 } else {
DerekW2015 0:a9a4c0fd5f8a 80 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 81 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 82 }
DerekW2015 0:a9a4c0fd5f8a 83 break;
DerekW2015 0:a9a4c0fd5f8a 84 case '3': //number button 3
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 '4': //number button 4, brakes
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 //add hit code here
DerekW2015 0:a9a4c0fd5f8a 96 } else {
DerekW2015 0:a9a4c0fd5f8a 97 //add release code here
DerekW2015 0:a9a4c0fd5f8a 98 }
DerekW2015 0:a9a4c0fd5f8a 99 break;
DerekW2015 0:a9a4c0fd5f8a 100 case '5': //button 5 up arrow
DerekW2015 0:a9a4c0fd5f8a 101 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 102 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 103 //throw_item();
DerekW2015 0:a9a4c0fd5f8a 104 //item_box();
DerekW2015 0:a9a4c0fd5f8a 105 } else {
DerekW2015 0:a9a4c0fd5f8a 106
DerekW2015 0:a9a4c0fd5f8a 107 }
DerekW2015 0:a9a4c0fd5f8a 108 break;
DerekW2015 0:a9a4c0fd5f8a 109 case '6': //button 6 down arrow
DerekW2015 0:a9a4c0fd5f8a 110 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 111 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 112 left.speed(-1.0);
DerekW2015 0:a9a4c0fd5f8a 113 right.speed(-1.0);
DerekW2015 0:a9a4c0fd5f8a 114 } else {
DerekW2015 0:a9a4c0fd5f8a 115 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 116 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 117 }
DerekW2015 0:a9a4c0fd5f8a 118 break;
DerekW2015 0:a9a4c0fd5f8a 119 case '7': //button 7 left arrow
DerekW2015 0:a9a4c0fd5f8a 120 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 121 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 122 left.speed(0.3);
DerekW2015 0:a9a4c0fd5f8a 123 right.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 124 } else {
DerekW2015 0:a9a4c0fd5f8a 125 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 126 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 127 }
DerekW2015 0:a9a4c0fd5f8a 128 break;
DerekW2015 0:a9a4c0fd5f8a 129 case '8': //button 8 right arrow
DerekW2015 0:a9a4c0fd5f8a 130 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 131 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 132 left.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 133 right.speed(0.3);
DerekW2015 0:a9a4c0fd5f8a 134 } else {
DerekW2015 0:a9a4c0fd5f8a 135 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 136 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 137 }
DerekW2015 0:a9a4c0fd5f8a 138 break;
DerekW2015 0:a9a4c0fd5f8a 139 default:
DerekW2015 0:a9a4c0fd5f8a 140 break;
DerekW2015 0:a9a4c0fd5f8a 141 }
DerekW2015 0:a9a4c0fd5f8a 142 }
DerekW2015 0:a9a4c0fd5f8a 143 }
DerekW2015 0:a9a4c0fd5f8a 144 }
DerekW2015 0:a9a4c0fd5f8a 145 }
DerekW2015 0:a9a4c0fd5f8a 146 }