elt42at
Üye
- Katılım
- 19 Ocak 2009
- Mesajlar
- 7
- Puanları
- 1
Evet Arkadaşlar, yukarıda yazdığım bol bol kelime sarf ettiğim metnin kod kısmında tanımladığım fonksiyon olan;
FonkRotaryOku();
fonksiyonunu kullanarak, şu kodu yazdım
Yukarıda arkadaşlar, bir önceki mesajda yazdığım FonkRotaryOku(); fonksiyonunu kullanarak rotary encoder i sürekli tarama yapmak için kullandım.
Şimdi her defasında okuduğum değeri ekrana yazdırmak için kullansa idim ekrana yazdırma yaparken var olan adımları okuyamazdım. Bu sebeple yazdığım fonksiyondan gelen değer sıfıra eşit ise yada adım sayacımız değişmişse gibi kontrollere göre adımları görsel bir ara yüze atmayı denedim. Yani, rotaryden gelen adımlar sıfırsa rotary duruyor demektir. Bu sayede bir işlem yapmaya müsade ettim. ve de daha önce ekrana yazdırdığım değer rotary durduktan sonra var olan değerden farklı ise yeniden ekrana değer yazdırmayı mümkün kıldım.
Bu sayede rotary encoder daha fazla izlenmiş ve adım kaçırılmamış olacak
Bu kodları derledim ve breadboard da bi deneme yaptım. Rotary ucunu çevirmeyi bırakana kadar ekrana bişey yazdırılmıyor. Bunu engellemek için rotary den gelen değerin kontrol edildiği do...while döngüsü içine bir sayaç atılıp bunun önüne geçilebilir. Mesela yazdığım fonksiyon 10ms lik ve sıfırdan başlayan bir sayının while içinde her bir işlemde arttırımını sağlayıp 100 e eşit olana kadar bir müsade sağlarsanız, 1 sn de bir ekranın tazelenmesini sağlayabilirsiniz.
Tabi ben bir bandın durmasını bekliyeceğim için while döngüsünü kesme gibi bir niyetim yok. Takometre gibi bir uygulama yapacak olanlar saniyede bir ekranı tazelemeleri gerekecek.
Bu uygulamamda bir sorunla karşılaştım. Rotary adımları misal 1555 iken rotarinin miline bir teker taktım. Tekeri bi sağa bi sola bi sağa bi sola rahat 15 defa ileri geri yaptım. Orta noktada duracak şekilde durdurdum. Ama ekranda 1555 gibi bir değer yerine 1809 gibi bir değer gördüm. Ben yaklasık 254 clock luk bir yöne hariket etmedim. 500 clock luk rotary e göre yarım tur bi yöne gitmiş olama gerekiyor. Halbuki ben hala aynı notadayım.
Sonuç olarak, rotary nin X1 yada X2 ucunun birini referans alıp diğerinin konumuna bakarak işlem yaptırabilmek için sadece bu işe atanmış ap ayrı bir kontrolcünün olması gerektiğini düşünüyorum. Öleki, bu kontrolcü sadece geri bildirim verecek.
BENİMLE AYNI FİKİRDE OLMAYIN LÜTFEN!
DÜŞÜNCELERİNİZİ, YORUMLARINIZI YAZIN!
BURADA BERABER FİKİRLERİMİZİ PAYLAŞALIM.
FonkRotaryOku();
fonksiyonunu kullanarak, şu kodu yazdım
Kod:
void main(void) {
while(1) { // Sonsuz döngü
int eski = 0; // Sadece rotariden gelen adımları toplamak için
int yeni = 0; // Rotariden yeni adımlar gelince ekrana yazdırmak için
int hamal =0; // fonksiyondan gelen adımları tutmak için
do {
hamal = FonkRotaryOku();
yeni = yeni + hamal; // hamalı whilede de kontol etmek için kullandım
} while(hamal!=0);
}
if( yeni!=eski ) {
eski = yeni;
printf("Rotary Encoder toplam Adımı= %d", yeni );
}
}
Yukarıda arkadaşlar, bir önceki mesajda yazdığım FonkRotaryOku(); fonksiyonunu kullanarak rotary encoder i sürekli tarama yapmak için kullandım.
Şimdi her defasında okuduğum değeri ekrana yazdırmak için kullansa idim ekrana yazdırma yaparken var olan adımları okuyamazdım. Bu sebeple yazdığım fonksiyondan gelen değer sıfıra eşit ise yada adım sayacımız değişmişse gibi kontrollere göre adımları görsel bir ara yüze atmayı denedim. Yani, rotaryden gelen adımlar sıfırsa rotary duruyor demektir. Bu sayede bir işlem yapmaya müsade ettim. ve de daha önce ekrana yazdırdığım değer rotary durduktan sonra var olan değerden farklı ise yeniden ekrana değer yazdırmayı mümkün kıldım.
Bu sayede rotary encoder daha fazla izlenmiş ve adım kaçırılmamış olacak
Bu kodları derledim ve breadboard da bi deneme yaptım. Rotary ucunu çevirmeyi bırakana kadar ekrana bişey yazdırılmıyor. Bunu engellemek için rotary den gelen değerin kontrol edildiği do...while döngüsü içine bir sayaç atılıp bunun önüne geçilebilir. Mesela yazdığım fonksiyon 10ms lik ve sıfırdan başlayan bir sayının while içinde her bir işlemde arttırımını sağlayıp 100 e eşit olana kadar bir müsade sağlarsanız, 1 sn de bir ekranın tazelenmesini sağlayabilirsiniz.
Tabi ben bir bandın durmasını bekliyeceğim için while döngüsünü kesme gibi bir niyetim yok. Takometre gibi bir uygulama yapacak olanlar saniyede bir ekranı tazelemeleri gerekecek.
Bu uygulamamda bir sorunla karşılaştım. Rotary adımları misal 1555 iken rotarinin miline bir teker taktım. Tekeri bi sağa bi sola bi sağa bi sola rahat 15 defa ileri geri yaptım. Orta noktada duracak şekilde durdurdum. Ama ekranda 1555 gibi bir değer yerine 1809 gibi bir değer gördüm. Ben yaklasık 254 clock luk bir yöne hariket etmedim. 500 clock luk rotary e göre yarım tur bi yöne gitmiş olama gerekiyor. Halbuki ben hala aynı notadayım.
Sonuç olarak, rotary nin X1 yada X2 ucunun birini referans alıp diğerinin konumuna bakarak işlem yaptırabilmek için sadece bu işe atanmış ap ayrı bir kontrolcünün olması gerektiğini düşünüyorum. Öleki, bu kontrolcü sadece geri bildirim verecek.
BENİMLE AYNI FİKİRDE OLMAYIN LÜTFEN!
DÜŞÜNCELERİNİZİ, YORUMLARINIZI YAZIN!
BURADA BERABER FİKİRLERİMİZİ PAYLAŞALIM.