i couldn't fix this, if i slow it down it gets worse. i need your help thanks
sorry for my English
middle sensor detect line // go straight
left or right sensor detect line // turn that way by running one motor forward one motor backward.
The problem is that when i put my robot into pist, it goes straight but after it turns it doesn't go straight it always goes like in the video.
I hope i could explain. I am trying to figure this out or what it causes to do that I've come up nothing so far.
edit
#define SensorSol 13
#define SensorOrta 12
#define SensorSag 11
#define MotorR1 9
#define MotorR2 8 // Sensör ve Motorların Arduino'ya bağladığımız pinlerini tanımlıyoruz.
#define MotorRE 10
#define MotorL1 7
#define MotorL2 6
#define MotorLE 5
#define s0 0
#define s1 1
#define s2 3
#define s3 2
#define sensorOut 4
int K, Y, M = 0;
void setup() {
pinMode(SensorSol, INPUT);
pinMode(SensorOrta, INPUT);
pinMode(SensorSag, INPUT);
pinMode(MotorR1, OUTPUT); // Sensör ve Motorların Giriş-Çıkış bilgilerini belirtiyoruz.
pinMode(MotorR2, OUTPUT);
pinMode(MotorL1, OUTPUT);
pinMode(MotorL2, OUTPUT);
pinMode(s0, OUTPUT);//S0, S1, S2 ve S3 pinlerini OUTPUT olarak tanımlıyoruz
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(sensorOut, INPUT);//OUT pinini INPUT olarak tanımlıyoruz
digitalWrite(s1,LOW); //Frekans ölçeğimizi %20 olarak tanımlıyoruz
digitalWrite(s0,HIGH);
}
void loop() {
// renk okuma scanning color
digitalWrite(s2, LOW); //Kırmızıyı filtrelemek için
digitalWrite(s3, LOW);
K = pulseIn(sensorOut, LOW);//OUT pini üzerindeki LOW süresini okur
K=map(K,24,86,255,0);
digitalWrite(s2, HIGH); //Yeşili filtrelemek için
digitalWrite(s3, HIGH);
Y = pulseIn(sensorOut, LOW); //OUT pini üzerindeki LOW süresini okur
Y=map(Y,40,115,255,0);
digitalWrite(s2, LOW); //Maviyi filtrelemek için
digitalWrite(s3, HIGH);
M = pulseIn(sensorOut, LOW);//OUT pini üzerindeki LOW süresini okur
M=map(M,31,84,255,0);
//renk okuma bitiş
// GİDİş forward
if (K>40 and M>40 and Y>40){ // düz zemin
if(digitalRead(SensorSol) == 0 && digitalRead(SensorOrta) == 1 && digitalRead(SensorSag) == 0){ // Orta sensör çizgiyi gördüğünde robot ileri gitsin.
ileri(175);
}
}
if(Y<235 and Y>M and Y>K){ // yeşil
if(digitalRead(SensorSol) == 0 && digitalRead(SensorOrta) == 1 && digitalRead(SensorSag) == 0){ // Orta sensör çizgiyi gördüğünde robot ileri gitsin.
ileri(225);
}
}
if(M<246 and M>K and M>Y){ // mavi
if(digitalRead(SensorSol) == 0 && digitalRead(SensorOrta) == 1 && digitalRead(SensorSag) == 0){ // Orta sensör çizgiyi gördüğünde robot ileri gitsin.
ileri(120);
}
}
if(K<238 and K>M and K>Y){
delay(500);
dur();
}
// turnings
if(digitalRead(SensorSol) == 0 && digitalRead(SensorOrta) == 0 && digitalRead(SensorSag) == 1){ // Sağ sensör çizgiyi gördüğünde robot sağa dönsün.
sag();
}
if(digitalRead(SensorSol) == 1 && digitalRead(SensorOrta) == 0 && digitalRead(SensorSag) == 0){ // Sol sensör çizgiyi gördüğünde robot sola dönsün.
sol();
}
// GİDİŞ BİTİŞ
}
// functions to move
void ileri(int x){ // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
analogWrite(MotorRE, x); // Sağ motorun hızı 150
digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
analogWrite(MotorLE, x); // Sol motorun hızı 150
}
void sag(){ // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
analogWrite(MotorRE, 125); // Sağ motorun hızı 0 (Motor duruyor) //125
digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi aktif
digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi pasif
analogWrite(MotorLE, 100); // Sol motorun hızı 150 // 100
}
void sol(){ // Robotun sola dönme hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi aktif
digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi pasif
analogWrite(MotorRE, 100); // Sağ motorun hızı 150
digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
analogWrite(MotorLE, 125); // Sol motorun hızı 0 (Motor duruyor)
}
void dur(){ // Robotun durma hareketi için fonksiyon tanımlıyoruz.
digitalWrite(MotorR1, HIGH);
digitalWrite(MotorR2, LOW);
digitalWrite(MotorRE, LOW);
digitalWrite(MotorL1, HIGH);
digitalWrite(MotorL2, LOW);
digitalWrite(MotorLE, LOW);
}
and the position of my sensors
