Hey guys im tryinna write a program dat only 1 joy stick of PS2 push forward but robot follows the line on its own. Joy stick just controls forward or backwards of robot.
Need help /ASAP/
this is code of mine but its not workin
the robot is nor freakin moving
#include <PS2X_lib.h> // includin ps2 controller
float Kp=10,Ki=0.0015,Kd=4; //PID
float error=0, P=0, I=0, D=0, PID_value=0;
float previous_error=0, previous_I=0;
int sensor[6]={0,0,0,0,0,0}; // it has 6 sensors
int sensor_min[6]={1020, 1020, 1020, 1020, 1020, 1020};
int sensor_max[6]={0, 0, 0, 0, 0, 0};
int motorHurd=0; //initial motor speed
void hodloh(void); // first command dat will move the robot
void read_sensor_values(void); // reading sensor values
void PID_tootsooloh(void); // calculating the turns
void chigluuleh(void); // navigatin the robot
void setup(){
pinMode(31,OUTPUT); // just extra 5v from digital inputs
pinMode(8,OUTPUT);
pinMode(9,OUTPUT); // motor driver inputs
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
Serial.begin(57600);
}
void loop ()
{
digitalWrite(31,HIGH);
read_sensor_values();
PID_tootsooloh();
chigluuleh();
}
void read_sensor_values()
{
sensor[0]=analogRead(A2);
sensor[1]=analogRead(A3);
sensor[2]=analogRead(A4);
sensor[3]=analogRead(A5);
sensor[4]=analogRead(A6);
sensor[5]=analogRead(A7);
Serial.print(57600);
Serial.print("\n");
for(int k=0;k<6;k++){
Serial.print(sensor[k]);
if(sensor[k]>150){
sensor[k]=1;
}
else{
sensor[k]=0;
Serial.print(sensor[k]);
}
}
Serial.print("\n");
if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[3]==1)&&(sensor[4]==1)&&(sensor[5]==1) )
error=0;
// stop();
else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==1) )
error=6;
else if((sensor[0]==0)&&(sensor[0]==0)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==1)&&(sensor[5]==1) )
error=5;
else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==1)&&(sensor[5]==0) )
error=4;
else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==1)&&(sensor[4]==1)&&(sensor[5]==0) )
error=3;
else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==1)&&(sensor[4]==0)&&(sensor[5]==0) )
error=1;
else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==1)&&(sensor[3]==1)&&(sensor[4]==0)&&(sensor[5]==0) )
error=0;
else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==1)&&(sensor[4]==1)&&(sensor[5]==0) )
error=-1;
else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==1)&&(sensor[4]==0)&&(sensor[5]==0) )
error=-2;
else if((sensor[0]==0)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0) )
error=-3;
else if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0) )
error=-4;
else if((sensor[0]==1)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0) )
error=-5;
{
if(previous_error<-3){
error=-6;
}
if(previous_error>3){
error=6;
}
}
}
void PID_tootsooloh()
{
P = error;
I = error + previous_I;
D = error-previous_error;
PID_value = (KpP) +KiI+ (Kd*D);
previous_I=I;
previous_error=error;
Serial.print("---");
Serial.print(PID_value); Serial.print(" ");
}
void chigluuleh()
{ motorHurd=map(analogRead(A1),0,1024,-255,255);
if(motorHurd<0){
motorHurd=motorHurd*-1;
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
}
else{
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
analogWrite(8, motorHurd);
analogWrite(9, motorHurd);
motorHurd=map(analogRead(A0),0,1024,-255,255);
if(motorHurd<0){
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
}
else{
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
analogWrite(8, motorHurd);
analogWrite(9, motorHurd);
Serial.print(motorHurd);
Serial.print("\n");
int zuunMotor=motorHurd-PID_value;
int baruunMotor=motorHurd+PID_value;
int y=motorHurd-PID_value;
int x=motorHurd+PID_value;
y=constrain(y,0,255);
x=constrain(x,0,255);
analogWrite(8,y);
analogWrite(9,x);
Serial.print(y);
Serial.print(" ");
Serial.print(x);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
}