Sooner Competitive Robotics / Mbed 2 deprecated IEEE_14_Freescale

Dependencies:   mbed

Fork of IEEE_14_Freescale by IEEE 2014 Mbed

Committer:
sswatek
Date:
Sun Mar 23 08:24:07 2014 +0000
Revision:
34:4ad11cda1eca
Parent:
33:03b0b66038e1
Child:
35:6ef5fbc45672
Basic game logic for first row

Who changed what in which revision?

UserRevisionLine numberNew contents of line
soonerbot 0:3a3dd78038a6 1 #include "mbed.h"
soonerbot 1:c28fac16a109 2 #include "dbgprint.h"
soonerbot 1:c28fac16a109 3 #include "robot.h"
soonerbot 14:a30aa3b29a2e 4 #include "hcsr04.h"
sswatek 33:03b0b66038e1 5 #include "game.h"
soonerbot 0:3a3dd78038a6 6
soonerbot 1:c28fac16a109 7 BusOut leds(LED_RED,LED_GREEN,LED_BLUE);
soonerbot 1:c28fac16a109 8 Serial pc(USBTX, USBRX);
soonerbot 0:3a3dd78038a6 9
soonerbot 1:c28fac16a109 10 robot bot;
sswatek 33:03b0b66038e1 11 gamePlayer game(bot);
soonerbot 15:b10859606504 12 servo s(PTC9);
soonerbot 14:a30aa3b29a2e 13
soonerbot 14:a30aa3b29a2e 14 /*
soonerbot 14:a30aa3b29a2e 15 //actual competition code, kinda
soonerbot 14:a30aa3b29a2e 16 int firstSection(){ // drive forward and measure distance
soonerbot 14:a30aa3b29a2e 17 tmpOut = bot.absDriveForward(targetAngle,3000);
soonerbot 14:a30aa3b29a2e 18 // ping sensor
soonerbot 14:a30aa3b29a2e 19 tmpOut = bot.absDriveForward(targetAngle,3000);
soonerbot 14:a30aa3b29a2e 20 // ping sensor
soonerbot 14:a30aa3b29a2e 21 }
soonerbot 14:a30aa3b29a2e 22 int secondsection(){
soonerbot 14:a30aa3b29a2e 23 // second step
soonerbot 14:a30aa3b29a2e 24 // etc
soonerbot 14:a30aa3b29a2e 25 }
soonerbot 14:a30aa3b29a2e 26 */
soonerbot 14:a30aa3b29a2e 27
soonerbot 0:3a3dd78038a6 28 int main() {
soonerbot 14:a30aa3b29a2e 29 // Initialize variables
soonerbot 14:a30aa3b29a2e 30 leds = 0x2;
soonerbot 1:c28fac16a109 31 char tmpchar = 0;
soonerbot 14:a30aa3b29a2e 32 const int* constbuf; // displays values
soonerbot 10:926f142f16a3 33 int tmpOut;
soonerbot 4:adc885f4ab75 34 double targetAngle=0.0;
soonerbot 14:a30aa3b29a2e 35 DBGPRINT("AA\n\r",1); // to see if robot powers up at least
soonerbot 14:a30aa3b29a2e 36
soonerbot 15:b10859606504 37 //test servo
soonerbot 15:b10859606504 38 s.toPosition(45);
soonerbot 15:b10859606504 39
soonerbot 15:b10859606504 40
soonerbot 15:b10859606504 41 //timer issue navigation test
soonerbot 15:b10859606504 42 bot.absDriveForward(0,50);//assuming the bot stops in this function
soonerbot 15:b10859606504 43 /*
soonerbot 15:b10859606504 44 DBGPRINT("%f",bot.gyro.getZDegrees());
soonerbot 15:b10859606504 45 bot.gyro.stop();//stopping the gyro timer
soonerbot 15:b10859606504 46 //bot.gyro.gyroUpkeepTicker.detach();//stopping the gyro timer
soonerbot 15:b10859606504 47 //use sensor to find distance
soonerbot 15:b10859606504 48 bot.pingLeft.trigger();
soonerbot 15:b10859606504 49 wait(0.1);
soonerbot 15:b10859606504 50 float pingresult = bot.pingLeft.inches();
soonerbot 15:b10859606504 51 DBGPRINT("Distance = %f\r\n",pingresult);
soonerbot 15:b10859606504 52 bot.gyro.start();//stopping the gyro timer
soonerbot 15:b10859606504 53 DBGPRINT("%f",bot.gyro.getZDegrees());
soonerbot 15:b10859606504 54 */
sswatek 23:53cafcd67828 55 Timer dataTimer;
sswatek 23:53cafcd67828 56 int testdata[]={'H','e','l','l','o'};
sswatek 30:4158120cf801 57 //int responseData[17];
sswatek 23:53cafcd67828 58 int response;
sswatek 23:53cafcd67828 59 int gotAck=0;
soonerbot 14:a30aa3b29a2e 60 // Loop
soonerbot 0:3a3dd78038a6 61 while(1) {
soonerbot 1:c28fac16a109 62 DBGPRINT("BB\n\r",1);
soonerbot 7:3b2cf7efe5d1 63 leds = leds^0x7; // toggle the LEDs for each loop
soonerbot 1:c28fac16a109 64 tmpchar = pc.getc();
sswatek 23:53cafcd67828 65 bot.BTLink.procBuf(0x02);
soonerbot 7:3b2cf7efe5d1 66 // all of these movement commands are blocking, so they can't be easily stopped short of resetting the microcontroller
soonerbot 1:c28fac16a109 67 switch(tmpchar){
soonerbot 15:b10859606504 68 /*case 'e': //drive in a smallish square
soonerbot 7:3b2cf7efe5d1 69 bot.driveForward(0,3000);
soonerbot 7:3b2cf7efe5d1 70 bot.driveForward(-90,0);
soonerbot 7:3b2cf7efe5d1 71 bot.driveForward(-90,3000);
soonerbot 7:3b2cf7efe5d1 72 bot.driveForward(-180,0);
soonerbot 7:3b2cf7efe5d1 73 bot.driveForward(-180,3000);
soonerbot 7:3b2cf7efe5d1 74 bot.driveForward(-270,0);
soonerbot 7:3b2cf7efe5d1 75 bot.driveForward(-270,3000);
soonerbot 7:3b2cf7efe5d1 76 bot.driveForward(0,0);
soonerbot 7:3b2cf7efe5d1 77 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 15:b10859606504 78 break;*/
soonerbot 7:3b2cf7efe5d1 79 case 'q': //poll the encoders
soonerbot 1:c28fac16a109 80 constbuf = bot.bigenc.getVals();
soonerbot 1:c28fac16a109 81 DBGPRINT("\n\r%d\t%d\t%d\t%d\n\r",constbuf[0],constbuf[1],constbuf[2],constbuf[3]);
soonerbot 1:c28fac16a109 82 break;
soonerbot 7:3b2cf7efe5d1 83 case 'z': //set the current direction to "forward" for the following "go forward/reverse" commands
soonerbot 4:adc885f4ab75 84 targetAngle = bot.gyro.getZDegrees();
soonerbot 4:adc885f4ab75 85 break;
soonerbot 7:3b2cf7efe5d1 86 case 'w': // turn 90 degrees counter clockwise from the starting rotation
soonerbot 15:b10859606504 87
soonerbot 15:b10859606504 88 s.toPosition(0);
soonerbot 15:b10859606504 89 //bot.driveForward(90,0);
soonerbot 7:3b2cf7efe5d1 90 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 7:3b2cf7efe5d1 91 break;
soonerbot 7:3b2cf7efe5d1 92 case 'x': // turn 90 degrees clockwise from the starting rotation
soonerbot 15:b10859606504 93 s.toPosition(180);
soonerbot 15:b10859606504 94 //bot.driveForward(-90,0);
soonerbot 6:62d498ee97cf 95 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 6:62d498ee97cf 96 break;
soonerbot 7:3b2cf7efe5d1 97 case 'a': // turn the opposite direction from the starting one
soonerbot 15:b10859606504 98 s.toPosition(90);
soonerbot 15:b10859606504 99 //bot.driveForward(180,0);
soonerbot 6:62d498ee97cf 100 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 1:c28fac16a109 101 break;
soonerbot 7:3b2cf7efe5d1 102 case 'd': // turn back to starting rotation
soonerbot 15:b10859606504 103 //bot.driveForward(0,0);
sswatek 18:c834bd26869e 104 response=bot.BTLink.sendCmd(0x02,testdata,5);
sswatek 17:e247d58d9f42 105 DBGPRINT("=%d\n\r",response);
soonerbot 7:3b2cf7efe5d1 106 break;
soonerbot 7:3b2cf7efe5d1 107 case 'W': // drive forward a small bit
soonerbot 9:aff48e331147 108 //bot.driveForward(targetAngle,1000);
soonerbot 10:926f142f16a3 109 //bot.motors.moveForward(100);
soonerbot 11:967469d7e01c 110 tmpOut = bot.absDriveForward(targetAngle,3000);
soonerbot 10:926f142f16a3 111 DBGPRINT("W -> %d\n\r",tmpOut);
soonerbot 12:925f52da3ba9 112 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 113 break;
soonerbot 7:3b2cf7efe5d1 114 case 'E': //drive forward five times as much
soonerbot 15:b10859606504 115 //bot.driveForward(targetAngle,5000);
sswatek 31:4ef53fbd6759 116 bot.absDriveForward(0,290*16);
soonerbot 4:adc885f4ab75 117 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 118 break;
soonerbot 7:3b2cf7efe5d1 119 case 'X': // small reverse
soonerbot 10:926f142f16a3 120 //bot.driveForward(targetAngle,-1000);
soonerbot 10:926f142f16a3 121
soonerbot 11:967469d7e01c 122 tmpOut = bot.absDriveForward(targetAngle,-3000);
soonerbot 10:926f142f16a3 123 DBGPRINT("X -> %d\n\r",tmpOut);
soonerbot 12:925f52da3ba9 124 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 125 break;
soonerbot 7:3b2cf7efe5d1 126 case 'C': // big reverse
soonerbot 15:b10859606504 127 //bot.driveForward(targetAngle,-5000);
sswatek 31:4ef53fbd6759 128 bot.absDriveForward(0,-290*16);
soonerbot 4:adc885f4ab75 129 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 130 break;
soonerbot 7:3b2cf7efe5d1 131 case 'p': // poll the gyro
soonerbot 3:a223b0bf8256 132 DBGPRINT("%d\r\n",bot.gyro.getZ());
soonerbot 3:a223b0bf8256 133 break;
soonerbot 7:3b2cf7efe5d1 134 case 'l': //calibrate the gyro ( caution, only use after resetting and before moving, otherwise will break any calibration)
soonerbot 3:a223b0bf8256 135 bot.gyro.calibrate();
soonerbot 3:a223b0bf8256 136 break;
soonerbot 7:3b2cf7efe5d1 137
soonerbot 7:3b2cf7efe5d1 138 // these are all control system modifications which should be fairly well locked down at this point
soonerbot 4:adc885f4ab75 139 case 't':
sswatek 18:c834bd26869e 140 response=bot.BTLink.sendCmd(0x00,testdata,5);
sswatek 23:53cafcd67828 141 //bot.gyro.stop();
sswatek 23:53cafcd67828 142 dataTimer.start();
sswatek 23:53cafcd67828 143 dataTimer.reset();
sswatek 30:4158120cf801 144 while(1){
sswatek 30:4158120cf801 145 gotAck=bot.BTLink.getAck(response);
sswatek 30:4158120cf801 146 if(gotAck || dataTimer.read_ms()>=500)
sswatek 30:4158120cf801 147 break;
sswatek 30:4158120cf801 148 }
sswatek 23:53cafcd67828 149 dataTimer.stop();
sswatek 23:53cafcd67828 150 //bot.gyro.start();
sswatek 18:c834bd26869e 151 //bot.pfac*=2;
sswatek 18:c834bd26869e 152 //DBGPRINT("pfac = %f\r\n",bot.pfac);
sswatek 23:53cafcd67828 153 DBGPRINT("Mode0=%d, %d, %d [%d]\n\r",response,bot.BTLink.bufSize(), gotAck, dataTimer.read_ms());
soonerbot 4:adc885f4ab75 154 break;
soonerbot 4:adc885f4ab75 155 case 'g':
sswatek 29:1132155bc7da 156 DBGPRINT("full rotation %d,%f -> ",bot.gyro.getZ(),bot.gyro.getZDegrees());
sswatek 33:03b0b66038e1 157 for(int i=0;i<36;i++){
sswatek 33:03b0b66038e1 158 bot.smoothMove((8000.0/360.0)*(10.0), 1, 40);
sswatek 33:03b0b66038e1 159 }
sswatek 29:1132155bc7da 160 DBGPRINT(" %d,%f\r\n",bot.gyro.getZ(),bot.gyro.getZDegrees());
soonerbot 4:adc885f4ab75 161 break;
soonerbot 4:adc885f4ab75 162 case 'y':
sswatek 26:ade7c813538f 163 bot.pollForShapes();
soonerbot 4:adc885f4ab75 164 break;
soonerbot 4:adc885f4ab75 165 case 'h':
sswatek 29:1132155bc7da 166 DBGPRINT("full rotation %d,%f -> ",bot.gyro.getZ(),bot.gyro.getZDegrees());
sswatek 29:1132155bc7da 167 bot.smoothMove(-8000, 1, 40);
sswatek 29:1132155bc7da 168 DBGPRINT(" %d,%f\r\n",bot.gyro.getZ(),bot.gyro.getZDegrees());
soonerbot 4:adc885f4ab75 169 break;
soonerbot 4:adc885f4ab75 170 case 'u':
sswatek 27:688409727452 171 bot.pollForRigs();
soonerbot 4:adc885f4ab75 172 break;
soonerbot 4:adc885f4ab75 173 case 'j':
sswatek 31:4ef53fbd6759 174 DBGPRINT("LeftStable (15,8) = %f\r\n",bot.pingLeft.getStablePoll());
soonerbot 4:adc885f4ab75 175 break;
soonerbot 4:adc885f4ab75 176 case 'i':
soonerbot 14:a30aa3b29a2e 177 //put distance ping here
soonerbot 14:a30aa3b29a2e 178 bot.pingLeft.trigger();
sswatek 30:4158120cf801 179 dataTimer.start();
sswatek 30:4158120cf801 180 dataTimer.reset();
sswatek 30:4158120cf801 181 while(bot.pingLeft.measuring && dataTimer.read_ms()<300);
sswatek 30:4158120cf801 182 dataTimer.stop();
sswatek 30:4158120cf801 183 DBGPRINT("Distance = %f\r\n",bot.pingLeft.inches());
soonerbot 4:adc885f4ab75 184 break;
soonerbot 4:adc885f4ab75 185 case 'k':
sswatek 30:4158120cf801 186 dataTimer.start();
sswatek 30:4158120cf801 187 for(int i=0;i<100;i++){
sswatek 30:4158120cf801 188 bot.pingLeft.trigger();
sswatek 30:4158120cf801 189 dataTimer.reset();
sswatek 30:4158120cf801 190 while(bot.pingLeft.measuring && dataTimer.read_ms()<300);
sswatek 30:4158120cf801 191 DBGPRINT("Distance %d = %f\r\n",i,bot.pingLeft.inches());
sswatek 30:4158120cf801 192 }
sswatek 30:4158120cf801 193 dataTimer.stop();
sswatek 26:ade7c813538f 194 //bot.angfac/=2;
sswatek 26:ade7c813538f 195 //DBGPRINT("angfac = %f\r\n",bot.angfac);
soonerbot 4:adc885f4ab75 196 break;
soonerbot 4:adc885f4ab75 197 case 'T':
sswatek 33:03b0b66038e1 198 DBGPRINT("Finding Gap\r\n",1);
sswatek 33:03b0b66038e1 199 game.checkWaves();
soonerbot 4:adc885f4ab75 200 break;
soonerbot 4:adc885f4ab75 201 case 'G':
sswatek 34:4ad11cda1eca 202 DBGPRINT("Running First Row\r\n",1);
sswatek 34:4ad11cda1eca 203 game.runFirstRow();
sswatek 26:ade7c813538f 204 //bot.pfac/=1.05;
sswatek 26:ade7c813538f 205 //DBGPRINT("pfac = %f\r\n",bot.pfac);
soonerbot 4:adc885f4ab75 206 break;
soonerbot 4:adc885f4ab75 207 case 'Y':
sswatek 26:ade7c813538f 208 //bot.ifac*=1.05;
sswatek 26:ade7c813538f 209 //DBGPRINT("ifac = %f\r\n",bot.ifac);
soonerbot 4:adc885f4ab75 210 break;
soonerbot 4:adc885f4ab75 211 case 'H':
sswatek 26:ade7c813538f 212 //bot.ifac/=1.05;
sswatek 26:ade7c813538f 213 //DBGPRINT("ifac = %f\r\n",bot.ifac);
soonerbot 4:adc885f4ab75 214 break;
soonerbot 4:adc885f4ab75 215 case 'U':
sswatek 26:ade7c813538f 216 //bot.dfac*=1.05;
sswatek 26:ade7c813538f 217 //DBGPRINT("dfac = %f\r\n",bot.dfac);
soonerbot 4:adc885f4ab75 218 break;
soonerbot 4:adc885f4ab75 219 case 'J':
sswatek 26:ade7c813538f 220 //bot.dfac/=1.05;
sswatek 26:ade7c813538f 221 //DBGPRINT("dfac = %f\r\n",bot.dfac);
soonerbot 4:adc885f4ab75 222 break;
soonerbot 7:3b2cf7efe5d1 223
soonerbot 7:3b2cf7efe5d1 224 // poll the compass ( currently gives bad values )
soonerbot 4:adc885f4ab75 225 case 'Q':
sswatek 28:c7e8d2db03f5 226 //bot.gyro.checkCompass();
sswatek 28:c7e8d2db03f5 227 DBGPRINT("Compass vector = %d\t%d\t%d\t%f\r\n",bot.gyro.xmag,bot.gyro.ymag,bot.gyro.zmag,bot.gyro.compDir*180.0/3.14159);
soonerbot 4:adc885f4ab75 228 break;
soonerbot 7:3b2cf7efe5d1 229
soonerbot 7:3b2cf7efe5d1 230 // brake if we get an unknown command
soonerbot 1:c28fac16a109 231 default:
soonerbot 15:b10859606504 232 //bot.left.brake();
soonerbot 15:b10859606504 233 //bot.right.brake();
soonerbot 1:c28fac16a109 234 break;
soonerbot 1:c28fac16a109 235
soonerbot 1:c28fac16a109 236 }
soonerbot 0:3a3dd78038a6 237 }
soonerbot 0:3a3dd78038a6 238 }