An example PID line following program
Fork of m3pi_LineFollower_PID by
main.cpp
- Committer:
- dpfeiffer
- Date:
- 2016-06-15
- Revision:
- 1:c0b4f4f6952e
- Parent:
- 0:78f9794620a3
File content as of revision 1:c0b4f4f6952e:
#include "mbed.h" #include "m3pi.h" m3pi m3pi; DigitalIn m3pi_IN[] = {(p12)}; // Minimum and maximum motor speeds #define MAX 0.8 #define MIN 0 // PID terms #define P_TERM 1 #define I_TERM 0 #define D_TERM 20 int main() { m3pi.locate(0,1); m3pi.printf("Line PID"); wait(2.0); m3pi.sensor_auto_calibrate(); float right; float left; float current_pos_of_line = 0.0; float previous_pos_of_line = 0.0; float derivative,proportional,integral = 0; float power; float speed = 0.6; m3pi_IN[0].mode(PullUp); while (1) { while (m3pi_IN[0]==0){ m3pi.stop(); } // Get the position of the line. current_pos_of_line = m3pi.line_position(); proportional = current_pos_of_line; // Compute the derivative derivative = current_pos_of_line - previous_pos_of_line; // Compute the integral integral += proportional; // Remember the last position. previous_pos_of_line = current_pos_of_line; // Compute the power power = (proportional * (P_TERM) ) + (integral*(I_TERM)) + (derivative*(D_TERM)) ; // Compute new speeds right = speed+power; left = speed-power; // limit checks if (right < MIN) right = MIN; else if (right > MAX) right = MAX; if (left < MIN) left = MIN; else if (left > MAX) left = MAX; // set speed m3pi.left_motor(left); m3pi.right_motor(right); } }