Arduino Quick Start Guide ve Uygulama Örnekleri
Sümer Yamaner' Alıntı:
NOT: Bunları eleştirmek ya da değişiklik önermek için değil işin mantığını anlayabilmek için soruyorum.
Sümer Bey, şimdiye kadar uçak kullanamadım, dolayısı ile retract'ın nasıl çalışabiliyor olacağını sadece gördüklerimden faydalanarak aklımda canlandırıyorum ve ona uygun kod yazmaya çalışıyorum. Dolayısı ile sizin geri bildirimleriniz benim için gayet önemli... Amaç doğruyu bulmaya çalışmak olduktan sonra kodu siz ya da konuyu takip eden herhangi biri eleştirebilir ve yorumlayabilir, hiç sıkıntı yok
, daha önce de dediğim gibi uzman değilim, ben de hala öğreniyorum.
Sümer Yamaner' Alıntı:
İlk sorum geliyor:
rxPWMduration = pulseIn(rxPin, HIGH);
while (rxPWMduration < 800) {
delay(1000);
rxPWMduration = pulseIn(rxPin, HIGH);
}
1- pulseIn bir Arduino komutu mudur yoksa servo.h kitaplığı içindeki bir fonksiyon mudur?
2- rxPin'i başta deklare ettikten sonra PULLUP yapmak gerekir mi? PULLDOWN yapmak için o porta LOW değeri yzamak mı gerekir?
3- Varsayalım ki vericiden sinyal gelmiyor. pulseIn fonksiyonu bir HIGH darbesi için sonsuza kadar bekleyecek mi?
4- Eğer bir HIGH darbesi için bekleyecek ise ve girişi PULLUP ya da PULLDOWN ile parziter sinyallere karşı emniyete almış isek, artık pulse süresini tekrar kontrol etmeye gerek kalmaz diye düşünüyorum. Pulse süresi 1500'ün altında ise retractLeftState değişkenine 0, 1500 ve üstündeyse değişkene 1 yazabiliriz gibime geliyor.
Servo kütüphanesini de şimdilik kapakları açma kapama olayı ile beraber rafa kaldırdık. Şimdilik koddaki tüm fonksiyonlar, Arduino'nun varsayılan olarak gelen "native" kütüphaneleri,
Bu LİNKİ görmek için izniniz yok. Giriş yap veya üye ol
'de dahil.
Bu LİNKİ görmek için izniniz yok. Giriş yap veya üye ol
Buradaki kullanımda PULLUP ya da PULLDOWN ile ilgili söylediklerinizi tam anladığımı söyleyemiyeceğim. PWM sinyalini sağlamaktan alıcı, okumaktan ise 12 numaralı porttaki rxPIN sorumlu. Bu konunun
Bu LİNKİ görmek için izniniz yok. Giriş yap veya üye ol
alıcı RC kontrolü için kullanılan PWM sinyalinden bahsetmiştim. pulseIn(rxPin, HIGH) fonksiyonu vasıtası ile Arduino, rxPin'i üzerindeki, aslında rxPIN'i bağladığımız alıcı kanalı üzerindeki sinyalin ilk önce HIGH ve tekrar LOW olduğu değerler arasında geçen süreyi okuyor. LOW-HIGH geçişinde içsel bir kronometreyi başlatıyor, HIGH-LOW geçişinde de bu içsel kronometreyi durdurup, aradaki farkı okuyup, ölçümü yapmış oluyor. Bu da zaten tam bize gereken, 1000 mikrosaniye ile 2000 mikrosaniye arasında olan ve anahtar pozisyonunu belirlemekte kullanacağımız süre.
Dokümanlarında geçmiyor ama bu pulseIn fonksiyonun varsayılan bir zamanaşımı değeri var. Zamanaşımı sonrasında fonksiyon "0" değerini üretiyor. ya da zamanaışımını "pulseIn(pin, value, timeout)" formatında biz de belirleyebiliyoruz. Kumanda kontrollü flaşör devresi yaptığımda varsayılan zamanaşımının yaklaşık 1 - 2 saniye civarında olduğunu görmüştüm ama hassas olarak ölçmedim.
Alıcı zaten görevi ve PWM sinyalinin yapısı gereği HIGH ve LOW sinyalleri kendisi sağlıyor. Ama;
- Alıcı ve Arduino'nun beslemeleri farklı yerden sağlanıyorsa ve alıcı Arduino'dan sonra açılırsa,
- Alıcı ve Arduino aynı yerden besleniyor olsa bile, alıcının boot süresi Arduino'dan daha fazlaysa, alıcı gene Aruino'dan sonra açlılacaktır
Yukarıdaki senaryolarda, Arduino alıcının tamamen açılmasını beklediği bu süre boyunca herhangi bir PWM sinyali okuyamayacak, dolayısı ile pulseIn fonksiyonu zamanaşımına uğrayacak ve "0"değeri üretecektir. Alıcının açılış sürecinde ise, belki de bir kaç milisaniye boyunca parazit olarak bir kaç darbe gönderme ihtimali elbette var. İşte bu parazit sinyalleri okumakatan sakınmak için ise "delay(1000)" fonksiyonunu kullanıp, 1000 milisaniye boyunca kodu bekletiyorum. Ve 1000 milisaniye sonra PWM değerlerini yani anahtar pozisyonunu okutuyorum. Bu okuduğumu da varsayılan pozisyon olarak kabul etmiş oluyorum. Ama bir alıcı 1000 milisaniyeden sonra da parazit sinyal veriyorsa kodu değil bence alıcıyı değiştirmek mantıklı olan
.
Düzenleme : pulseIn fonksiyonunun zamanaşımı değeri, ilgili sayfasında geçiyormuş. Bu değer de varsayılan olarak 1 saniye imiş.