/*
El arduino se conecta a varios rotary_encoders
En el movimiento de cualquier de ellos o push de sus botones
se notifica por Serial
*/
#define TOTAL_ENCODERS_ROTARIES 8
#define LAST_ENCODER_ROTARY_IN_ARRAY (TOTAL_ENCODERS_ROTARIES-1)
typedef struct encoder_rotary_struct
{
int pinLeft;
int pinRight;
int pinSw;
int state;
int lastState;
int counter;
};
encoder_rotary_struct encoder_rotary[LAST_ENCODER_ROTARY_IN_ARRAY] = {
{51, 49, 47, 0, 0, 0}, // ENCODER ROTARY 1
{45, 43, 41, 0, 0, 0}, // ENCODER ROTARY 2
{39, 37, 35, 0, 0, 0}, // ENCODER ROTARY 3
{32, 30, 28, 0, 0, 0}, // ENCODER ROTARY 4
{22, 24, 26, 0, 0, 0}, // ENCODER ROTARY 5
{27, 25, 23, 0, 0, 0}, // ENCODER ROTARY 6
{33, 31, 29, 0, 0, 0}, // ENCODER ROTARY 7
};
void setup()
{
for (int i = 0; i < LAST_ENCODER_ROTARY_IN_ARRAY; i++)
{
pinMode(encoder_rotary[i].pinLeft, INPUT_PULLUP);
pinMode(encoder_rotary[i].pinRight, INPUT_PULLUP);
pinMode(encoder_rotary[i].pinSw, INPUT_PULLUP);
encoder_rotary[i].lastState = digitalRead(encoder_rotary[i].pinLeft);
}
Serial.begin (115200);
}
void loop()
{
for (int i = 0; i < LAST_ENCODER_ROTARY_IN_ARRAY; i++)
{
if (!digitalRead(encoder_rotary[i].pinSw))
{
Serial.print(millis()); Serial.print(" ");
Serial.print("Push Rotary #");
Serial.println(i+1);
Serial.println();
}
encoder_rotary[i].state = digitalRead(encoder_rotary[i].pinLeft);
if (encoder_rotary[i].state != encoder_rotary[i].lastState)
{
if (digitalRead(encoder_rotary[i].pinRight) != encoder_rotary[i].state)
{
encoder_rotary[i].counter++;
}
else
{
encoder_rotary[i].counter--;
}
Serial.print(millis()); Serial.print(" ");
Serial.print("Change Rotary #");
Serial.print(i+1);
Serial.print(" (");
Serial.print("pinLeft="); Serial.print(encoder_rotary[i].pinLeft);
Serial.print("pinRight="); Serial.print(encoder_rotary[i].pinRight);
Serial.print("pinSwitch="); Serial.print(encoder_rotary[i].pinSw);
Serial.print("). ");
Serial.print(" counter=");
Serial.println(encoder_rotary[i].counter);
Serial.println();
encoder_rotary[i].lastState = encoder_rotary[i].state;
}
}
}