Arduino kodunda hata nedir?

C++:
const int motorA1 = 5; // L298N'in IN3 Girişi.
const int motorA2 = 6; // L298N'in IN1 Girişi.
const int motorB1 = 10; // L298N'in IN2 Girişi.
const int motorB2 = 9; // L298N'in IN4 Girişi.

//HC SR04 PİN ATAMALARI.
const int echopin = 11;
const int trigpin = 12;

int i = 0; //Döngüler için atanan rastgele bir değişken.
int j = 0; //Döngüler için atanan rastgele bir değişken.
int state; //Bluetooth cihazından gelecek sinyalin değişkeni.
int vSpeed = 255; // Standart Hız, 0-255 arası bir değer alabilir.
int BTState;
int mesafe_olcumu()
{
 long sure, mesafe;
 digitalWrite(trigpin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigpin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigpin, LOW);
 sure = pulseIn(echopin, HIGH);
 mesafe = sure / 29.1 / 2;
 delay(50);
 return (mesafe);
}

void setup() {
 // Pinlerimizi belirleyelim.
 pinMode(52, OUTPUT);
 pinMode(motorA1, OUTPUT);
 pinMode(motorA2, OUTPUT);
 pinMode(motorB1, OUTPUT);
 pinMode(motorB2, OUTPUT);
 pinMode(echopin, INPUT);
 pinMode(trigpin, OUTPUT);
 // 9600 baud hızında bir seri port açalım.
 Serial.begin(9600);
}

void loop() {

 int mesafe = mesafe_olcumu();
 Serial.println(mesafe);

 //Gelen veriyi 'state' değişkenine kaydet.
 if (Serial.available() > 0)
 state = Serial.read();

 else if (digitalRead(BTState) == LOW) {
 state = 'S';
 }

 /* Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)*/
 else if (state == '0') {
 vSpeed = 0;
 }
 else if (state == '1') {
 vSpeed = 100;
 }
 else if (state == '2') {
 vSpeed = 180;
 }
 else if (state == '3') {
 vSpeed = 200;
 }
 else if (state == '4') {
 vSpeed = 255;
 }

 /***********************İleri****************************/
 //Gelen veri 'F' ise araba ileri gider.
 else if (state == 'F') {
 analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
 digitalWrite(52, HIGH);

 digitalWrite(52, LOW);
 }
 /**********************İleri Sol************************/
 //Gelen veri 'G' ise araba ileri sol(çapraz) gider.
 else if (state == 'I') {
 analogWrite(motorA1, vSpeed ); analogWrite(motorA2, 0);
 analogWrite(motorB1, 100); analogWrite(motorB2, 0);
 digitalWrite(52, HIGH);

 digitalWrite(52, LOW);
 }
 /**********************İleri Sağ************************/
 //Gelen veri 'I' ise araba ileri sağ(çapraz) gider.
 else if (state == 'G') {
 analogWrite(motorA1, 100); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
 digitalWrite(52, HIGH);

 digitalWrite(52, LOW);

 }
 /***********************Geri****************************/
 //Gelen veri 'B' ise araba geri gider.
 else if (state == 'B') {
 analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
 analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
 }
 /**********************Geri Sol************************/
 //Gelen veri 'H' ise araba geri sol(çapraz) gider.
 else if (state == 'J') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 100);
 analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
 }
 /**********************Geri Sağ************************/
 //Gelen veri 'J' ise araba geri sağ(çapraz) gider.
 else if (state == 'H') {
 analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
 analogWrite(motorB1, 0); analogWrite(motorB2, 100);
 }
 /***************************Sol*****************************/
 //Gelen veri 'L' ise araba sola gider.
 else if (state == 'R') {
 analogWrite(motorA1, vSpeed); analogWrite(motorA2, 150);
 analogWrite(motorB1, 0); analogWrite(motorB2, 0);
 }
 /***************************Sağ*****************************/
 //Gelen veri 'R' ise araba sağa gider.
 else if (state == 'L') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 150);
 }

 /************************Stop*****************************/
 //Gelen veri 'S' ise arabayı durdur.
 else if (state == 'S') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 0);
 analogWrite(motorB1, 0); analogWrite(motorB2, 0);
 }
}

Bu kodda hata yok, atanmayan değişkenleri atadım koda bakarak falan ama bir bakın çalışıyor mu? Eksik olabilir kodda fazla parantez hatası vardı.

Hcsr04'ten veri alabiliyorum ancak aracın motorları hareket etmiyor hocam.
 
C++:
const int motorA1 = 5; // L298N'in IN3 Girişi.
const int motorA2 = 6; // L298N'in IN1 Girişi.
const int motorB1 = 10; // L298N'in IN2 Girişi.
const int motorB2 = 9; // L298N'in IN4 Girişi.

//HC SR04 PİN ATAMALARI.
const int echopin = 11;
const int trigpin = 12;

int i = 0; //Döngüler için atanan rastgele bir değişken.
int j = 0; //Döngüler için atanan rastgele bir değişken.
int state; //Bluetooth cihazından gelecek sinyalin değişkeni.
int vSpeed = 255; // Standart Hız, 0-255 arası bir değer alabilir.
int BTState;
int mesafe_olcumu()
{
 long sure, mesafe;
 digitalWrite(trigpin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigpin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigpin, LOW);
 sure = pulseIn(echopin, HIGH);
 mesafe = sure / 29.1 / 2;
 delay(50);
 return (mesafe);
}

void setup() {
 // Pinlerimizi belirleyelim.
 pinMode(52, OUTPUT);
 pinMode(motorA1, OUTPUT);
 pinMode(motorA2, OUTPUT);
 pinMode(motorB1, OUTPUT);
 pinMode(motorB2, OUTPUT);
 pinMode(echopin, INPUT);
 pinMode(trigpin, OUTPUT);
 // 9600 baud hızında bir seri port açalım.
 Serial.begin(9600);
}

void loop() {

 int mesafe = mesafe_olcumu();
 Serial.println(mesafe);

 //Gelen veriyi 'state' değişkenine kaydet.
 if (Serial.available() > 0)
 state = Serial.read();

 else if (digitalRead(BTState) == LOW) {
 state = 'S';
 }

 /* Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)*/
 else if (state == '0') {
 vSpeed = 0;
 }
 else if (state == '1') {
 vSpeed = 100;
 }
 else if (state == '2') {
 vSpeed = 180;
 }
 else if (state == '3') {
 vSpeed = 200;
 }
 else if (state == '4') {
 vSpeed = 255;
 }

 /***********************İleri****************************/
 //Gelen veri 'F' ise araba ileri gider.
 else if (state == 'F') {
 analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
 digitalWrite(52, HIGH);

 digitalWrite(52, LOW);
 }
 /**********************İleri Sol************************/
 //Gelen veri 'G' ise araba ileri sol(çapraz) gider.
 else if (state == 'I') {
 analogWrite(motorA1, vSpeed ); analogWrite(motorA2, 0);
 analogWrite(motorB1, 100); analogWrite(motorB2, 0);
 digitalWrite(52, HIGH);

 digitalWrite(52, LOW);
 }
 /**********************İleri Sağ************************/
 //Gelen veri 'I' ise araba ileri sağ(çapraz) gider.
 else if (state == 'G') {
 analogWrite(motorA1, 100); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
 digitalWrite(52, HIGH);

 digitalWrite(52, LOW);

 }
 /***********************Geri****************************/
 //Gelen veri 'B' ise araba geri gider.
 else if (state == 'B') {
 analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
 analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
 }
 /**********************Geri Sol************************/
 //Gelen veri 'H' ise araba geri sol(çapraz) gider.
 else if (state == 'J') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 100);
 analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
 }
 /**********************Geri Sağ************************/
 //Gelen veri 'J' ise araba geri sağ(çapraz) gider.
 else if (state == 'H') {
 analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
 analogWrite(motorB1, 0); analogWrite(motorB2, 100);
 }
 /***************************Sol*****************************/
 //Gelen veri 'L' ise araba sola gider.
 else if (state == 'R') {
 analogWrite(motorA1, vSpeed); analogWrite(motorA2, 150);
 analogWrite(motorB1, 0); analogWrite(motorB2, 0);
 }
 /***************************Sağ*****************************/
 //Gelen veri 'R' ise araba sağa gider.
 else if (state == 'L') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 150);
 }

 /************************Stop*****************************/
 //Gelen veri 'S' ise arabayı durdur.
 else if (state == 'S') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 0);
 analogWrite(motorB1, 0); analogWrite(motorB2, 0);
 }
}

Bu kodda hata yok, atanmayan değişkenleri atadım koda bakarak falan ama bir bakın çalışıyor mu? Eksik olabilir kodda fazla parantez hatası vardı.

Ayrıca gözüme şöyle bir hata çarptı ama düzeltmedim hata olduğundan emin olamadım.

C++:
/**********************İleri Sol************************/
 //Gelen veri 'G' ise araba ileri sol(çapraz) gider.
 else if (state == 'I') {
 analogWrite(motorA1, vSpeed ); analogWrite(motorA2, 0);
 analogWrite(motorB1, 100); analogWrite(motorB2, 0);
 digitalWrite(52, HIGH);

 digitalWrite(52, LOW);
 }

C++:
/**********************Geri Sol************************/
 //Gelen veri 'H' ise araba geri sol(çapraz) gider.
 else if (state == 'J') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 100);
 analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
 }

G ise böyle yap diyor ama aşağıda g değil ı atanmış.
Aynı şekilde bir altta h deyip j atanmış.

Bunun sebebi aracın bağlantılarının hatalı olmasıydı bende üşengeçlik dolayısıyla sağ sol sol çapraz ve sağ çaprazı birbiri ile değiştirdim.

Bunun sebebi aracın bağlantılarının hatalı olmasıydı bende üşengeçlik dolayısıyla sağ sol sol çapraz ve sağ çaprazı birbiri ile değiştirdim.

R ile l j ile h yer değiştirmiş konumda çok takılmayın.
 
Hocam çok fazla if-else yapısı gördüm buralarda mantık hatası olmuş olabilir, bir değişkene bağlı farklı durumlar oluşmasını istediğinizi görüyorum. Bunun için o kod satırlarını Switch-case ve if-else ile yeniden yazmak daha iyi olabilir.

Ayrıca ben hiç Bluetooth modülü kullanmadım ama modül için herhangi bir pin ataması ya da kütüphane göremedim.
 
Hocam çok fazla if-else yapısı gördüm buralarda mantık hatası olmuş olabilir, bir değişkene bağlı farklı durumlar oluşmasını istediğinizi görüyorum. Bunun için o kod satırlarını Switch-case ve if-else ile yeniden yazmak daha iyi olabilir.

Ayrıca ben hiç Bluetooth modülü kullanmadım ama modül için herhangi bir pin ataması ya da kütüphane göremedim.

Peki hocam size şöyle anlatayım karmaşanın içinden çıkalım ben size eğer bu projenin çalışan bir kodunu verirsem siz buna hcsr04'ün belirli bir mesafe yakınlığa gelince tüm motorları durdurması ile ilgili bir kod ekleyebilir misiniz?
 
Hocam motor sürücünün bağlantısının fotoğrafını atar mısınız? Galiba sorun orada.

Peki hocam size şöyle anlatayım karmaşanın içinden çıkalım ben size eğer bu projenin çalışan bir kodunu verirsem siz buna hcsr04'ün belirli bir mesafe yakınlığa gelince tüm motorları durdurması ile ilgili bir kod ekleyebilir misiniz?

Ekleyebilirim fakat motor sürücüde galiba hatanız var.
 
Hocam motor sürücünün bağlantısının fotoğrafını atar mısınız? Galiba sorun orada.

Ekleyebilirim fakat motor sürücüde galiba hatanız var.

Tamam size kodun çalışan ve eklentisiz halini atacağım ekstra olarak bir şema oluşturacağım bana 10-15 dakika vakit verebilirseniz sevinirim.
 
Tamam size kodun çalışan ve eklentisiz halini atacağım ekstra olarak bir şema oluşturacağım bana 10-15 dakika vakit verebilirseniz sevinirim.

Siz hazırlarken ben de size motor sürücüdeki hatayı anlatayım, kullandığınız motor sürücüde düzgün şekilde hız kontrolü yapabilmek için en sağ ve soldaki enable pinlerine analog çıkış vermelisiniz. IN1 ve IN2'ye verdiğinizi güç motorun dönüş yönü için.
Basit bir hız kontrol kodu yazayım.

C++:
int enable = 3; // analog çıkış için motorun bağlı olduğu tarafın enable pinin bir pwm (~) pinine bağlıyoruz.
byte in1 = 2; // motorun bağlı olduğu tarafın ilk girişi.
byte in2 = 4; // motorun bağlı olduğu tarafın ikinci girişi.
byte buton = 5; //butonun bağlı olduğu pin.
int pot = A0; // potun bağlı olduğu pin.

byte hiz; // hız için bir değişken.
boolean yon; // yön için bir değişken.

void setup()
{
 // gerekli pin atamaları (analog girişleri ayrı yeten atamaya gerek yoktur).
 pinMode(enable,OUTPUT);
 pinMode(in1,OUTPUT);
 pinMode(in2,OUTPUT);
 pinMode(buton,INPUT);

}

void loop()
{

 if(digitalRead(buton)==1)
 {
 // eğer butona basılırsa yon değişkenini tersi ile değiştir,butona basılı tutulması halinde sürekli bekle.
 yon=!(yon);
 while(digitalRead(buton)==1)
 delay(100);
 }

 switch(yon) // yon değişkeninin değerine göre motor yönünü değiştir.
 {
 case 0:
 digitalWrite(in1,1);
 digitalWrite(in2,0);

 break;

 case 1:

 digitalWrite(in1,0);
 digitalWrite(in2,1);

 break;

 }

 hiz=map(analogRead(A0),0,1023,0,255); // pottan gelen 0-1023 arası veriyi 0-255 arasına uyarla ve hiz değişkenine ata.

 analogWrite(enable,hiz); // hiz değikeninden gelen 0-255 arası veriyi enable pinine gönder.

}

Düşündüm de bunun daha basitini de yazabilirim anlamazsanız eğer.
 
Son düzenleme:
Tamam size kodun çalışan ve eklentisiz halini atacağım ekstra olarak bir şema oluşturacağım bana 10-15 dakika vakit verebilirseniz sevinirim.

Siz hazırlarken ben de size motor sürücüdeki hatayı anlatayım, kullandığınız motor sürücüde düzgün şekilde hız kontrolü yapabilmek için en sağ ve soldaki enable pinlerine analog çıkış vermelisiniz. IN1 ve IN2'ye verdiğinizi güç motorun dönüş yönü için.
Basit bir hız kontrol kodu yazayım.

C++:
int enable = 3; // analog çıkış için motorun bağlı olduğu tarafın enable pinin bir pwm (~) pinine bağlıyoruz.
byte in1 = 2; // motorun bağlı olduğu tarafın ilk girişi.
byte in2 = 4; // motorun bağlı olduğu tarafın ikinci girişi.
byte buton = 5; //butonun bağlı olduğu pin.
int pot = A0; // potun bağlı olduğu pin.

byte hiz; // hız için bir değişken.
boolean yon; // yön için bir değişken.

void setup()
{
 // gerekli pin atamaları (analog girişleri ayrı yeten atamaya gerek yoktur).
 pinMode(enable,OUTPUT);
 pinMode(in1,OUTPUT);
 pinMode(in2,OUTPUT);
 pinMode(buton,INPUT);

}

void loop()
{

 if(digitalRead(buton)==1)
 {
 // eğer butona basılırsa yon değişkenini tersi ile değiştir,butona basılı tutulması halinde sürekli bekle.
 yon=!(yon);
 while(digitalRead(buton)==1)
 delay(100);
 }

 switch(yon) // yon değişkeninin değerine göre motor yönünü değiştir.
 {
 case 0:
 digitalWrite(in1,1);
 digitalWrite(in2,0);

 break;

 case 1:

 digitalWrite(in1,0);
 digitalWrite(in2,1);

 break;

 }

 hiz=map(analogRead(A0),0,1023,0,255); // pottan gelen 0-1023 arası veriyi 0-255 arasına uyarla ve hiz değişkenine ata.

 analogWrite(enable,hiz); // hiz değikeninden gelen 0-255 arası veriyi enable pinine gönder.

}

Düşündüm de bunun daha basitini de yazabilirim anlamazsanız eğer.

Anladım hocam kolayınıza hangi yöntem geliyorsa o şekilde yapabilirsiniz benim için büyük bir sorun olmaz.
Kodun eski hali.
(Şemada motorların sürücüye bağlantısı hatalı olabilir)

Kod:
//L298N Bağlantısı
 const int motorA1 = 5; // L298N'in IN3 Girişi.
 const int motorA2 = 6; // L298N'in IN1 Girişi.
 const int motorB1 = 10; // L298N'in IN2 Girişi.
 const int motorB2 = 9; // L298N'in IN4 Girişi.

 int i=0; //Döngüler için atanan rastgele bir değişken.
 int j=0; //Döngüler için atanan rastgele bir değişken.
 int state; //Bluetooth cihazından gelecek sinyalin değişkeni.
 int vSpeed=255; // Standart Hız, 0-255 arası bir değer alabilir.

void setup() {
 // Pinlerimizi belirleyelim.
 pinMode(motorA1, OUTPUT);
 pinMode(motorA2, OUTPUT);
 pinMode(motorB1, OUTPUT);
 pinMode(motorB2, OUTPUT);
 // 9600 baud hızında bir seri port açalım.
 Serial.begin(9600);
}

void loop() {
 /*Bluetooth bağlantısı koptuğunda veya kesildiğinde arabayı durdur.
 (Aktif etmek için alt satırın "//" larını kaldırın.)*/
// if(digitalRead(BTState)==LOW) { state='S'; }

 //Gelen veriyi 'state' değişkenine kaydet.
 if(Serial.available() > 0){
 state = Serial.read();
 }

 /* Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)*/
 if (state == '0'){
 vSpeed=0;}
 else if (state == '1'){
 vSpeed=100;}
 else if (state == '2'){
 vSpeed=180;}
 else if (state == '3'){
 vSpeed=200;}
 else if (state == '4'){
 vSpeed=255;}

 /***********************İleri****************************/
 //Gelen veri 'F' ise araba ileri gider.
 if (state == 'F') {
 analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
 }
 /**********************İleri Sol************************/
 //Gelen veri 'G' ise araba ileri sol(çapraz) gider.
 else if (state == 'G') {
 analogWrite(motorA1,vSpeed ); analogWrite(motorA2, 0);
 analogWrite(motorB1, 100); analogWrite(motorB2, 0);
 }
 /**********************İleri Sağ************************/
 //Gelen veri 'I' ise araba ileri sağ(çapraz) gider.
 else if (state == 'I') {
 analogWrite(motorA1, 100); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
 }
 /***********************Geri****************************/
 //Gelen veri 'B' ise araba geri gider.
 else if (state == 'B') {
 analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
 analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
 }
 /**********************Geri Sol************************/
 //Gelen veri 'H' ise araba geri sol(çapraz) gider.
 else if (state == 'H') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 100);
 analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
 }
 /**********************Geri Sağ************************/
 //Gelen veri 'J' ise araba geri sağ(çapraz) gider.
 else if (state == 'J') {
 analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
 analogWrite(motorB1, 0); analogWrite(motorB2, 100);
 }
 /***************************Sol*****************************/
 //Gelen veri 'L' ise araba sola gider.
 else if (state == 'L') {
 analogWrite(motorA1, vSpeed); analogWrite(motorA2, 150);
 analogWrite(motorB1, 0); analogWrite(motorB2, 0);
 }
 /***************************Sağ*****************************/
 //Gelen veri 'R' ise araba sağa gider.
 else if (state == 'R') {
 analogWrite(motorA1, 0); analogWrite(motorA2, 0);
 analogWrite(motorB1, vSpeed); analogWrite(motorB2, 150);
 }

 /************************Stop*****************************/
 //Gelen veri 'S' ise arabayı durdur.
 else if (state == 'S'){
 analogWrite(motorA1, 0); analogWrite(motorA2, 0);
 analogWrite(motorB1, 0); analogWrite(motorB2, 0);
 }
}
 

Dosya Ekleri

  • şematik.png
    şematik.png
    289,9 KB · Görüntüleme: 33
Hocam Bluetooth kontrolu için kütüphane gerekiyor. Bluetooth modülünün nasıl kullanıldığına baktınız mı?


Şemaya baktığımda da enable pinlerini kullanmadığını görüyorum o pinleri kullanmadan hız kontrolünü düzgün yapamazsınız.

Hocam Bluetooth kontrolu için kütüphane gerekiyor. Bluetooth modülünün nasıl kullanıldığına baktınız mı?


Şemaya baktığımda da enable pinlerini kullanmadığını görüyorum o pinleri kullanmadan hız kontrolünü düzgün yapamazsınız.

Aynı şekilde enable pinleri boştaysa motorlar çalışmaz!

Motor sürücü ve Bluetooth modülünün kullanımını bilmiyorsanız araştırmanızı tavsiye ederim.
 

Technopat Haberler

Yeni konular

Geri
Yukarı