ik2vtu:
fanno parte di questo software, se ne hai voglia e tempo, altrimenti me le provo tutte.
Non è così semplice, un software prevede di usare una certa scheda con ben specifici collegamenti, se si collegano le cose nel modo non previsto dal software si possono anche fare danni.
In particolare ho l'impressione che quel software sia scritto per un ArduinoUNO e ne sfrutti caratteristiche specifiche che su Arduino micro sono diverse.
La prima è il collegamento previsto per l'encoder, si leggono queste definizioni:
#define ENCODER_A 3 // Encoder pin A
#define ENCODER_B 2 // Encoder pin B
#define ENCODER_BTN A0
Quindi sicuramente il pulsante va collegato ad A0, ma i pin 2 e 3 di A.UNO hanno funzioni diverse dai pin 2 e 3 di A.micro.
A peggiorare le cose nel setup vedo una configurazione degli interrupt realizzata manipolando direttamente con i registri del controller, il che probabilmente rende questo codice non portabile su altri arduini...
PCICR |= (1 << PCIE2); // Enable pin change interrupt for the encoder
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
E forse non è portabile (nel senso che tutte le cose precedenti più questa vanno riscritte) neppure la ISR:
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result == DIR_CW)
{
if (!setupmenu)
set_frequency(1);
else
setup_menu(1);
}
else if (result == DIR_CCW)
{
if (!setupmenu)
set_frequency(-1);
else
setup_menu(-1);
}
}
Forse, ma solo forse, basterebbe riscrivere le cose sopra in questo modo:
#define ENCODER_A 0 // Encoder pin A
#define ENCODER_B 1 // Encoder pin B
#define ENCODER_BTN A0
attachInterrupt(2, encoderISR, CHANGE);
attachInterrupt(3, encoderISR, CHANGE);
void encoderISR() {
unsigned char result = r.process();
if (result == DIR_CW)
{
if (!setupmenu)
set_frequency(1);
else
setup_menu(1);
}
else if (result == DIR_CCW)
{
if (!setupmenu)
set_frequency(-1);
else
setup_menu(-1);
}
}