Silvan Li
/
mbedKart_sp
single player mbedKart
(notes)
Diff: main.cpp
- Revision:
- 0:a9a4c0fd5f8a
- Child:
- 1:ad77fbbd36cd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Nov 27 18:01:29 2018 +0000 @@ -0,0 +1,150 @@ +#include "mbed.h" +#include "rtos.h" +#include "Motor.h" +#include "rgbled.h" +#include "rgbSensor.h" +#include "SDFileSystem.h" +#include "wave_player.h" + +// Define devices +Motor left(p22, p16, p15); // pwm, fwd, rev +Motor right(p23, p19, p20); // pwm, fwd, rev +BusOut myled(LED1,LED2,LED3,LED4); +RGBLed myRGBled(p26, p25, p24); // red, green, blue +rgbSensor rgbsensor(p28, p27); +Serial blue(p13, p14); // serial tx, serial rx +SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card +AnalogOut DACout(p18); +wave_player waver(&DACout); + +// Define threads +Thread thread1; +Thread thread2; +Thread thread3; + +// Global game actions +bool game_paused = false; +void pause_game() { + game_paused = true; + // code to tell other mbeds game is paused +} + +// Thread for detecting item boxes +int sensor_addr = 41 << 1; +void item_thread() { + // Read data from color sensor (Clear/Red/Green/Blue) + while (true) { + myRGBled.write(1.0,0.0,0.0); //red + wait(2.0); + myRGBled.write(0.0,1.0,0.0); //green + wait(2.0); + myRGBled.write(0.0,0.0,1.0); //blue + wait(2.0); + myRGBled.write(1.0,0.2,0.0); //yellow = red + some green + wait(2.0); + //white with a slow fade to black dimming effect + for (float x=1.0; x>=0.0001; x=x*0.99) { + myRGBled.write(x, x, x); + wait(0.005); + } + Thread::wait(100); + } +} + + + +int main() { + + + // Start threads + thread1.start(item_thread); + + // Bluetooth controller code + char bnum=0; + char bhit=0; + while(1) { + if (blue.getc()=='!') { + if (blue.getc()=='B') { //button data packet + bnum = blue.getc(); //button number + bhit = blue.getc(); //1=hit, 0=release + if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? + switch (bnum) { + case '1': //number button 1, pause + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + //pause_game(); + } + break; + case '2': //number button 2, accelerate + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + left.speed(1.0); + right.speed(1.0); + } else { + left.speed(0.0); + right.speed(0.0); + } + break; + case '3': //number button 3 + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + //add hit code here + } else { + //add release code here + } + break; + case '4': //number button 4, brakes + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + //add hit code here + } else { + //add release code here + } + break; + case '5': //button 5 up arrow + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + //throw_item(); + //item_box(); + } else { + + } + break; + case '6': //button 6 down arrow + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + left.speed(-1.0); + right.speed(-1.0); + } else { + left.speed(0.0); + right.speed(0.0); + } + break; + case '7': //button 7 left arrow + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + left.speed(0.3); + right.speed(1.0); + } else { + left.speed(0.0); + right.speed(0.0); + } + break; + case '8': //button 8 right arrow + if (bhit=='1') { + //myled = bnum - '0'; //current button number will appear on LEDs + left.speed(1.0); + right.speed(0.3); + } else { + left.speed(0.0); + right.speed(0.0); + } + break; + default: + break; + } + } + } + } + } +} \ No newline at end of file