#include <avr/io.h>
#include <avr/interrupt.h>

#define DIR_PIN A0
#define T1_PIN 5

volatile int direction = 0;
volatile int32_t encoder0Pos = 0, encoder0Postemp=0;

// Definiáljuk a fastRead makrót a gyors pin olvasáshoz
#define fastRead(_pin) ( (_pin < 8) ? bitRead(PIND, _pin) : ( (_pin < 14) ? bitRead(PINB, _pin - 8) : bitRead(PINC, _pin - 14) ) )

void setup() {
  pinMode(DIR_PIN, INPUT_PULLUP);
  pinMode(T1_PIN, INPUT); // T1 (PD5) pin beállítása bemenetként
  TCNT1 = 0; // Nullázza a Timer1 számlálót
  // Timer1 beállítása külső impulzus számlálására
  TCCR1A = 0;  // Normal mode
  TCCR1B = (1 << CS12) | (1 << CS11) | (1 << CS10); // External clock on T1 pin (PD5), rising edge
  sei(); // Enable global interrupts

  Serial.begin(115200);
}

void loop() {
  updateEncoderCounter();
 // Serial.print("Position: ");
 // Serial.println(encoder0Pos);
  delay(1000);

 if(encoder0Postemp!=encoder0Pos)
 {
    encoder0Postemp=encoder0Pos;
    Serial.print("Position: ");
    Serial.println(encoder0Pos);
 }
}

void updateEncoderCounter() {
  uint16_t tcnt1 = TCNT1; // TCNT1 értékének olvasása
  if fastRead(DIR_PIN) { // A gomb lenyomásakor Low
    encoder0Pos -= tcnt1;
  } else {
    encoder0Pos += tcnt1;
  }
  TCNT1 = 0; // Nullázza a Timer1 számlálót
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
r1:1
r1:2
sw1:1
sw1:2
sw1:3
r2:1
r2:2