Basic Line Following Program motors: p25, p10 inputs: p15, p16 Current settings: lineToSpeedFactor = 10 / 3 speedModifier = -4
Dependencies: mbed
Fork of RenBuggyLineFollower by
This small program lets a buggy follow a line (black line on white background)
Diff: main.cpp
- Revision:
- 4:8f614e0b1cea
- Parent:
- 3:936111f70e37
- Child:
- 5:569a11ffee94
--- a/main.cpp Thu Jul 14 10:57:20 2016 +0000 +++ b/main.cpp Thu Jul 14 15:10:49 2016 +0000 @@ -14,67 +14,67 @@ PwmOut pwm0(p25); PwmOut pwm1(p10); -float Lmotor; -float Rmotor; +float lMotor; +float rMotor; float newLine; float oldLine; -bool searching; -int counter; +bool isSearching; +int counter; -void getMotorSpeeds(float a,float b){ +void computeMotorSpeeds(float a,float b){ float inputs[2] = {a,b}; - float max_speed = 1.0; - Lmotor = 0; - Rmotor = 0; - newLine = 0; - float line_to_speed_factor = max_speed/0.3; - for(int i = 0;i<2;++i){ - newLine += inputs[i]*(i+1); + const float MAXSPEED = 1.0; + lMotor = 0.0; + rMotor = 0.0; + newLine = 0.0; + float lineToSpeedFactor = MAXSPEED / 0.3; + for (int i = 0; i < 2; ++i) { + newLine += inputs[i] * (i + 1); } - float sum = 0; - for (int i = 0;i<2;++i){ + float sum = 0.0; + for (int i = 0; i < 2; ++i) sum += inputs[i]; - } newLine = newLine / sum; - if((a<0.2)&&(b<0.2)){ - if(oldLine>1.5) - newLine = 2; + if ((a < 0.35) && (b < 0.35)) { + if (oldLine > 1.5) + newLine = 2.0; else - newLine = 1; - searching = true; + newLine = 1.0; + oldLine = newLine; + isSearching = true; } - if(searching){ - if(abs(a - b)<0.2){ + if (isSearching) { + if ( oldLine > 1.5) + newLine = 2.0; + else + newLine = 1.0; + if (abs(a - b) < 0.2) newLine = oldLine; - } + else + isSearching = false; counter++; - if(counter>300){ - newLine = 3 - oldLine; + if (counter > 300) { + newLine = 3.0 - oldLine; counter = 0; } - else{ - searching = false; - } } oldLine = newLine; - Lmotor = newLine*line_to_speed_factor-4; - Rmotor = 2-(newLine*line_to_speed_factor-4); - if(Lmotor>max_speed){ - Lmotor = max_speed; - } - if(Rmotor>max_speed){ - Rmotor = max_speed; - } + lMotor = newLine * lineToSpeedFactor - 4.0; + rMotor = 2.0-(newLine * lineToSpeedFactor - 4.0); + if (lMotor > MAXSPEED) + lMotor = MAXSPEED; + if (rMotor > MAXSPEED) + rMotor = MAXSPEED; } int main() { - searching = false; + isSearching = false; counter = 0; - while(true){ - getMotorSpeeds(ain0.read(),ain1.read()); - pwm0 = Lmotor; - pwm1 = Rmotor; + while (true) { + computeMotorSpeeds(ain0.read(), ain1.read()); + pwm0 = lMotor; + pwm1 = rMotor; wait_ms(10); } } \ No newline at end of file