Şimdi Ara

arduino leonardo ile direksiyon yapımı (encoder çalışmıyor)...

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
3
Cevap
0
Favori
151
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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...



    arduino leonardo ile direksiyon yapımı (encoder çalışmı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 








  • Hatamı buldum. Encoder A ve B uçlarında pull-up direnci olmalı ama ben devrede pull-down tasarlamışım. Düzeltince çalıştı...

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.