single player mbedKart

Dependencies:   Motor

(notes)

Committer:
DerekW2015
Date:
Sun Dec 09 21:40:31 2018 +0000
Revision:
2:b57d7156830c
Parent:
1:ad77fbbd36cd
Child:
3:6c749bff51aa
Child:
4:e9bb401ef608
Moved rgbsensor.cpp into rgbsensor.h to match the behavior of rgbled.h. Now to mix and match libraries.

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 // Global game actions
DerekW2015 0:a9a4c0fd5f8a 21 bool game_paused = false;
DerekW2015 0:a9a4c0fd5f8a 22 void pause_game() {
DerekW2015 0:a9a4c0fd5f8a 23 game_paused = true;
DerekW2015 0:a9a4c0fd5f8a 24 // code to tell other mbeds game is paused
DerekW2015 0:a9a4c0fd5f8a 25 }
DerekW2015 0:a9a4c0fd5f8a 26
DerekW2015 0:a9a4c0fd5f8a 27 // Thread for detecting item boxes
DerekW2015 0:a9a4c0fd5f8a 28 int sensor_addr = 41 << 1;
DerekW2015 0:a9a4c0fd5f8a 29 void item_thread() {
DerekW2015 0:a9a4c0fd5f8a 30 // Read data from color sensor (Clear/Red/Green/Blue)
DerekW2015 0:a9a4c0fd5f8a 31 while (true) {
DerekW2015 0:a9a4c0fd5f8a 32 myRGBled.write(1.0,0.0,0.0); //red
DerekW2015 0:a9a4c0fd5f8a 33 wait(2.0);
DerekW2015 0:a9a4c0fd5f8a 34 myRGBled.write(0.0,1.0,0.0); //green
DerekW2015 0:a9a4c0fd5f8a 35 wait(2.0);
DerekW2015 0:a9a4c0fd5f8a 36 myRGBled.write(0.0,0.0,1.0); //blue
DerekW2015 0:a9a4c0fd5f8a 37 wait(2.0);
DerekW2015 0:a9a4c0fd5f8a 38 myRGBled.write(1.0,0.2,0.0); //yellow = red + some green
DerekW2015 0:a9a4c0fd5f8a 39 wait(2.0);
DerekW2015 0:a9a4c0fd5f8a 40 //white with a slow fade to black dimming effect
DerekW2015 0:a9a4c0fd5f8a 41 for (float x=1.0; x>=0.0001; x=x*0.99) {
DerekW2015 0:a9a4c0fd5f8a 42 myRGBled.write(x, x, x);
DerekW2015 1:ad77fbbd36cd 43 Thread::wait(0.005);
DerekW2015 0:a9a4c0fd5f8a 44 }
DerekW2015 0:a9a4c0fd5f8a 45 Thread::wait(100);
DerekW2015 0:a9a4c0fd5f8a 46 }
DerekW2015 1:ad77fbbd36cd 47 }
DerekW2015 0:a9a4c0fd5f8a 48
DerekW2015 2:b57d7156830c 49 // Define threads
DerekW2015 2:b57d7156830c 50 Thread thread1(item_thread);
DerekW2015 2:b57d7156830c 51 Thread thread2(sound_thread);
DerekW2015 2:b57d7156830c 52
DerekW2015 0:a9a4c0fd5f8a 53 int main() {
DerekW2015 0:a9a4c0fd5f8a 54 // Start threads
DerekW2015 0:a9a4c0fd5f8a 55 thread1.start(item_thread);
DerekW2015 0:a9a4c0fd5f8a 56
DerekW2015 0:a9a4c0fd5f8a 57 // Bluetooth controller code
DerekW2015 0:a9a4c0fd5f8a 58 char bnum=0;
DerekW2015 0:a9a4c0fd5f8a 59 char bhit=0;
DerekW2015 0:a9a4c0fd5f8a 60 while(1) {
DerekW2015 0:a9a4c0fd5f8a 61 if (blue.getc()=='!') {
DerekW2015 0:a9a4c0fd5f8a 62 if (blue.getc()=='B') { //button data packet
DerekW2015 0:a9a4c0fd5f8a 63 bnum = blue.getc(); //button number
DerekW2015 0:a9a4c0fd5f8a 64 bhit = blue.getc(); //1=hit, 0=release
DerekW2015 0:a9a4c0fd5f8a 65 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
DerekW2015 0:a9a4c0fd5f8a 66 switch (bnum) {
DerekW2015 0:a9a4c0fd5f8a 67 case '1': //number button 1, pause
DerekW2015 0:a9a4c0fd5f8a 68 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 69 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 70 //pause_game();
DerekW2015 0:a9a4c0fd5f8a 71 }
DerekW2015 0:a9a4c0fd5f8a 72 break;
DerekW2015 0:a9a4c0fd5f8a 73 case '2': //number button 2, accelerate
DerekW2015 0:a9a4c0fd5f8a 74 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 75 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 76 left.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 77 right.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 78 } else {
DerekW2015 0:a9a4c0fd5f8a 79 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 80 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 81 }
DerekW2015 0:a9a4c0fd5f8a 82 break;
DerekW2015 0:a9a4c0fd5f8a 83 case '3': //number button 3
DerekW2015 0:a9a4c0fd5f8a 84 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 85 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 86 //add hit code here
DerekW2015 0:a9a4c0fd5f8a 87 } else {
DerekW2015 0:a9a4c0fd5f8a 88 //add release code here
DerekW2015 0:a9a4c0fd5f8a 89 }
DerekW2015 0:a9a4c0fd5f8a 90 break;
DerekW2015 0:a9a4c0fd5f8a 91 case '4': //number button 4, brakes
DerekW2015 0:a9a4c0fd5f8a 92 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 93 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 94 //add hit code here
DerekW2015 0:a9a4c0fd5f8a 95 } else {
DerekW2015 0:a9a4c0fd5f8a 96 //add release code here
DerekW2015 0:a9a4c0fd5f8a 97 }
DerekW2015 0:a9a4c0fd5f8a 98 break;
DerekW2015 0:a9a4c0fd5f8a 99 case '5': //button 5 up arrow
DerekW2015 0:a9a4c0fd5f8a 100 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 101 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 102 //throw_item();
DerekW2015 0:a9a4c0fd5f8a 103 //item_box();
DerekW2015 0:a9a4c0fd5f8a 104 } else {
DerekW2015 0:a9a4c0fd5f8a 105
DerekW2015 0:a9a4c0fd5f8a 106 }
DerekW2015 0:a9a4c0fd5f8a 107 break;
DerekW2015 0:a9a4c0fd5f8a 108 case '6': //button 6 down arrow
DerekW2015 0:a9a4c0fd5f8a 109 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 110 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 111 left.speed(-1.0);
DerekW2015 0:a9a4c0fd5f8a 112 right.speed(-1.0);
DerekW2015 0:a9a4c0fd5f8a 113 } else {
DerekW2015 0:a9a4c0fd5f8a 114 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 115 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 116 }
DerekW2015 0:a9a4c0fd5f8a 117 break;
DerekW2015 0:a9a4c0fd5f8a 118 case '7': //button 7 left arrow
DerekW2015 0:a9a4c0fd5f8a 119 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 120 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 121 left.speed(0.3);
DerekW2015 0:a9a4c0fd5f8a 122 right.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 123 } else {
DerekW2015 0:a9a4c0fd5f8a 124 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 125 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 126 }
DerekW2015 0:a9a4c0fd5f8a 127 break;
DerekW2015 0:a9a4c0fd5f8a 128 case '8': //button 8 right arrow
DerekW2015 0:a9a4c0fd5f8a 129 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 130 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 131 left.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 132 right.speed(0.3);
DerekW2015 0:a9a4c0fd5f8a 133 } else {
DerekW2015 0:a9a4c0fd5f8a 134 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 135 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 136 }
DerekW2015 0:a9a4c0fd5f8a 137 break;
DerekW2015 0:a9a4c0fd5f8a 138 default:
DerekW2015 0:a9a4c0fd5f8a 139 break;
DerekW2015 0:a9a4c0fd5f8a 140 }
DerekW2015 0:a9a4c0fd5f8a 141 }
DerekW2015 0:a9a4c0fd5f8a 142 }
DerekW2015 0:a9a4c0fd5f8a 143 }
DerekW2015 0:a9a4c0fd5f8a 144 }
DerekW2015 0:a9a4c0fd5f8a 145 }