Dependencies:   Motor

(notes)

Committer:
DerekW2015
Date:
Mon Dec 10 01:46:53 2018 +0000
Revision:
7:ee46a1d4227b
Parent:
6:57a0323bb6b7
Child:
8:92bf0cc337b5
Change Thread::wait to ThisThread::sleep_for

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
sli425 3:6c749bff51aa 14 //Game state variables
sli425 3:6c749bff51aa 15 int progress = 0;
sli425 3:6c749bff51aa 16 int current_item;
sli425 3:6c749bff51aa 17 int speed;
sli425 3:6c749bff51aa 18 int max_speed;
sli425 3:6c749bff51aa 19 int acceleration;
sli425 3:6c749bff51aa 20 int cstate;
DerekW2015 6:57a0323bb6b7 21 bool collide = false;
sli425 3:6c749bff51aa 22
DerekW2015 0:a9a4c0fd5f8a 23 // Global game actions
DerekW2015 0:a9a4c0fd5f8a 24 bool game_paused = false;
DerekW2015 0:a9a4c0fd5f8a 25 void pause_game() {
DerekW2015 4:e9bb401ef608 26 game_paused = !game_paused;
DerekW2015 0:a9a4c0fd5f8a 27 // code to tell other mbeds game is paused
DerekW2015 0:a9a4c0fd5f8a 28 }
DerekW2015 0:a9a4c0fd5f8a 29
DerekW2015 0:a9a4c0fd5f8a 30 // Thread for detecting item boxes
DerekW2015 0:a9a4c0fd5f8a 31 int sensor_addr = 41 << 1;
DerekW2015 0:a9a4c0fd5f8a 32 void item_thread() {
DerekW2015 0:a9a4c0fd5f8a 33 // Read data from color sensor (Clear/Red/Green/Blue)
DerekW2015 0:a9a4c0fd5f8a 34 while (true) {
DerekW2015 0:a9a4c0fd5f8a 35 myRGBled.write(1.0,0.0,0.0); //red
DerekW2015 7:ee46a1d4227b 36 ThisThread::sleep_for(2000);
DerekW2015 0:a9a4c0fd5f8a 37 myRGBled.write(0.0,1.0,0.0); //green
DerekW2015 7:ee46a1d4227b 38 ThisThread::sleep_for(2000);
DerekW2015 0:a9a4c0fd5f8a 39 myRGBled.write(0.0,0.0,1.0); //blue
DerekW2015 7:ee46a1d4227b 40 ThisThread::sleep_for(2000);
DerekW2015 0:a9a4c0fd5f8a 41 myRGBled.write(1.0,0.2,0.0); //yellow = red + some green
DerekW2015 7:ee46a1d4227b 42 ThisThread::sleep_for(2000);
DerekW2015 0:a9a4c0fd5f8a 43 }
DerekW2015 1:ad77fbbd36cd 44 }
DerekW2015 0:a9a4c0fd5f8a 45
sli425 3:6c749bff51aa 46 // Thread for checking rgb sensor values and updating game variables
sli425 3:6c749bff51aa 47 // Change later depending on behavior of RGB sensor and colors used
sli425 3:6c749bff51aa 48 int thresh = 150; //change this depending on RGB values
sli425 3:6c749bff51aa 49 void check_RGB() {
sli425 3:6c749bff51aa 50 rgbsensor.update();
sli425 3:6c749bff51aa 51 int C_value = rgbsensor.get_C();
sli425 3:6c749bff51aa 52 int R_value = rgbsensor.get_R();
sli425 3:6c749bff51aa 53 int G_value = rgbsensor.get_G();
sli425 3:6c749bff51aa 54 int B_value = rgbsensor.get_B();
sli425 3:6c749bff51aa 55 if(C_value > thresh && R_value > thresh && G_value > thresh && B_value > thresh && current_item == 0) { //Check for if cart runs over an item box
sli425 3:6c749bff51aa 56 current_item = rand() % 4 + 1; //change this depending on items implemented and random item alg
sli425 3:6c749bff51aa 57 cstate = 0;
sli425 3:6c749bff51aa 58 }
sli425 3:6c749bff51aa 59 else if(C_value > thresh && R_value > thresh && G_value > thresh && B_value > thresh) { //Check for if cart runs over a speed boost panel
sli425 3:6c749bff51aa 60 max_speed = 1; //change this depending on speed up panel algs
sli425 3:6c749bff51aa 61 cstate = 0;
sli425 3:6c749bff51aa 62 }
sli425 3:6c749bff51aa 63 else if(C_value > thresh && R_value > thresh && G_value > thresh && B_value > thresh) { //Check if cart collides with wall
DerekW2015 6:57a0323bb6b7 64 collide = true;
sli425 3:6c749bff51aa 65 }
sli425 3:6c749bff51aa 66 else if(C_value > thresh && R_value > thresh && G_value > thresh && B_value > thresh) { //Check if cart reaches next checkpoint. cstate is set to 1 upon seeing first color of checkpoint
sli425 3:6c749bff51aa 67 cstate = 1;
sli425 3:6c749bff51aa 68 }
sli425 3:6c749bff51aa 69 else if(C_value > thresh && R_value > thresh && G_value > thresh && B_value > thresh && cstate == 1) {
sli425 3:6c749bff51aa 70 //Second part of checking if cart reaches next checkpoint. If the previous color was passed through previously, updates checkpoint progress
sli425 3:6c749bff51aa 71 cstate = 0;
sli425 3:6c749bff51aa 72 progress++;
sli425 3:6c749bff51aa 73 }
sli425 3:6c749bff51aa 74 else {
sli425 3:6c749bff51aa 75 cstate = 0;
sli425 3:6c749bff51aa 76 }
sli425 3:6c749bff51aa 77 }
sli425 3:6c749bff51aa 78
DerekW2015 2:b57d7156830c 79 // Define threads
DerekW2015 6:57a0323bb6b7 80 Thread thread1;
DerekW2015 6:57a0323bb6b7 81 Thread thread2;
DerekW2015 2:b57d7156830c 82
DerekW2015 0:a9a4c0fd5f8a 83 int main() {
DerekW2015 0:a9a4c0fd5f8a 84 // Start threads
DerekW2015 0:a9a4c0fd5f8a 85 thread1.start(item_thread);
DerekW2015 6:57a0323bb6b7 86 thread2.start(check_RGB);
DerekW2015 0:a9a4c0fd5f8a 87
DerekW2015 0:a9a4c0fd5f8a 88 // Bluetooth controller code
DerekW2015 0:a9a4c0fd5f8a 89 char bnum=0;
DerekW2015 0:a9a4c0fd5f8a 90 char bhit=0;
DerekW2015 0:a9a4c0fd5f8a 91 while(1) {
DerekW2015 0:a9a4c0fd5f8a 92 if (blue.getc()=='!') {
DerekW2015 0:a9a4c0fd5f8a 93 if (blue.getc()=='B') { //button data packet
DerekW2015 0:a9a4c0fd5f8a 94 bnum = blue.getc(); //button number
DerekW2015 0:a9a4c0fd5f8a 95 bhit = blue.getc(); //1=hit, 0=release
DerekW2015 0:a9a4c0fd5f8a 96 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
DerekW2015 0:a9a4c0fd5f8a 97 switch (bnum) {
DerekW2015 0:a9a4c0fd5f8a 98 case '1': //number button 1, pause
DerekW2015 0:a9a4c0fd5f8a 99 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 100 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 101 //pause_game();
DerekW2015 0:a9a4c0fd5f8a 102 }
DerekW2015 0:a9a4c0fd5f8a 103 break;
DerekW2015 0:a9a4c0fd5f8a 104 case '2': //number button 2, accelerate
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 left.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 108 right.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 109 } else {
DerekW2015 0:a9a4c0fd5f8a 110 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 111 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 112 }
DerekW2015 0:a9a4c0fd5f8a 113 break;
DerekW2015 0:a9a4c0fd5f8a 114 case '3': //number button 3
DerekW2015 0:a9a4c0fd5f8a 115 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 116 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 117 //add hit code here
DerekW2015 0:a9a4c0fd5f8a 118 } else {
DerekW2015 0:a9a4c0fd5f8a 119 //add release code here
DerekW2015 0:a9a4c0fd5f8a 120 }
DerekW2015 0:a9a4c0fd5f8a 121 break;
DerekW2015 0:a9a4c0fd5f8a 122 case '4': //number button 4, brakes
DerekW2015 0:a9a4c0fd5f8a 123 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 124 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 125 //add hit code here
DerekW2015 0:a9a4c0fd5f8a 126 } else {
DerekW2015 0:a9a4c0fd5f8a 127 //add release code here
DerekW2015 0:a9a4c0fd5f8a 128 }
DerekW2015 0:a9a4c0fd5f8a 129 break;
DerekW2015 0:a9a4c0fd5f8a 130 case '5': //button 5 up arrow
DerekW2015 0:a9a4c0fd5f8a 131 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 132 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 133 //throw_item();
DerekW2015 0:a9a4c0fd5f8a 134 //item_box();
DerekW2015 0:a9a4c0fd5f8a 135 } else {
DerekW2015 0:a9a4c0fd5f8a 136
DerekW2015 0:a9a4c0fd5f8a 137 }
DerekW2015 0:a9a4c0fd5f8a 138 break;
DerekW2015 0:a9a4c0fd5f8a 139 case '6': //button 6 down arrow
DerekW2015 0:a9a4c0fd5f8a 140 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 141 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 142 left.speed(-1.0);
DerekW2015 0:a9a4c0fd5f8a 143 right.speed(-1.0);
DerekW2015 0:a9a4c0fd5f8a 144 } else {
DerekW2015 0:a9a4c0fd5f8a 145 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 146 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 147 }
DerekW2015 0:a9a4c0fd5f8a 148 break;
DerekW2015 0:a9a4c0fd5f8a 149 case '7': //button 7 left arrow
DerekW2015 0:a9a4c0fd5f8a 150 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 151 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 152 left.speed(0.3);
DerekW2015 0:a9a4c0fd5f8a 153 right.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 154 } else {
DerekW2015 0:a9a4c0fd5f8a 155 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 156 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 157 }
DerekW2015 0:a9a4c0fd5f8a 158 break;
DerekW2015 0:a9a4c0fd5f8a 159 case '8': //button 8 right arrow
DerekW2015 0:a9a4c0fd5f8a 160 if (bhit=='1') {
DerekW2015 0:a9a4c0fd5f8a 161 //myled = bnum - '0'; //current button number will appear on LEDs
DerekW2015 0:a9a4c0fd5f8a 162 left.speed(1.0);
DerekW2015 0:a9a4c0fd5f8a 163 right.speed(0.3);
DerekW2015 0:a9a4c0fd5f8a 164 } else {
DerekW2015 0:a9a4c0fd5f8a 165 left.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 166 right.speed(0.0);
DerekW2015 0:a9a4c0fd5f8a 167 }
DerekW2015 0:a9a4c0fd5f8a 168 break;
DerekW2015 0:a9a4c0fd5f8a 169 default:
DerekW2015 0:a9a4c0fd5f8a 170 break;
DerekW2015 0:a9a4c0fd5f8a 171 }
DerekW2015 0:a9a4c0fd5f8a 172 }
DerekW2015 0:a9a4c0fd5f8a 173 }
DerekW2015 0:a9a4c0fd5f8a 174 }
DerekW2015 0:a9a4c0fd5f8a 175 }
DerekW2015 0:a9a4c0fd5f8a 176 }