#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