Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
8
Cevap
565
Tıklama
0
Öne Çıkarma
Arduino hakkında kod bölümünde yardımcı olabilir misiniz
K
4 yıl
Er
Konu Sahibi

Arkadaşlar merhaba Aracım için kör nokta sensörü yapıyorum. Malzeme olarak Arduino uno kartı ve Aracın sağ ve sol kör noktaları için iki farklı jsn sr04t su geçirmez mesafe sensörünü kullandım. Amacım şöyleydi: Sağ ve sol kör noktayı sürekli tarayacak ; sağda araç varsa sağ dikiz aynama bağladığım 5v lik led yanacak, solumda araç varsa sol dikiz aynama bağladığım 5v lik led yanacak, her iki tarafımda da araç varsa her iki led de yanacak. Arduino kodunu her iki sensör ve her iki led için yazıp kartıma yükledim fakat sağ led yanarken soldaki ledi engelliyor sol yanarken de sağdakini engelliyor yani her iki tarafımda da kör noktada araç varsa sensörler beni aldatabilir. Bu ledlerin birbirinden bağımsız uyarı verebilmesi için bayağı uğraştım beceremedim yardımcı olabilecek varsa çok mutlu olurum kod ve sistem fotoğraflarını da ekliyorum. Şimdiden teşekkürler


< Resime gitmek için tıklayın >
< Resime gitmek için tıklayın >
< Resime gitmek için tıklayın >
< Resime gitmek için tıklayın >
< Resime gitmek için tıklayın >
< Resime gitmek için tıklayın >

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



H
4 yıl
Çavuş

5. bölüm sonundaki iki koşul da, içeriği de aynı ama yine de çözüm o olmayacaktır.
ayrıca o son bölümü =60 yerine >=51 yapsan olmaz mı ?





< Bu mesaj bu kişi tarafından değiştirildi hllkntrc -- 9 Haziran 2021; 17:0:21 >

F
4 yıl
Yüzbaşı

Merhaba. Kodları mesaja metin biçiminde ekleyebilirseniz ilgilenecek arkadaşların kendi derleyicileriyle kodu denemeleri daha kolay olacaktır. Ayrıca devre şemanızı paylaşmanız da iyi olur.

Sorunuza gelirsek, sağ_mesafe ve sol_mesafe değişkenlerini farklı if blokları içinde kontrol edip tekrar dener misiniz? Tek bir if-else bloğu içinde oldukları için bir çok durum dikkate alınmıyor olabilir şu hâliyle.

@hllkntrc 'nin bahsettiği konuya da ekleme yapmak istiyorum. 50-60 değerleri arasındaki bölge için program tepki vermeyecektir. Son bölümde "> 50" yazmanızı öneririm. Eğer tam olarak 60 değerini ve sadece 60 değerini yakalamak istiyorsanız parantez içine "mesafe = 60" yerine "mesafe == 60" yazmanız gerekiyor. "=" sembolü C'de atama operatörüdür.

İyi çalışmalar.

@Kartalmbdr




Bu mesajda bahsedilenler: @hllkntrc , @Kartalmbdr
K
4 yıl
Er
Konu Sahibi

Çok teşekkürler @hllkntrc ve @F3SV mağduru




Bu mesajda bahsedilenler: @hllkntrc , @F3SV mağduru
K
4 yıl
Er
Konu Sahibi

int sag_trigger = 2;
int sag_echo = 3;
int sol_trigger = 4;
int sol_echo = 5;
int sag_led = 6;
int sol_led = 7;
int buzzer = 8;


void setup() 
{
 Serial.begin(9600);
 pinMode(sag_trigger, OUTPUT);
 pinMode(sag_echo, INPUT_PULLUP);
 pinMode(sol_trigger, OUTPUT);
 pinMode(sol_echo, INPUT_PULLUP);
 pinMode(sag_led, OUTPUT);
 pinMode(sol_led, OUTPUT);
 pinMode(buzzer, OUTPUT);
 }



void loop() 
{

  

 digitalWrite(sag_trigger, LOW);
 delayMicroseconds(2);

 digitalWrite(sag_trigger, HIGH);
 delayMicroseconds(20);

 digitalWrite(sag_trigger, LOW);
  
  
 int sag_mesafe = pulseIn(sag_echo, HIGH,26000);
 sag_mesafe = sag_mesafe/58;

 Serial.print("Sağ mesafe");
 Serial.print(sag_mesafe);
 Serial.println("cm");
  
  
   
  


 digitalWrite(sol_trigger, LOW);
 delayMicroseconds(2);

 digitalWrite(sol_trigger, HIGH);
 delayMicroseconds(20);

 digitalWrite(sol_trigger, LOW);
  
  
 int sol_mesafe = pulseIn(sol_echo, HIGH,26000);
 sol_mesafe = sol_mesafe/58;

 Serial.print("Sol mesafe");
 Serial.print(sol_mesafe);
 Serial.println("cm");
  
  
 

 
  
 if (sag_mesafe <= 0)
 {
  digitalWrite (sag_led, LOW);
  
 }

 else if (sol_mesafe <= 0)
 {
  digitalWrite (sol_led, LOW);
 }

  
  
 else if (sag_mesafe <= 22)
 {
  digitalWrite (sag_led, HIGH);
  delay(50);
  digitalWrite (sag_led, LOW);
  delay(50);
 }

 else if (sol_mesafe <= 22)
 {
  digitalWrite (sol_led, HIGH);
  delay(50);
  digitalWrite (sol_led, LOW);
  delay(50);
 }

 else if (sag_mesafe <= 50)
 {
  digitalWrite (sag_led, HIGH);
  delay(200);
  digitalWrite (sag_led, LOW);
  delay(0);
 }

 else if (sol_mesafe <= 50)
 {
  digitalWrite (sol_led, HIGH);
  delay(200);
  digitalWrite (sol_led, LOW);
  delay(0);
 }

 else if (sag_mesafe = 60)
 {

  digitalWrite (sag_led, LOW);
  
 }

 else if (sag_mesafe = 60)
 {

  digitalWrite (sag_led, LOW);
  
 }
 }



K
4 yıl
Er
Konu Sahibi

bu hatalı olan kod bunun üzerinde biraz daha çalışacağım



T
4 yıl
Binbaşı

Sorun yanlış else if kullanmandan kaynaklı. Önce tek taraflı olarak kodu düzgün olarak çalıştır.

Ayrıca kodda açığın bulunmakta, ölçümün 50dan küçükseye göre çalışıyor. Ya gelen değer 50dan büyük olursa? buna önlem alman gerekli.

İkinci olarak değer 0 yada 0dan küçükse ledi low yapıyorsun, burası tamam.

if (sag_mesafe <= 0)
 {
  digitalWrite (sag_led, LOW);
 }

Sonra demişsin ki değer 22 yada daha küçükse ledi high yap, bekle, low yap. Buradaki bekleme süreleri çok kısa, yine de senin tercihin bu. Gözle yanıp söndüğünü göremezsin bu halde.

 else if (sag_mesafe <= 22)
 {
  digitalWrite (sag_led, HIGH);
  delay(50);
  digitalWrite (sag_led, LOW);
  delay(50);
 }

Ancak burada şöyle bir hatan var. değer 22 yada daha küçükse, önce "if (sag_mesafe <= 0)" yazıldığı için bu fonksiyon çalısacak, diğeri çalışmayacak. Doğrusu şu şekilde olmalı.

if (sag_mesafe <= 0)
 {
  digitalWrite (sag_led, LOW);
 }

 else if (sag_mesafe > 0 && sag_mesafe <= 22)
 {
  digitalWrite (sag_led, HIGH);
  delay(50);
  digitalWrite (sag_led, LOW);
  delay(50);
 }

else if (sag_mesafe > 22 && sag_mesafe <= 50)
 {
  digitalWrite (sag_led, HIGH);
  delay(200);
  digitalWrite (sag_led, LOW);
  delay(0);
 }
else
{
//buraya da değer 50den büyükse ne yapılacağını yazmalısın.
}



K
4 yıl
Er
Konu Sahibi

Çok Teşekkürler @TuRkiShCowboy




Bu mesajda bahsedilenler: @TuRkiShCowboy
B
2 yıl
Onbaşı

Projenin sonucu nedir? Olumlu olduysa projenizi paylaşabilirmisiniz?



< Bu ileti mobil sürüm kullanılarak atıldı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.