Arama butonu
Bu konudaki kullanıcılar: 1 misafir
1
Cevap
695
Tıklama
0
Öne Çıkarma
Arduino Rotary Encoder Sorunu
D
5 yıl
Binbaşı
Konu Sahibi

Selamlar;
https://www.youtube.com/watch?v=9FVdlEIyOsE&list=RDCMUCbB7uPx8fSmEdMjRYe3sjNA&start_radio=1&t=300
Bu linkteki Retardarı yapmaya çalışıyorum fakat rotary encoderı çevirdiğim zaman resimdeki gibi (https://prnt.sc/s1rluc ) eksen sol üste yapışıyor ve o şekilde kalıyor. Sizce sorun nerede?
Benim istediğim şey rotary encoderın bir tuş olması yani örnek verecek olursak rotary encoder her sağa çevrildiğinde joystickten X tuşuna basması her sola çevrildiğinde y ruşuna basması gibi.

#define  A_Girisi 3 //Encoder CLK pininin kart üzerinde takılacak pini tanımlama işlemi
#define B_Girisi 4 //Encoder DT pininin kart üzerinde takılacak pini tanımlama işlemi
#define Korna 6 // micro switchin kart üzerinde takılacağı pin tanımlama işlemi
#define Selektor 5 // micro switchin kart üzerinde takılacağı pin tanımlama işlemi

#include <Joystick.h> //Joystick olarak kullanacağımız için eklenmesi gereken kütüphane

long oncekiZaman;
boolean oncekiDurum;
boolean kornaDurum;
boolean selektorDurum;

Joystick_ Joystick;
void setup() {

Joystick.begin();
Serial.begin(9600);
pinMode(A_Girisi, INPUT);
pinMode(B_Girisi, INPUT);
pinMode(Korna, INPUT_PULLUP);
pinMode(Selektor, INPUT_PULLUP);
digitalWrite(A_Girisi, HIGH);
digitalWrite(B_Girisi, HIGH);
}

void loop() {
kornaDurum = false;
selektorDurum = false;

boolean a = digitalRead(A_Girisi);
boolean b = digitalRead(B_Girisi);

if(digitalRead(Korna) == LOW ){ //
Joystick.pressButton(2);
kornaDurum = true;
}

if(kornaDurum && digitalRead(Korna)== HIGH){
Joystick.releaseButton(2);
Serial.println("release Basıyor 1");
}

if(digitalRead(Selektor) == LOW){
Joystick.pressButton(3);
selektorDurum = true;
}
if(selektorDurum && digitalRead(Selektor)== HIGH){
Joystick.releaseButton(3);
Serial.println("release Basıyor 1");
}

if (millis() - oncekiZaman > 3) {
if (b != oncekiDurum) {
if (b == LOW) {
if (a == HIGH) {
Joystick.pressButton(0);

Joystick.releaseButton(0);
Serial.println(" : sag");
} else {
Joystick.pressButton(1);

Joystick.releaseButton(1);
Serial.println(" : sol");
}
}
}



oncekiDurum = b;
oncekiZaman = millis();
}
}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi donhak -- 18 Nisan 2020; 15:54:50 >

D
5 yıl
Binbaşı
Konu Sahibi

Anladığım kadarıyla olayın rotary encoderla alakası yok. Encoderı çıkardım. Basit bir switch bağladım. Kodlarda encoderla ilgili tüm bölümleri sildim. Butona bastığımda aygıt yöneticisinde butona basılmış gözüküyor fakat eksenler yine sol yukarda kalıyor. < Resime gitmek için tıklayın > < Resime gitmek için tıklayın >

#define Selektor 5 // micro switchin kart üzerinde takılacağı pin tanımlama işlemi

#include <Joystick.h> //Joystick olarak kullanacağımız için eklenmesi gereken kütüphane

boolean selektorDurum;

Joystick_ Joystick;
void setup() {

Joystick.begin();
Serial.begin(9600);
pinMode(Selektor, INPUT_PULLUP);

}

void loop() {

selektorDurum = false;



if(digitalRead(Selektor) == LOW){
Joystick.pressButton(3);
selektorDurum = true;
}
if(selektorDurum && digitalRead(Selektor)== HIGH){
Joystick.releaseButton(3);
Serial.println("release Basıyor 1");
}
}





< Bu mesaj bu kişi tarafından değiştirildi donhak -- 18 Nisan 2020; 17:32:50 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.