#include <Servo.h>
#define HareketliechoPin 2 // Echo Pin
#define HareketlitrigPin 3 // Trigger Pin
#define YukseklikechoPin 6
#define YuksekliktrigPin 7
#define KarsiechoPin 4
#define KarsitrigPin 5
#define ileriLed 13
#define sagsolLed 12
#define boslukLed 11
Servo myHareketliservo;
Servo myLefttires;
Servo myRighttires;
class Heraketli{
private:
int HL1;
int HL2;
public:
void Hareketli_look_left_right()
{
int Hduration,duration;
for (int pos = 0; pos < 180; pos += 1) // Servo 0'dan 1 pozisyonuna 180 derece dönecek.
{
myHareketliservo.write(pos); // Belirlenen pozisyona gitmesi isteniyor.
delay(5); // Pozisyona 5 ms de ulaşıyor.
}
digitalWrite(HareketlitrigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(HareketlitrigPin, LOW);
Hduration = pulseIn(HareketliechoPin, HIGH);
HL1 = (Hduration / 2) / 29.1;
for (int pos1 = 180; pos1 >= 1; pos1 -= 1) // Servo 1'den 0 pozisyonuna 180 derece dönecek.
{
myHareketliservo.write(pos1); // Belirlenen pozisyona gitmesi isteniyor.
delay(5); // Pozisyona 5 ms de ulaşıyor
}
digitalWrite(HareketlitrigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(HareketlitrigPin, LOW);
duration = pulseIn(HareketliechoPin, HIGH);
HL2 = (duration / 2) / 29.1;
}
void Hareketli_hesapla()
{
digitalWrite(sagsolLed,OUTPUT);
if (HL1>HL2)
{
Serial.println("Sola donuyoruz");
myLefttires.write(360);
myRighttires.write(0);
}
else if (HL1<HL2)
{
Serial.println("Saga donuyoruz");
myLefttires.write(0);
myRighttires.write(360);
}
else
{
Serial.println("3 sn Geri gidiyoruz");
myLefttires.write(0);
myRighttires.write(0);
}
}
};
class Yukseklik{
private:
int height,duration;
public:
static int mesafe;
void setHeight()
{
digitalWrite(YuksekliktrigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(YuksekliktrigPin, LOW);
duration = pulseIn(YukseklikechoPin, HIGH);
height = (duration / 2) / 29.1;
}
int getHeight()
{
return height;
}
};
int Yukseklik::mesafe = 11;
class Karsi{
private:
int mesafe,duration;
public:
static int kontkarsi;
void setMesafe()
{
digitalWrite(KarsitrigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(KarsitrigPin, LOW);
duration = pulseIn(KarsiechoPin, HIGH);
mesafe = (duration / 2) / 29.1;
}
int getMesafe()
{
return mesafe;
}
};
int Karsi::kontkarsi = 16;
// Gerekli objelerini bu aralıkta yarat
Yukseklik asHc;
Heraketli donenHc;
Karsi karsiHc;
// Gerekli objelerini üsteeki aralıkta yarat
void setup()
{
Serial.begin (9600);
pinMode(HareketlitrigPin, OUTPUT);
pinMode(HareketliechoPin, INPUT);
pinMode(YuksekliktrigPin,OUTPUT);
pinMode(YukseklikechoPin,INPUT);
pinMode(KarsitrigPin,OUTPUT);
pinMode(KarsiechoPin,INPUT);
pinMode(ileriLed,OUTPUT);
pinMode(boslukLed,OUTPUT);
pinMode(sagsolLed,OUTPUT);
myHareketliservo.attach(30); // Servonun sinyal alacağı pin numarasını belirliyorsunuz.
myLefttires.attach(52);
myRighttires.attach(53);
}
void loop()
{
digitalWrite(ileriLed,LOW);
digitalWrite(boslukLed,LOW);
digitalWrite(sagsolLed,LOW);
asHc.setHeight();// robot yerden yükseliğini yükseklik classına set eder
Serial.println(asHc.getHeight());
if(asHc.getHeight()>asHc.mesafe) // önünde cukur olup olmadığını takip eder
{
Serial.println("onum cukur 3.saniye geri gidiorum");
digitalWrite(boslukLed,HIGH);
myLefttires.write(0);
myRighttires.write(360);
}
else
{
karsiHc.setMesafe();
if(karsiHc.getMesafe()>karsiHc.kontkarsi)
{
Serial.println("ileri dogru gidiyorum");
digitalWrite(ileriLed,HIGH);
myLefttires.write(360);
myRighttires.write(0);
}
else
{
;
myLefttires.write(0);
myRighttires.write(360);
donenHc.Hareketli_look_left_right();
donenHc.Hareketli_hesapla();
}
}
}