#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4
const int NUMEROMAXIMORUTAS = 5;
const int MAXIMO_NUMERO_AGUJAS_POR_RUTA = 5;
int lastClk = HIGH;
int n2 = 0; // solo sirve para que mostrar una vez por pantalla el resultado
int n1 = 1; // solo sirve para lo mismo que n2
int Contador_encoder = 0;
int agujafectada;
bool estado_requerido;
struct StrayectosRutas {
// nombre ruta
// numeros de agujas implicados
// estado de dichas agujas.
String nombre_de_ruta;
int Agujas_Afectadas_Ruta[MAXIMO_NUMERO_AGUJAS_POR_RUTA];
bool estado_agujas_afectada[MAXIMO_NUMERO_AGUJAS_POR_RUTA];
};
StrayectosRutas ArrayRutas[NUMEROMAXIMORUTAS];
void MaestroRutas() {
// ruta 0
ArrayRutas[0].nombre_de_ruta = "ruta 1";
// repetir tantas agujas lleve la ruta
ArrayRutas[0].Agujas_Afectadas_Ruta[0] = 1 ;
ArrayRutas[0].Agujas_Afectadas_Ruta[1] = 3 ;
ArrayRutas[0].Agujas_Afectadas_Ruta[2] = 4 ;
ArrayRutas[0].Agujas_Afectadas_Ruta[3] = 6 ;
ArrayRutas[0].Agujas_Afectadas_Ruta[4] = 20 ;
ArrayRutas[0].Agujas_Afectadas_Ruta[5] = 99 ;
// seran las mismas - 1 lineas que agujas lleve la ruta
ArrayRutas[0].estado_agujas_afectada[0] = 0;//estado_desvio_recto;
ArrayRutas[0].estado_agujas_afectada[1] = 1;//estado_desvio_recto;
ArrayRutas[0].estado_agujas_afectada[2] = 1;//estado_desvio_recto;
ArrayRutas[0].estado_agujas_afectada[3] = 0;//estado_desvio_recto;
ArrayRutas[0].estado_agujas_afectada[4] = 1;//estado_desvio_recto;
// ruta 1
ArrayRutas[1].nombre_de_ruta = "ruta 2";
ArrayRutas[1].Agujas_Afectadas_Ruta[0] = 1 ;
ArrayRutas[1].Agujas_Afectadas_Ruta[1] = 23 ;
ArrayRutas[1].Agujas_Afectadas_Ruta[2] = 11 ;
ArrayRutas[1].Agujas_Afectadas_Ruta[3] = 31 ;
ArrayRutas[1].Agujas_Afectadas_Ruta[4] = 99 ;
ArrayRutas[1].estado_agujas_afectada[0] = 1;//estado_desvio_recto;
ArrayRutas[1].estado_agujas_afectada[1] = 0;//estado_desvio_recto;
ArrayRutas[1].estado_agujas_afectada[2] = 1;//estado_desvio_recto;
ArrayRutas[1].estado_agujas_afectada[3] = 0;//estado_desvio_recto;
// ruta 2
ArrayRutas[2].nombre_de_ruta = "Molinos";
ArrayRutas[2].Agujas_Afectadas_Ruta[0] = 1 ;
ArrayRutas[2].Agujas_Afectadas_Ruta[1] = 3 ;
ArrayRutas[2].Agujas_Afectadas_Ruta[2] = 99 ;
ArrayRutas[2].estado_agujas_afectada[0] = 0;//estado_desvio_recto;
ArrayRutas[2].estado_agujas_afectada[1] = 1;//estado_desvio_recto;
// ruta 3
}
void setup() {
Serial.begin(115200);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
MaestroRutas();
}
void loop()
{
PulsoBoton();
int newClk = digitalRead(ENCODER_CLK);
if (newClk != lastClk)
{
lastClk = newClk;
int dtValue = digitalRead(ENCODER_DT);
if (newClk == LOW && dtValue == HIGH)
{
Serial.println("Rotated clockwise ⏩");
n1 = 1;
Contador_encoder = Contador_encoder + 1;
if (Contador_encoder > 2)
{
Contador_encoder = 2;
}
}
if (newClk == LOW && dtValue == LOW)
{
Serial.println("Rotated counterclockwise ⏪");
Contador_encoder = Contador_encoder - 1;
n1 = 1;
if (Contador_encoder < 0)
{
Contador_encoder = 0;
}
}
}
if (n1 != n2)
{
Serial.println(ArrayRutas[Contador_encoder].nombre_de_ruta);
n1 = n2;
}
}
void PulsoBoton()
{
if (digitalRead(ENCODER_SW) == LOW)
{
Serial.println("pulsado");
Serial.println(" -> ");
Serial.println(Contador_encoder);
delay(500);
for (int recorroarray = 0; recorroarray < MAXIMO_NUMERO_AGUJAS_POR_RUTA; recorroarray++)
{
agujafectada = ArrayRutas[Contador_encoder].Agujas_Afectadas_Ruta[recorroarray];
if (agujafectada ==99)
{
break;
}
estado_requerido = ArrayRutas[Contador_encoder].estado_agujas_afectada[recorroarray];//estado_desvio_recto;
Serial.print(" aguja afectada ");
Serial.print( agujafectada);
Serial.print("\t");
Serial.print(" estado requerido ");
Serial.println(estado_requerido);
// enviaremos a que se mueva la aguja con los datos ya tomados(aguja,estado)
delay(1000); // si es un delay, aqui no importa.
}
}
}