Sooner Competitive Robotics / Mbed 2 deprecated IEEE_14_Freescale

Dependencies:   mbed

Fork of IEEE_14_Freescale by IEEE 2014 Mbed

Committer:
soonerbot
Date:
Fri Mar 07 21:49:22 2014 +0000
Revision:
14:a30aa3b29a2e
Parent:
12:925f52da3ba9
Child:
15:b10859606504
ultrasonic development

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"
soonerbot 0:3a3dd78038a6 5
soonerbot 1:c28fac16a109 6 BusOut leds(LED_RED,LED_GREEN,LED_BLUE);
soonerbot 1:c28fac16a109 7 Serial pc(USBTX, USBRX);
soonerbot 0:3a3dd78038a6 8
soonerbot 1:c28fac16a109 9 robot bot;
soonerbot 14:a30aa3b29a2e 10
soonerbot 14:a30aa3b29a2e 11 /*
soonerbot 14:a30aa3b29a2e 12 //actual competition code, kinda
soonerbot 14:a30aa3b29a2e 13 int firstSection(){ // drive forward and measure distance
soonerbot 14:a30aa3b29a2e 14 tmpOut = bot.absDriveForward(targetAngle,3000);
soonerbot 14:a30aa3b29a2e 15 // ping sensor
soonerbot 14:a30aa3b29a2e 16 tmpOut = bot.absDriveForward(targetAngle,3000);
soonerbot 14:a30aa3b29a2e 17 // ping sensor
soonerbot 14:a30aa3b29a2e 18 }
soonerbot 14:a30aa3b29a2e 19 int secondsection(){
soonerbot 14:a30aa3b29a2e 20 // second step
soonerbot 14:a30aa3b29a2e 21 // etc
soonerbot 14:a30aa3b29a2e 22 }
soonerbot 14:a30aa3b29a2e 23 */
soonerbot 14:a30aa3b29a2e 24
soonerbot 0:3a3dd78038a6 25 int main() {
soonerbot 14:a30aa3b29a2e 26 // Initialize variables
soonerbot 14:a30aa3b29a2e 27 leds = 0x2;
soonerbot 1:c28fac16a109 28 char tmpchar = 0;
soonerbot 14:a30aa3b29a2e 29 const int* constbuf; // displays values
soonerbot 10:926f142f16a3 30 int tmpOut;
soonerbot 4:adc885f4ab75 31 double targetAngle=0.0;
soonerbot 14:a30aa3b29a2e 32 DBGPRINT("AA\n\r",1); // to see if robot powers up at least
soonerbot 14:a30aa3b29a2e 33
soonerbot 14:a30aa3b29a2e 34 // Initialize sensors
soonerbot 14:a30aa3b29a2e 35 //hcsr04(2,1) : trigger_out(trigger);
soonerbot 14:a30aa3b29a2e 36
soonerbot 14:a30aa3b29a2e 37 // Loop
soonerbot 0:3a3dd78038a6 38 while(1) {
soonerbot 1:c28fac16a109 39 DBGPRINT("BB\n\r",1);
soonerbot 7:3b2cf7efe5d1 40 leds = leds^0x7; // toggle the LEDs for each loop
soonerbot 1:c28fac16a109 41 tmpchar = pc.getc();
soonerbot 1:c28fac16a109 42
soonerbot 7:3b2cf7efe5d1 43 // all of these movement commands are blocking, so they can't be easily stopped short of resetting the microcontroller
soonerbot 1:c28fac16a109 44 switch(tmpchar){
soonerbot 7:3b2cf7efe5d1 45 case 'e': //drive in a smallish square
soonerbot 7:3b2cf7efe5d1 46 bot.driveForward(0,3000);
soonerbot 7:3b2cf7efe5d1 47 bot.driveForward(-90,0);
soonerbot 7:3b2cf7efe5d1 48 bot.driveForward(-90,3000);
soonerbot 7:3b2cf7efe5d1 49 bot.driveForward(-180,0);
soonerbot 7:3b2cf7efe5d1 50 bot.driveForward(-180,3000);
soonerbot 7:3b2cf7efe5d1 51 bot.driveForward(-270,0);
soonerbot 7:3b2cf7efe5d1 52 bot.driveForward(-270,3000);
soonerbot 7:3b2cf7efe5d1 53 bot.driveForward(0,0);
soonerbot 7:3b2cf7efe5d1 54 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 7:3b2cf7efe5d1 55 break;
soonerbot 7:3b2cf7efe5d1 56 case 'q': //poll the encoders
soonerbot 1:c28fac16a109 57 constbuf = bot.bigenc.getVals();
soonerbot 1:c28fac16a109 58 DBGPRINT("\n\r%d\t%d\t%d\t%d\n\r",constbuf[0],constbuf[1],constbuf[2],constbuf[3]);
soonerbot 1:c28fac16a109 59 break;
soonerbot 7:3b2cf7efe5d1 60 case 'z': //set the current direction to "forward" for the following "go forward/reverse" commands
soonerbot 4:adc885f4ab75 61 targetAngle = bot.gyro.getZDegrees();
soonerbot 4:adc885f4ab75 62 break;
soonerbot 7:3b2cf7efe5d1 63 case 'w': // turn 90 degrees counter clockwise from the starting rotation
soonerbot 7:3b2cf7efe5d1 64 bot.driveForward(90,0);
soonerbot 7:3b2cf7efe5d1 65 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 7:3b2cf7efe5d1 66 break;
soonerbot 7:3b2cf7efe5d1 67 case 'x': // turn 90 degrees clockwise from the starting rotation
soonerbot 6:62d498ee97cf 68 bot.driveForward(-90,0);
soonerbot 6:62d498ee97cf 69 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 6:62d498ee97cf 70 break;
soonerbot 7:3b2cf7efe5d1 71 case 'a': // turn the opposite direction from the starting one
soonerbot 7:3b2cf7efe5d1 72 bot.driveForward(180,0);
soonerbot 6:62d498ee97cf 73 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 1:c28fac16a109 74 break;
soonerbot 7:3b2cf7efe5d1 75 case 'd': // turn back to starting rotation
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 7:3b2cf7efe5d1 78 break;
soonerbot 7:3b2cf7efe5d1 79 case 'W': // drive forward a small bit
soonerbot 9:aff48e331147 80 //bot.driveForward(targetAngle,1000);
soonerbot 10:926f142f16a3 81 //bot.motors.moveForward(100);
soonerbot 11:967469d7e01c 82 tmpOut = bot.absDriveForward(targetAngle,3000);
soonerbot 10:926f142f16a3 83 DBGPRINT("W -> %d\n\r",tmpOut);
soonerbot 12:925f52da3ba9 84 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 85 break;
soonerbot 7:3b2cf7efe5d1 86 case 'E': //drive forward five times as much
soonerbot 4:adc885f4ab75 87 bot.driveForward(targetAngle,5000);
soonerbot 4:adc885f4ab75 88 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 89 break;
soonerbot 7:3b2cf7efe5d1 90 case 'X': // small reverse
soonerbot 10:926f142f16a3 91 //bot.driveForward(targetAngle,-1000);
soonerbot 10:926f142f16a3 92
soonerbot 11:967469d7e01c 93 tmpOut = bot.absDriveForward(targetAngle,-3000);
soonerbot 10:926f142f16a3 94 DBGPRINT("X -> %d\n\r",tmpOut);
soonerbot 12:925f52da3ba9 95 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 96 break;
soonerbot 7:3b2cf7efe5d1 97 case 'C': // big reverse
soonerbot 4:adc885f4ab75 98 bot.driveForward(targetAngle,-5000);
soonerbot 4:adc885f4ab75 99 DBGPRINT("={%f,\t%f,\t%f}\n\r",bot.x,bot.y,bot.rot*180.0/3.14159);
soonerbot 4:adc885f4ab75 100 break;
soonerbot 7:3b2cf7efe5d1 101 case 'p': // poll the gyro
soonerbot 3:a223b0bf8256 102 DBGPRINT("%d\r\n",bot.gyro.getZ());
soonerbot 3:a223b0bf8256 103 break;
soonerbot 7:3b2cf7efe5d1 104 case 'l': //calibrate the gyro ( caution, only use after resetting and before moving, otherwise will break any calibration)
soonerbot 3:a223b0bf8256 105 bot.gyro.calibrate();
soonerbot 3:a223b0bf8256 106 break;
soonerbot 7:3b2cf7efe5d1 107
soonerbot 7:3b2cf7efe5d1 108 // these are all control system modifications which should be fairly well locked down at this point
soonerbot 4:adc885f4ab75 109 case 't':
soonerbot 4:adc885f4ab75 110 bot.pfac*=2;
soonerbot 4:adc885f4ab75 111 DBGPRINT("pfac = %f\r\n",bot.pfac);
soonerbot 4:adc885f4ab75 112 break;
soonerbot 4:adc885f4ab75 113 case 'g':
soonerbot 4:adc885f4ab75 114 bot.pfac/=2;
soonerbot 4:adc885f4ab75 115 DBGPRINT("pfac = %f\r\n",bot.pfac);
soonerbot 4:adc885f4ab75 116 break;
soonerbot 4:adc885f4ab75 117 case 'y':
soonerbot 4:adc885f4ab75 118 bot.ifac*=2;
soonerbot 4:adc885f4ab75 119 DBGPRINT("ifac = %f\r\n",bot.ifac);
soonerbot 4:adc885f4ab75 120 break;
soonerbot 4:adc885f4ab75 121 case 'h':
soonerbot 4:adc885f4ab75 122 bot.ifac/=2;
soonerbot 4:adc885f4ab75 123 DBGPRINT("ifac = %f\r\n",bot.ifac);
soonerbot 4:adc885f4ab75 124 break;
soonerbot 4:adc885f4ab75 125 case 'u':
soonerbot 4:adc885f4ab75 126 bot.dfac*=2;
soonerbot 4:adc885f4ab75 127 DBGPRINT("dfac = %f\r\n",bot.dfac);
soonerbot 4:adc885f4ab75 128 break;
soonerbot 4:adc885f4ab75 129 case 'j':
soonerbot 4:adc885f4ab75 130 bot.dfac/=2;
soonerbot 4:adc885f4ab75 131 DBGPRINT("dfac = %f\r\n",bot.dfac);
soonerbot 4:adc885f4ab75 132 break;
soonerbot 4:adc885f4ab75 133 case 'i':
soonerbot 14:a30aa3b29a2e 134 //put distance ping here
soonerbot 14:a30aa3b29a2e 135 bot.pingLeft.trigger();
soonerbot 14:a30aa3b29a2e 136 wait(1);
soonerbot 14:a30aa3b29a2e 137 float pingresult = bot.pingLeft.inches();
soonerbot 14:a30aa3b29a2e 138 DBGPRINT("Distance = %f\r\n",pingresult);
soonerbot 4:adc885f4ab75 139 break;
soonerbot 4:adc885f4ab75 140 case 'k':
soonerbot 4:adc885f4ab75 141 bot.angfac/=2;
soonerbot 4:adc885f4ab75 142 DBGPRINT("angfac = %f\r\n",bot.angfac);
soonerbot 4:adc885f4ab75 143 break;
soonerbot 4:adc885f4ab75 144 case 'T':
soonerbot 4:adc885f4ab75 145 bot.pfac*=1.05;
soonerbot 4:adc885f4ab75 146 DBGPRINT("pfac = %f\r\n",bot.pfac);
soonerbot 4:adc885f4ab75 147 break;
soonerbot 4:adc885f4ab75 148 case 'G':
soonerbot 4:adc885f4ab75 149 bot.pfac/=1.05;
soonerbot 4:adc885f4ab75 150 DBGPRINT("pfac = %f\r\n",bot.pfac);
soonerbot 4:adc885f4ab75 151 break;
soonerbot 4:adc885f4ab75 152 case 'Y':
soonerbot 4:adc885f4ab75 153 bot.ifac*=1.05;
soonerbot 4:adc885f4ab75 154 DBGPRINT("ifac = %f\r\n",bot.ifac);
soonerbot 4:adc885f4ab75 155 break;
soonerbot 4:adc885f4ab75 156 case 'H':
soonerbot 4:adc885f4ab75 157 bot.ifac/=1.05;
soonerbot 4:adc885f4ab75 158 DBGPRINT("ifac = %f\r\n",bot.ifac);
soonerbot 4:adc885f4ab75 159 break;
soonerbot 4:adc885f4ab75 160 case 'U':
soonerbot 4:adc885f4ab75 161 bot.dfac*=1.05;
soonerbot 4:adc885f4ab75 162 DBGPRINT("dfac = %f\r\n",bot.dfac);
soonerbot 4:adc885f4ab75 163 break;
soonerbot 4:adc885f4ab75 164 case 'J':
soonerbot 4:adc885f4ab75 165 bot.dfac/=1.05;
soonerbot 4:adc885f4ab75 166 DBGPRINT("dfac = %f\r\n",bot.dfac);
soonerbot 4:adc885f4ab75 167 break;
soonerbot 7:3b2cf7efe5d1 168
soonerbot 7:3b2cf7efe5d1 169 // poll the compass ( currently gives bad values )
soonerbot 4:adc885f4ab75 170 case 'Q':
soonerbot 4:adc885f4ab75 171 DBGPRINT("Compass vector = %d\t%d\t%d\r\n",bot.gyro.xmag,bot.gyro.ymag,bot.gyro.zmag);
soonerbot 4:adc885f4ab75 172 break;
soonerbot 7:3b2cf7efe5d1 173
soonerbot 7:3b2cf7efe5d1 174 // brake if we get an unknown command
soonerbot 1:c28fac16a109 175 default:
soonerbot 1:c28fac16a109 176 bot.left.brake();
soonerbot 1:c28fac16a109 177 bot.right.brake();
soonerbot 1:c28fac16a109 178 break;
soonerbot 1:c28fac16a109 179
soonerbot 1:c28fac16a109 180 }
soonerbot 0:3a3dd78038a6 181 }
soonerbot 0:3a3dd78038a6 182 }