First team commit
Fork of LineFollower by
LineFollower.cpp
- Committer:
- blu12758
- Date:
- 2014-03-24
- Revision:
- 11:88aa683f1c94
- Parent:
- 10:a9233fa6240d
File content as of revision 11:88aa683f1c94:
#include "LineFollower.h" #include "Motor.h" #include "mbed.h" #include <stdint.h> /** Create a Line Follower interface for an IR Sensor Array * * @param ir1 IR Sensor 1 * @param ir2 IR Sensor 2 * @param ir3 IR Sensor 3 * @param ir4 IR Sensor 4 * @param ir5 IR Sensor 5 * @param ir6 IR Sensor 6 * @param ir7 IR Sensor 7 * @param ir8 IR Sensor 8 */ LineFollower::LineFollower(PinName ir1, PinName ir2, PinName ir3, PinName ir4, PinName ir5, PinName ir6, PinName ir7, PinName ir8): array(ir1, ir2, ir3, ir4, ir5, ir6, ir7, ir8) {} /** Read the value of a LineFollower object * * @return The value of the Sensor */ uint8_t LineFollower::read(){ return array; } float LineFollower::analogFollow(Motor l, Motor r, float maxspeed, float sp_adj_mult){ float sum = 0; int count = 0; for(int i = 0; i < 8; i++) if(!(array & (1<<i))){ sum += (i+1); count++; } if(count == 0 || count == 8) return -1; float center = sum/count; //Change the sp_adj_mult to change how drastic your adjustments are. 0-1 float speed_adjust = sp_adj_mult*(center-4.5)/(3.5)*maxspeed; //Also, can change maxspeed if the thing is too fast overall. 0-1 if(center > 4.5){ l.speed(maxspeed - speed_adjust); r.speed(maxspeed); } else if(center < 4.5){ l.speed(maxspeed); r.speed(maxspeed + speed_adjust); } else{ l.speed(maxspeed); r.speed(maxspeed); } return center; } /** Follow a line * * @param l left drive motor * @param r right drive motor */ /* int LineFollower::followLine(Motor l, Motor r){ int count = 0; for(int i = 0; i<8; i++){ count += (array&(1<<i))?0:1; } switch(count){ case 1: if(this->read() == 0x7F){ l.speed(-(0.75 * maxspeed)); r.speed(maxspeed); } else if(this->read() == 0xFE){ l.speed(maxspeed); r.speed(-(0.75 * maxspeed)); } break; case 2: if(this->read() == 0xE7){ l.speed(maxspeed); r.speed(maxspeed); } else if(this->read() == 0x3F){ l.speed(-(0.5 * maxspeed)); r.speed(maxspeed); } else if(this->read() == 0xFC){ l.speed(maxspeed); r.speed(-(0.5 * maxspeed)); } else if(this->read() == 0x9F){ l.speed(0); r.speed(maxspeed); } else if(this->read() == 0xF9){ l.speed(maxspeed); r.speed(0); } else if(this->read() == 0xCF){ l.speed(0.5*maxspeed); r.speed(maxspeed); } else if(this->read() == 0xF3){ l.speed(maxspeed); r.speed(0.5*maxspeed); } break; case 3: if(this->read() == 0x1F){ l.speed(-(0.25*maxspeed)); r.speed(maxspeed); } else if(this->read() == 0xF8){ l.speed(maxspeed); r.speed(-(0.25*maxspeed)); } else if(this->read() == 0x8F){ l.speed(0.25*maxspeed); r.speed(maxspeed); } else if(this->read() == 0xF1){ l.speed(maxspeed); r.speed(0.25*maxspeed); } else if(this->read() == 0xC7){ l.speed(0.5*maxspeed); r.speed(maxspeed); } else if(this->read() == 0xE3){ l.speed(maxspeed); r.speed(0.5*maxspeed); } break; default: break; } return count; } */