evet aklımda var böyle bir şeysana böyle bişey lazım Gökhan abi
içinde 5 volt ve 12 volt adaptör var çok kolay oluyor bu şekilde kullanmak besleme deney bordu vs. hepsi aynı yerdeevet aklımda var böyle bir şey
if (kursor_konum == 0) {
u8g2.drawLine(52, 41, 59, 41);
u8g2.drawLine(52, 42, 59, 42);
} else if (kursor_konum == 1) {
u8g2.drawLine(64, 41, 71, 41);
u8g2.drawLine(64, 42, 71, 42);
}else if (kursor_konum == 2) {
u8g2.drawLine(88, 41, 95, 41);
u8g2.drawLine(88, 42, 95, 42);
}else if (kursor_konum == 3) {
u8g2.drawLine(100, 41, 107, 41);
u8g2.drawLine(100, 42, 107, 42);
}
if (digitalRead(right_btn) == 1) {
if (kursor_konum == 0) {
kursor_konum = 1;
}else if(kursor_konum == 1){
kursor_konum = 2;
}else if(kursor_konum == 2){
kursor_konum = 3;
}else{
kursor_konum = 0;
}
}
Kürsör hangi rakamın altındaysa, o rakamı enkoder ile ayrıca değiştirebileceğiz.abi biz enkoderi ne yapıcaz voltajı keyPad'den yazıyoruz kursörü butonlardan seçiyoruz
enkoder ne iş yapacak
kursor_tazele()
diye bir fonksiyon çağır. Her butonun yapacağı işlev de bir fonksiyon olsun.// Encoder Pinleri /////////////////////
#define PinSw 22
#define PinDt 21
#define PinClk 20
int durum;
int sondurum;
int sayac =0;
void setup() {
Serial.begin(115200);
sondurum = digitalRead(PinClk);
}
void loop() {
/// ROTARY ENCODER KODLARI /////////////
if(digitalRead(PinSw) == 0){
sayac = 0;
Serial.print("Sayaç: ");
Serial.println(sayac);
}
durum = digitalRead(PinClk);
if(durum != sondurum){
if(digitalRead(PinDt) != durum){
sayac++;
}else{
sayac--;
}
Serial.print("Sayaç: ");
Serial.println(sayac);
}
sondurum = durum;
}
pull up yapıyor musun abi@insect23
Şu kodlara debouce yapabilir misin?
Nedense basmıyor lanet kafa. Benim anlayacağım dilde anlatan bulamadım bir türlü.
Kod:// Encoder Pinleri ///////////////////// #define PinSw 22 #define PinDt 21 #define PinClk 20 int durum; int sondurum; int sayac =0; void setup() { Serial.begin(115200); sondurum = digitalRead(PinClk); } void loop() { /// ROTARY ENCODER KODLARI ///////////// if(digitalRead(PinSw) == 0){ sayac = 0; Serial.print("Sayaç: "); Serial.println(sayac); } durum = digitalRead(PinClk); if(durum != sondurum){ if(digitalRead(PinDt) != durum){ sayac++; }else{ sayac--; } Serial.print("Sayaç: "); Serial.println(sayac); } sondurum = durum; }
Enkoder üzerinde var dirençpull up yapıyor musun abi
kaç ohm abi onlarEnkoder üzerinde var direnç
10kkaç ohm abi onlar
#define PinClk 20
#define PinDt 21
#define PinSw 22
int sayac = 0;
long oncekiZaman;
boolean oncekiDurum;
boolean buttonSonDurum = HIGH;
boolean yazildimi = false;
void setup() {
Serial.begin(115200);
pinMode(PinClk, INPUT);
pinMode(PinDt, INPUT);
pinMode(PinSw, INPUT);
digitalWrite(PinClk, HIGH);
digitalWrite(PinDt, HIGH);
}
void loop() {
boolean a = digitalRead(PinDt);
boolean b = digitalRead(PinClk);
boolean c = debounce(PinSw);
if (c == LOW && yazildimi == false) {
Serial.println("Butona basildi ! ");
yazildimi = true;
} else if (c == HIGH) {
yazildimi = false;
}
if (millis() - oncekiZaman > 3) {
if (b != oncekiDurum) {
if (b == LOW) {
if (a == HIGH) {
sayac++;
Serial.print(sayac);
Serial.println(" : sag");
} else {
sayac--;
Serial.print(sayac);
Serial.println(" : sol");
}
}
}
oncekiDurum = b;
oncekiZaman = millis();
}
}
boolean debounce(int pinNo) {
boolean b_Durumu = digitalRead(pinNo);
if (b_Durumu != buttonSonDurum) {
delay(10);
b_Durumu = digitalRead(pinNo);
buttonSonDurum = b_Durumu;
}
return b_Durumu;
}
Encoderin butonu için dedim abi 200ms yi.10 ms yeterli olması lazım debounce için. Bu da saniyede 100 adım atabilmeni sağlar döndürme ile.
Abi o buton için, döndürme için değil 200ms.Bir de 200 ms koyarsan döndürünce saniyede en fazla 5 adım ileri gidersin. Bu çok yavaş.
/// Rotary Enkoder İle İşlem Yapma /////////////
if (kursor_konum == 0) {
if (millis() - oncekiZaman > 1) {
if (b != oncekiDurum) {
if (b == LOW) {
if (a == HIGH) {
kursorSayac++;
if (kursorSayac <= 3 || kursorSayac >= 0) {
voltaj_akim = kursorSayac * 10.0;
Serial.print(kursorSayac);
Serial.println(" : sag");
}
} else {
kursorSayac--;
if (kursorSayac <= 3 || kursorSayac >= 0) {
voltaj_akim = kursorSayac * 10.0;
Serial.print(kursorSayac);
Serial.println(" : sol");
}
}
}
}
oncekiDurum = b;
oncekiZaman = millis();
}
} else if (kursor_konum == 1) {
if (millis() - oncekiZaman > 1) {
if (b != oncekiDurum) {
if (b == LOW) {
if (a == HIGH) {
kursorSayac++;
voltaj_akim = kursorSayac * 1.0;
Serial.print(kursorSayac);
Serial.println(" : sag");
} else {
kursorSayac--;
voltaj_akim = kursorSayac * 1.0;
Serial.print(kursorSayac);
Serial.println(" : sol");
}
}
}
oncekiDurum = b;
oncekiZaman = millis();
}
} else if (kursor_konum == 2) {
if (millis() - oncekiZaman > 1) {
if (b != oncekiDurum) {
if (b == LOW) {
if (a == HIGH) {
kursorSayac++;
voltaj_akim = kursorSayac * 0.1;
Serial.print(kursorSayac);
Serial.println(" : sag");
} else {
kursorSayac--;
voltaj_akim = kursorSayac * 0.1;
Serial.print(kursorSayac);
Serial.println(" : sol");
}
}
}
oncekiDurum = b;
oncekiZaman = millis();
}
} else if (kursor_konum == 3) {
if (millis() - oncekiZaman > 1) {
if (b != oncekiDurum) {
if (b == LOW) {
if (a == HIGH) {
kursorSayac++;
voltaj_akim = kursorSayac * 0.01;
Serial.print(kursorSayac);
Serial.println(" : sag");
} else {
kursorSayac--;
voltaj_akim = kursorSayac * 0.01;
Serial.print(kursorSayac);
Serial.println(" : sol");
}
}
}
oncekiDurum = b;
oncekiZaman = millis();
}
}