merhaba,
arduino leonardo ve encoder kullanarak yaptığım bir direksiyon setim vardı. uzun süre sorunsuz çalıştı, kullandım. daha sonra leonardoyu ve encoderi sökerek (sistemi demonte ederek) kaldırdım ve yaklaşık 1 yıl sonra tekrar kurdum.
problem şu;
leonardo encoderi okuyamıyor...
kullandığım encoder 1'di.
ben bozulduğunu düşündüm ve 2 numaralı encoderi sipariş ettim. ama o da çalışmadı.
daha sonra encoder 3'ü bir arkadaşımdan alarak denedim ve çalıştı.
yani şunu anladım ki, benim devremde veya leonardo yazılımımda herhangi bir sıkıntı yok. çünkü 3 numaralı encoder ile gayet güzel çalışıyor herşey.
sonra 1 ve 2 numaralı encoderlerimi başka bir arduino ve başka bir yazılımla denedim.
yazılım şu:
---
volatile unsigned int temp, counter = 0; //Bu değişkenleri encoder hareket ederken ve daha önceki konumu ile karşılaştırmak için kullanacağız
void setup() {
Serial.begin (9600);
pinMode(18, INPUT_PULLUP); // Encoderden çıkan yeşil yada sarı kabloyu Arduinonun 2. pinine
pinMode(19, INPUT_PULLUP); // Encoderden çıkan yeşil yada sarıdan hangisikaldıysa kabloyu Arduinonun 3. pinine
/* Aşağıda "interrupt" dediğimiz bölme,araya girme anlamları olan fonksiyonları tanımlıyoruz burada temel mantık şu;
- Bu pinlerdeki sinyalde değişiklik olduğu anda işlemci yaptığı işi yarım bırakıp bu pine bağlı fonksiyonu yapıp normal işlemlerine geri dönecek.
- Bu işlemi yaptırtabilemek için bu pinlere interrupt koyduğumuzu belirten kodu yazıyoruz.
- */
//Burada 2 numaralı pinde sinyal seviyesi yükselidinde "Interrupt_fonksiyonu1" i çalıştır diyoruz
attachInterrupt(digitalPinToInterrupt(18), Interrupt_fonksiyonu1, RISING);
//Burada 3 numaralı pinde sinyal seviyesi yükselidinde "Interrupt_fonksiyonu2" i çalıştır diyoruz
attachInterrupt(digitalPinToInterrupt(19), Interrupt_fonksiyonu2, RISING);
}
//Yukarıdaki kodda "Interrupt_fonksiyonu1" ve "Interrupt_fonksiyonu2" içerisinde ne olacağını en aşağıda belirledik
void loop() {
// Aşağıdaki if kodunda elimizdeki "counter" değeri ile kayıtlı olan "temp" değeri aynı mı onu kontrol ediyoruz aynı ise işlem yapmıyoruz fakat farklı
// ise "counter" değerimizi serial porta yazdırıyoruz ve yeni counter değerimizi "temp" değerine kayıt ediyoruz
if( counter != temp ){
Serial.println (counter);
temp = counter;
}
}
void Interrupt_fonksiyonu1() {
// bu fonksiyon 2 numaralı pinde sinyal değerimiz yükseldiğinde çalışıyor diğer pinin sinyaline bakıp saat yönünde yada tersine döndüğünü tayin ediyoruz
// dönüş yönüne göre değeri arttırıp azaltıyoruz
if(digitalRead(19)==LOW) {
counter++;
}else{
counter--;
}
}
void Interrupt_fonksiyonu2() {
// bu fonksiyonda aynı üsteki fonksiyon gibi 3 numaralı pinde sinyal değerimiz yükseldiğinde çalışıyor diğer pinin sinyaline bakıp saat yönünde yada tersine döndüğünü tayin ediyoruz
// dönüş yönüne göre değeri arttırıp azaltıyoruz
if(digitalRead(18)==LOW) {
counter--;
}else{
counter++;
}
}
---
ve tüm encoderler (her 3ü de) bu yazılımda çalıştı. Sağa dönüş, sola dönüş sorunsuz çalışıyor.
yani buradan da şunu anladım ki aslında encoderlerin de tamamı sağlam.
ama madem hem devrem, hem de encoderlerim sağlam neden 2si leonardoda çalışmıyor da birisi çalışıyor?
benim göremediğim, kaçırdığım problem ne?
(bu arada devre şeklimi de ekledim resme. pin6 ile GND bağlantım vs de var, ki dediğim gibi encoder3 ile herşey çalışıyor...)
teşekkür ederim
Son Giriş: 2 yıl önce
Son Mesaj Zamanı: 2 yıl
Mesaj Sayısı: 265
Gerçek Toplam Mesaj Sayısı: 266
İkinci El Bölümü Mesajları: 0
Konularının görüntülenme sayısı: 524 (Bu ay: 19)
Toplam aldığı artı oy sayısı: 72 (Bu hafta: 0)
En çok mesaj yazdığı forum bölümü: Motorlu Araçlar Dünyası