Question: implement pid in this code please. The code works good with following the line but not very good. And I dont know how to implement

implement pid in this code please. The code works good with following the line but not very good. And I dont know how to implement pid into the code as I saw pid makes tracking of the line more accurate and fast : #define LM_EN 8// Delay modified
#define LM_19
#define LM_210
#define RM_111
#define RM_212
#define RM_EN 13
#define TRIG 22
#define ECHO 23
#define UServo 24
#define IR_L242
#define IR_L141
#define IR_M 40
#define IR_R139
#define IR_R238
#include
Servo US_servo;
byte OUTPINS[]={LM_EN, LM_1, LM_2, RM_EN, RM_1, RM_2, TRIG};
byte INPINS[]={IR_L2, IR_L1, IR_M, IR_R1, IR_R2, ECHO};
void setup(){
for (int i =0; i < sizeof(OUTPINS); i++) pinMode(OUTPINS[i], OUTPUT);
for (int i =0; i < sizeof(INPINS); i++) pinMode(INPINS[i], INPUT);
US_servo.attach(UServo);
US_servo.write(90);
Serial.begin(9600);
Serial1.begin(9600); // BT Module connected to RX1
}
int dist, ldist, rdist;
byte spd;
boolean sL2, sL1, sM, sR1, sR2;
void loop(){
sL2= digitalRead(IR_L2);
sL1= digitalRead(IR_L1);
sM = digitalRead(IR_M);
sR1= digitalRead(IR_R1);
sR2= digitalRead(IR_R2);
Serial.print(sL2);
Serial.print("");
Serial.print(sL1);
Serial.print("");
Serial.print(sM);
Serial.print("");
Serial.print(sR1);
Serial.print("");
Serial.println(sR2);
if (!sL2 && !sL1 && !sM && !sR1 && !sR2){//00000
{
car_control(HIGH,100, HIGH, 100); // move back slowly
}
} else if (!sL2 && !sL1 && !sM && !sR1 && sR2){//00001
{
car_control(LOW,250, HIGH, 155); // turn right
delay(0);
}
} else if (!sL2 && !sL1 && !sM && sR1 && !sR2){//00010
{
car_control(LOW,250, LOW, 155); // Sharp turn right
delay(0);
}
} else if (!sL2 && !sL1 && !sM && sR1 && sR2){//00011
{
car_control(LOW,250, LOW, 90); // Wide turn right
delay(0);
}
} else if (!sL2 && !sL1 && sM && sR1 && sR2){//00111
{
car_control(LOW,255, HIGH, 155); // right by 90
delay(600);
}
} else if (!sL2 && sL1 && sM && sR1 && sR2){//01111
{
car_control(LOW,255, HIGH, 155); // right by 90
delay(600);
}
}else if (!sL2 && !sL1 && sM && sR1 && !sR2){//00110
{
car_control(LOW,110, LOW, 100); // go straight
delay(0);
}
} else if (!sL2 && !sL1 && sM && !sR1 && !sR2){//00100
{
car_control(LOW,100, LOW, 100); // go straight
delay(0);
}
} else if (sL2 && !sL1 && !sM && !sR1 && !sR2){//10000
{
car_control(HIGH,155, LOW, 250); // turn left
delay(0);
}
} else if (!sL2 && sL1 && !sM && !sR1 && !sR2){//01000
{
car_control(LOW,155, LOW, 250); // sharp turn left
delay(0);
}
} else if (sL2 && sL1 && !sM && !sR1 && !sR2){//11000
{
car_control(LOW,90, LOW, 220); // wide turn left
delay(0);
}
} else if (!sL2 && sL1 && sM && !sR1 && !sR2){//01100
{
car_control(LOW,100, LOW, 110); // go straight
delay(0);
}
} else if (sL2 && sL1 && sM && !sR1 && !sR2){//11100
{
car_control(HIGH,155, LOW, 255); // turn left by 90
delay(600);
}
} else if (sL2 && sL1 && sM && sR1 && !sR2){//11110
{
car_control(HIGH,155, LOW, 255); // turn left by 90
delay(600);
}
}else if (!sL2 && sL1 && sM && sR1 && !sR2){//01110
{
car_control(LOW,100, LOW, 100); // go straight
delay(0);
}
} else if (sL2 && sL1 && sM && sR1 && sR2){//11111
{
car_control(HIGH,255, LOW, 255); // u turn
delay(2000);
}
}
}
void car_control(boolean Ldir, byte Lspd, boolean Rdir, byte Rspd){
digitalWrite(LM_1, Ldir);
digitalWrite(LM_2,!Ldir);
analogWrite(LM_EN, Lspd);
digitalWrite(RM_1, Rdir);
digitalWrite(RM_2,!Rdir);
analogWrite(RM_EN, Rspd);
}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!