1. sayfa
Hocam konuyu biraz daha acarsaniz, nasil bir sey yapacaginizi, ona gore yardimci olmaya calisirim |
Mikro işlemci olarak ne kullanıyorsun ? Misal Timer kullanarak bu problemi aşabilirsin. |
ultrasonic sensör ile mesafeyi ölçüp lcd ye yazdırıyorum. loop döngüsü 150 ms + 1ms de sensör 151ms. Ayrıyettn lcd de ayrıyetten "-\,|,/" simgelerini 100 ms arayla lcdnin bir karakterlik yerinde arka arkaya göstererek sanki çizgi dönüyormuş efekti vermek istiyorum. Ama 4 karakter için 100ms * 4 = 400ms olur. Bunu kodun sonuna eklesem program kafayı yer gibime geliyo. Yani toplamda 551ms olcak ve program sapıtcak.
|
Hocam delay kullanarak sorunlarini cozemezsin. Kesmelerle ugrasman lazim. Cunku delay dedigin sey programin akisini buyuk olcude etkiler. Ustteki arkadas zaten timer kesmesi demis. |
Hocam sizin ilaç kesme timer ile kesme yapacaksınız |
cevaplar için teşekkürler arkadaşlar. anladığım kadarıyla timer kesmesi kullanıcaz. peki nasıl yapıcaz sorun o zaten. |
arkadaşlar kodu yukarki mesajda paylaştım. nasıl değişiklik yapmam lazım yardımcı olur musunuz ? timer interrupt araştırdım ama karışık bir konu. |
delay kullanmak o süre boyunca programı bloke eder. Senin işine yaramaz. Sen bunun yerine millis() fonksiyonunu kullanabilirsin. Sistemi bloke etmeden zaman bazlı işlemler yapabilirsin. Aşağıda bir örnek var. Bu sayede bir nebze multitasking yapabiliyorsun. https://learn.adafruit.com/multi-tasking-the-arduino-part-1/using-millis-for-timing |
Aynı anda yapılması gereken işlemler için kesme şarttır. Önce kesmeleri öğrenmeni tavsiye ederim. Ama gördüğüm kadarıyla arduinonun kesme konusunda desteği biraz zayıf. C ile kodlaman gerebilir. |
@burakc millis fonksiyonuna baktım. millis programı durdurmadan yapmak istediklerimizi yaptırıyormuş. Sürekli sayıyor. 54 gün de bir de sıfırlanıyormuş. Ama ben nasıl uyarlıcam kodumu o fonksiyona göre onu bilemedim. qelektro_gadget çoğu arkadaş timer den bahsettti ama araştırdım çok karışık pek bişey anlamadım açıkçası. |
delay komutu yerine #define komutu kullanarak bekleme saniyesini tanımlata bilirsin. |
eğer farklı zaman aralıklarında farklı işler yaptırmak isityorsak; "modulo" kullanmalıyız. yani modüler aritmetik. https://www.arduino.cc/en/Reference/modulo int sayac; delay(1); sayac=sayac+1 if (sayac % 100==0) {digitalWrite(6,HIGH);} //sayac değerinin mod 100 e göre kalanının 0 vermesi dijital 6 pinini aktif yap. if (sayac % 200==0) {digitalWrite(7,HIGH);} //sayac değerinin mod 200 e göre kalanının 0 vermesi dijital 7 pinini aktif yap. if (sayac % 1000==0) {sayac=0;} // sayac her 1000ms de bir başa dönsün. |
Böyle şey mi olur ya kimden duydun bunu?![]() |
Yaptığın şey şu. while(1) { delay(100); digitalWrite(6,HIGH); delay(100); digitalWrite(7,HIGH); delay(800); } Yani işlemcinin gücünün milyonda birini kullanıp gerisini delay kullanarak boşa harcıyorsun. Ne yaptığını bil diye söyledim tabi kafana göre takıl yine. |
benim yapmaya çalıştığım şey şu; 1ms ultrasonic mesafe sensörü için gerekli. 150ms karakter lcd nin clear olması için gerekli. ayrıyetten; "150 ms de bir "-\|/" karakterlerini sırayla ekranda göstermek istiyorum. |
her gelen bir taş atıp gidiyor. Kafam allak bullak oldu. aynı mesajı yeniden yazıyorum; benim yapmaya çalıştığım şey şu; 1ms ultrasonic mesafe sensörü için gerekli. 150ms karakter lcd nin clear olması için gerekli. ayrıyetten; "150 ms de bir "-\|/" karakterlerini sırayla ekranda göstermek istiyorum. |
Yapman gereken söylendi. Bu yemek tarifi değil ki iki satırda anlatalım. Araştıracaksın interrupt nedir, timer nedir, arduinoda nasıl kullanılır vs. Ondan sonra programı dizayn edeceksin, parçaları birleştireceksin. Bunlar anlatmakla olmaz tecrübe ister. Hiç kullandığın denetleyicinin datasheet'ine baktın mı? Orada bütün ayrıntılar yazıyor. Üstüne orta seviye C bilgisi ile hiçbir sorun kalmaması lazım. |
1. sayfa
Aynı programda bir kaç delay kullanmam gerekiyor ama her delay programın çalışmasını etkileyeceğinden bunu nasıl yapabilirim ?
mesafe sensörü için ayrı bir delay, bunların lcd de yazdırılması ayrı bir delay bunların dışınca program bu şekilde çalışırken lcd de 5 farklı sembolü 500ms arayla ekrana yazdırmak gibi ?
< Bu mesaj bu kişi tarafından değiştirildi yucelnet -- 2 Mart 2016; 8:21:28 >