single player mbedKart

Dependencies:   Motor

(notes)

Committer:
DerekW2015
Date:
Tue Nov 27 18:01:29 2018 +0000
Revision:
0:a9a4c0fd5f8a
Child:
1:ad77fbbd36cd
Start

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