Paso 4: Haga y subsistema de entrada de código de codificador rotatorio
A partir de lo que se supone era la parte superior, revisé todos los pines para la continuidad. Ya que se supone que es un codificador simple, suponía (correctamente) que no serían dos conjuntos disjuntos de pins conectados para una posición dada del codificador. Por lo tanto hice un mapa como el siguiente, tomando nota 0 para pernos que no se conectaron y 1 para pernos que estaban conectados.
Posición: Conectividad pernos 12345)
0 - 00000
1 - 01100
2 - 10100
3 - 11100
4 - 00101
5 - 01101
6 - 10101
7 - 11101
8 - 00110
9 - 01110
Sabiendo que un perno tuvo que ser común, busqué el único pin que fue conectado para todos, pero la posición "0", que pasó a ser el pin 3, en el centro. Luego trató de discernir algún patrón para los demás números conectados, y como se puede ver, se hizo evidente que los dos pernos de izquierda eran los dos bits menos significativos, y los derecha dos pernos fueron los dos bits más significativos (en ambas parejas, los bits más significativos fueron para la izquierda). En otras palabras, con pin 3 como común, que quería determinar el valor de número entero formado por los pines 4512.
Para leer este valor, tuve cable los pines en entradas digitales del Arduino, leer los valores y cambio en un byte. Puesto que los contactos no siempre cambian inmediatamente los valores esperados al cambiar la selección del codificador, agregué algunos código debounce. A continuación informará el estado del codificador después de que ha permanecido invariable durante milisegundos DEBOUNCE_TIME (en este caso, 10). Tenga en cuenta los cables siguientes, desde el esquema:
pin de encoder 2 -> ENC_BIT_0
pin de encoder 1 -> ENC_BIT_1
pin de encoder 5 -> ENC_BIT_2
pin de codificador 4 -> ENC_BIT_3
---comienzan---
cuatro bits utilizados por el codificador rotatorio
los pines analógicos pueden utilizarse realmente como IO digital,
sólo se refieren a los números A0-A5 como sus equivalentes digitales: 14-19
#define ENC_BIT_0 14
#define ENC_BIT_1 15
#define ENC_BIT_2 16
#define ENC_BIT_3 17
duración del debounce delay, en milisegundos
es decir, tiempo que valor debe permanecer constante
antes de que se cuenta como una nueva "entrada"
#define DEBOUNCE_TIME 10
uint8_t debounceEncoder() {}
temporizador de uint32_t estática = 0;
estática uint8_t debounced = false;
currentValue uint8_t estática = 0;
uint8_t bit0 =! digitalRead(ENC_BIT_0);
uint8_t albañilería1 =! digitalRead(ENC_BIT_1);
uint8_t bit2 =! digitalRead(ENC_BIT_2);
uint8_t bit3 =! digitalRead(ENC_BIT_3);
uint8_t newValue = 0;
newValue = (bit3 << 3) | (bit2 << 2) | (albañilería1 << 1) | bit0;
Si (newValue! = currentValue & & debounced) {}
temporizador = millis() + DEBOUNCE_TIME;
debounced = false;
}
Si (millis() > temporizador & &! debounced) {}
currentValue = newValue;
debounced = true;
}
volver currentValue;
}
// ------end------