-
Notifications
You must be signed in to change notification settings - Fork 0
/
sagsolmesafe.ino
164 lines (153 loc) · 3.9 KB
/
sagsolmesafe.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
//mesafe sensörünün pinleri
int echo1=2;
int trig1=3;
int echo2=4;
int trig2=5;
int echo3=6;
int trig3=7;
//motor pinleri
const int sagileri = 8;
const int saggeri = 9;
const int solileri = 13;
const int solgeri = 12;
const int solenable = 11;
const int sagenable =10;
// ölçüm fonksiyonları
//sol taraf
float uzaklik1(int trig1, int echo1)
{
float olcum1;
float mesafe1;
digitalWrite (trig1, LOW);
delayMicroseconds(5);
digitalWrite (trig1, HIGH);
delayMicroseconds(10);
digitalWrite (trig1, LOW);
olcum1=pulseIn (echo1, HIGH);
mesafe1=olcum1/29/2;
return mesafe1;
}
//ön taraf
float uzaklik2(int trig2, int echo2)
{
float olcum2;
float mesafe2;
digitalWrite (trig2, LOW);
delayMicroseconds(5);
digitalWrite (trig2, HIGH);
delayMicroseconds(10);
digitalWrite (trig2, LOW);
olcum2=pulseIn (echo2, HIGH);
mesafe2=olcum2/29/2;
return mesafe2;
}
//sağ taraf
float uzaklik3(int trig3, int echo3)
{
float olcum3;
float mesafe3;
digitalWrite (trig3, LOW);
delayMicroseconds(5);
digitalWrite (trig3, HIGH);
delayMicroseconds(10);
digitalWrite (trig3, LOW);
olcum3=pulseIn (echo3, HIGH);
mesafe3=olcum3/29/2;
return mesafe3;
}
//hareket fonksiyonları
void ileri(int hizsag, int hizsol) //ileri fonksiyonu
{
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol) //geri fonksiyonu
{
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur() //dur fonksiyonu
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void sag(int hizsag, int hizsol) //sağa dönme fonksiyonu
{
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri,HIGH);
}
void sol(int hizsag, int hizsol) //sola dönme fonksiyonu
{
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri,HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void setup() { //giriş çıkış pinlerini ayarlayalım.
pinMode (trig1, OUTPUT);
pinMode (echo1, INPUT);
pinMode (trig2, OUTPUT);
pinMode (echo2, INPUT);
pinMode (trig3, OUTPUT);
pinMode (echo3, INPUT);
//Serial.begin(9600); //hata ayıklama için.
}
void loop() {
while( uzaklik2(trig2, echo2 ) >= 30 && uzaklik1(trig1, echo1) >= 15 && uzaklik3(trig3, echo3) >= 15) //sağ ve sol 15cm'den ön de 30cm'den büyükse ileri git
{
ileri(80,80);
}
dur(); // engel geldikten sonra dur
delay(100); // 0.1 saniye bekle
if( uzaklik1(trig1, echo1) >= 30 ) // solunda engel yoksa sola dön
{
sol(170,170);
delay(250); // dönüş açısını belirleyen süre. Bu süreyi kendinize göre ayarlayın
dur(); // dur
delay(100);
}
else if(uzaklik3(trig3, echo3) >= 30 ){ // sol dolu ise sağa bak
sag(170,170); // engel yoksa sağa dön
delay(250); // dönüş açısını belirleyen süre. Bu süreyi kendinize göre ayarlayın
dur(); // dur
delay(100);
}
else if ( uzaklik2(trig2, echo2 ) <= 20 && uzaklik1(trig1, echo1) <= 20 && uzaklik3(trig3, echo3) <= 20) //ön, sağ ve sol 20 cm'den küçük ise geri git.
{
geri(80,80);
delay(500);//geri gidiş süresi, çok uzun yada çok kısa geri giderse süreyi değiştirin,
sol(170,170);
delay(250);
}
//else // sağ ve solda engel varsa geri gidip dönelim
//{
//geri(100,100);
//delay(700);
//}
//hata ayıklama
/*
Serial.print("Sol mesafe=");
Serial.println(uzaklik1 (trig1, echo1));
Serial.print("On mesafe=");
Serial.println(uzaklik2 (trig2, echo2));
Serial.print("Sag mesafe=");
Serial.println(uzaklik3 (trig3, echo3));
Serial.println("---------------------------");
*/
}