#define ENCDEBUG
#define YON_AC 1 // 1 veya -1 enkoderin artış yönü tayini için
#define encA 2
#define encB 3
int konum,artis,k,enc,enc1,adimBayrak;
int encoder(void);
void setup() {
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(encA), encoder, CHANGE);
attachInterrupt(digitalPinToInterrupt(encB), encoder, CHANGE);
pinMode(encA,INPUT_PULLUP);
pinMode(encB,INPUT_PULLUP);
// encoder başlangıç durumu
enc = digitalRead(encB) + (digitalRead(encA) << 1);
enc1=enc;
Serial.println("start");
sei();
}
void loop() {
}
int encoder(void)
{
// encoder durumunu binary olarak enc değişkenine atama
enc = digitalRead(encB) + (digitalRead(encA) << 1);
if (enc1 != enc) // encoder değişmişse işlem yap
{
switch (enc1)// son okunan encoder değerine göre işlem yap
{
case 0b00:adimBayrak=1; break;// debounce için bayrak değişken
case 0b01:
switch (enc)
{
case 0b11:
if(adimBayrak)
{
konum-=YON_AC ;
adimBayrak=0;
}
#ifdef ENCDEBUG
Serial.println(konum);// metin yazdırmıyorum gecikmeye sebep olmamak için
#endif
break;
default:
break;
}
break;
case 0b10:
switch (enc)
{
case 0b11:
if(adimBayrak)
{
konum+=YON_AC ;
adimBayrak=0;
}
#ifdef ENCDEBUG
Serial.println(konum);// metin yazdırmıyorum gecikmeye sebep olmamak için
#endif
break;
default:
break;
}
break;
default:
enc1 = enc;
break;
}
enc1 = enc;
Serial.print("enc: ");Serial.println(enc,BIN);
}
//return enc;
//return artis;
return konum;
}