MEBKit Robot Modul 4 iki farklı kod da ama yine istediğim gibi iyi oldu diyemem
// Basit ve sert dönüşlü kod
int motorSol1 = 5, motorSol2 = 6, motorSag1 = 10, motorSag2 = 9;
int solSensor = A0, ortaSensor = A1, sagSensor = A2;
int esik = 400, hiz = 100;
void setup() {
pinMode(motorSol1, OUTPUT); pinMode(motorSol2, OUTPUT);
pinMode(motorSag1, OUTPUT); pinMode(motorSag2, OUTPUT);
delay(500);
}
void loop() {
int sol = analogRead(solSensor) > esik;
int orta = analogRead(ortaSensor) > esik;
int sag = analogRead(sagSensor) > esik;
if(orta) {
// Düz
analogWrite(motorSol1, hiz); analogWrite(motorSol2, 0);
analogWrite(motorSag1, hiz); analogWrite(motorSag2, 0);
}
else if(sol && !sag) {
// SOLA DÖN (SERT) - sol teker GERİ, sağ teker İLERİ
analogWrite(motorSol1, 0); analogWrite(motorSol2, 50);
analogWrite(motorSag1, hiz); analogWrite(motorSag2, 0);
}
else if(sag && !sol) {
// SAĞA DÖN (SERT) - sol teker İLERİ, sağ teker GERİ
analogWrite(motorSol1, hiz); analogWrite(motorSol2, 0);
analogWrite(motorSag1, 0); analogWrite(motorSag2, 50);
}
else {
// Çizgi kayıp - sağa dön ara
analogWrite(motorSol1, hiz); analogWrite(motorSol2, 0);
analogWrite(motorSag1, 0); analogWrite(motorSag2, 50);
delay(100);
}
delay(20);
}
///////////////////////////////////////////////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
int motorSol1 = 5;
int motorSol2 = 6;
int motorSag1 = 10;
int motorSag2 = 9;
int solSensor = A0;
int ortaSensor = A1;
int sagSensor = A2;
int esik = 400; // Beyaz çizgi eşiği
int hiz = 100; // Normal ilerleme hızı
void setup() {
pinMode(motorSol1, OUTPUT);
pinMode(motorSol2, OUTPUT);
pinMode(motorSag1, OUTPUT);
pinMode(motorSag2, OUTPUT);
// BAŞLANGIÇTA 0.5 SANİYE DÜZ GİT (sensörlerin stabil olması için)
analogWrite(motorSol1, hiz);
analogWrite(motorSol2, 0);
analogWrite(motorSag1, hiz);
analogWrite(motorSag2, 0);
delay(500);
}
void loop() {
int sol = analogRead(solSensor);
int orta = analogRead(ortaSensor);
int sag = analogRead(sagSensor);
int solBeyaz = (sol > esik);
int ortaBeyaz = (orta > esik);
int sagBeyaz = (sag > esik);
// =========== YENİ KARAR TABLOSU ===========
// 1. HEPsi BEYAZ (başlangıç veya kalın çizgi) -> DÜZ GİT
if(solBeyaz == 1 && ortaBeyaz == 1 && sagBeyaz == 1) {
analogWrite(motorSol1, hiz);
analogWrite(motorSol2, 0);
analogWrite(motorSag1, hiz);
analogWrite(motorSag2, 0);
}
// 2. Orta sensör beyaz -> DÜZ GİT
else if(ortaBeyaz == 1) {
analogWrite(motorSol1, hiz);
analogWrite(motorSol2, 0);
analogWrite(motorSag1, hiz);
analogWrite(motorSag2, 0);
}
// 3. Sadece sol beyaz -> SOLA DÖN
else if(solBeyaz == 1 && sagBeyaz == 0) {
analogWrite(motorSol1, 0);
analogWrite(motorSol2, 40);
analogWrite(motorSag1, hiz);
analogWrite(motorSag2, 0);
}
// 4. Sadece sağ beyaz -> SAĞA DÖN
else if(sagBeyaz == 1 && solBeyaz == 0) {
analogWrite(motorSol1, hiz);
analogWrite(motorSol2, 0);
analogWrite(motorSag1, 0);
analogWrite(motorSag2, 40);
}
// 5. Sol ve sağ beyaz, orta siyah (çizgi ayrıldı) -> HAFİF SAĞA DÖN
else if(solBeyaz == 1 && ortaBeyaz == 0 && sagBeyaz == 1) {
analogWrite(motorSol1, hiz);
analogWrite(motorSol2, 0);
analogWrite(motorSag1, hiz - 30);
analogWrite(motorSag2, 0);
}
// 6. Hiçbiri beyaz değil (çizgi kayıp) -> ÇİZGİYİ ARA
else if(solBeyaz == 0 && ortaBeyaz == 0 && sagBeyaz == 0) {
// Geri gitme, direkt sağa dönüp ara
analogWrite(motorSol1, hiz);
analogWrite(motorSol2, 0);
analogWrite(motorSag1, 0);
analogWrite(motorSag2, 50);
delay(100);
}
}