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
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.
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.
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); }
< 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 Ol Şimdi DeğilÜ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.