Ho notato anch' io questa cosa, e la cosa che meno capisco è perché ruotandolo un po piu velocemente (immagine 3), il segnale sembri "corretto", mentre ruotando lentamente no....luxinterior ha scritto:Mi puoi spiegare una cosa
le orme d'onda non sono quelle di un segnale encoder Se fosse ecoder incrementale sarebbero due onde quadre sfasate di 90°
Anche sulllo stampato le label dei pin sono CLK_PIN e DRCT_PIN a me fa pensare più a una seriale con segnale di clock e dato.
AVresti mica un datashhet o della documentaizone della tua schedina che descrive l'interfaccia
Purtroppo non ho nessun datasheet, sono dei modulini (quasi sicuramente cinesi) che avevo in casa acquistati anni fa.
L' unica cosa che posso confermarti che sono esattamente come quello in foto.
E hai ragione anche tu ....djnz ha scritto:lucaking ha scritto:ho modificato anche il codice come segue
![]()
![]()
![]()

Eccolo:
- Codice: Seleziona tutto
#define SW_PIN 2
#define CLK_PIN 3
#define DRCT_PIN 4
volatile int encoder_count = 0;
volatile boolean encoder_trig = 0;
volatile boolean button_trig = 0;
void button_handler ()
{
static unsigned long button_time;
static unsigned long last_button_time = 0;
button_time = millis();
if ((button_time - last_button_time) > 300) {
last_button_time = button_time;
button_trig = 1;
}
}
void encoder_handler ()
{
static unsigned long encoder_time;
static unsigned long last_encoder_time = 0;
encoder_time = millis();
if ((encoder_time - last_encoder_time) > 10) {
last_encoder_time = encoder_time;
delay(5);
boolean clk_pin_state = digitalRead (CLK_PIN);
boolean drct_pin_state = digitalRead (DRCT_PIN);
if (clk_pin_state == !drct_pin_state) {
encoder_count ++;
}
if (clk_pin_state == drct_pin_state) {
encoder_count --;
}
encoder_trig = 1;
}
}
void setup() {
pinMode (SW_PIN, INPUT);
pinMode (CLK_PIN, INPUT);
pinMode (DRCT_PIN, INPUT);
attachInterrupt (0, button_handler, FALLING); // encoder SW_PIN.
attachInterrupt (1, encoder_handler, FALLING); // encoder CLK_PIN.
Serial.begin (9600);
}
void loop() {
if (encoder_trig) {
Serial.print(encoder_count);
Serial.print(" ");
encoder_trig = 0;
}
if (button_trig) {
Serial.print("\n\rConfermato ");
Serial.println(encoder_count);
Serial.println();
button_trig = 0;
}
}

Devo riguardarmi alcuni concetti base, tipo il bitshifting, operatori logici e array bidimensionali, giusto due dettagli insomma....

Nei giorni a venire vorrei dedicare un po di tempo sia al tuo che ha quello della libreria che ho linkato, mi sembra di capire che il metodo alla base sia simile.