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