My encoder not working with leonardo

hi,

i have a ffb wheel project working with an arduino leonardo and an encoder.
it was working perfect but now it is not. (i disassembled leonardo and encoder and didn't use for 1 year and i assembled again).

the problem is;
leonardo can't read my encoder.

i was using this encoder1.

i thought that it is broken down and bought a new one (encoder2)...

and they are not working...

then i tried an other one (encoder3)...

and it is working.

it means, my arduino leonarda and my circuit works. (i think)

i tried my old encoder with an other circuit and an other arduino code.


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++;
  }
  }

all encoders (3 of them) are working with this code so i think that, my all encoders are working.

if i am true, why my old encoder and the one which i bought new dosn't work?
why the big encoder work?

what is the problem i can't see???

my circuit has an switch between pin6 and GND (as you can see in the picture).

thanks :slight_smile:

Welcome to the forum

Please follow the advice given in the link below when posting code, in particular the section entitled 'Posting code and common code problems'

Use code tags (the </> icon above the compose window) to make it easier to read and copy for examination

sorry for mistake...
thanks...

Thanks for adding the code tags

attachInterrupt(digitalPinToInterrupt(19), Interrupt_fonksiyonu2, RISING);

Is this line attaching an ISR to pin 19 of the Leonardo ?

No.
My leonardo has a .hex code.
With leonardo, i use +5V, GND, pin0 and pin1... Also pin6 to GND.

For the code you said:
I tried this code with an Arduino Mega (for testing the encoder). I used +5V, GND, pin18 and pin19...

I found the mistake. I had pull-down resistors for pin0 and pin1 (encoder phase a and phase b)... They should be pull-up...

I corrected them and working now...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.