5 disponibles
Si tratamos a los pines en código binario, las leemos como 00, 01, 10, o 11. Lasecuencia de las salidas del codificador mientras giramos en sentido de las agujas del reloj es 00, 01, 11, 10. Así que si se tiene una lectura de 01, la siguiente lectura puede ser 00 o 11 dependiendo de la dirección en que se gira. Así que, mediante la adición del valor codificado anteriormente se botiene se obtiene 1 de 8 posibles números (0001, 0010, 0100, 0111, 1000, 1011, 1110 y 1101). Estas cuatro combinaciones 1101, 0100, 0010 y 1011 indican un movimiento horario y 1110, 0111, 0001 y 1000 un movimiento antihorario.
Así que ahora podemos decir lo siguiente: (suma es igual a la última lectura + lectura actual)
if (suma == 0b1101 | | == suma 0b0100 | | == suma 0b0010 | | == suma 0b1011) ValorEncoder + +;
/ / movimiento las agujas del reloj
if (suma == 0b1110 | | == suma 0b0111 | | == suma 0b0001 | | == suma 0b1000) ValorEncoder –;
/ / movimiento hacia la izquierda
Si quisiéramos tratarlo con números decimales tendríamos:
if (suma == 13 | | == suma 4 | | suma == 2 | | == suma 11) ValorEncoder + +;
if (suma == 14 | | == suma 7 | | suma == 1 | | == suma 8) ValorEncoder –;
Las variables globales que se utilizan dentro de estas funciones tienen un nombre especial. Se llaman variables volátiles (volatile), y se utilizan porque sus valores pueden cambiar en cualquier momento. Así que si se utilizan dos variables volátiles, ya que puede no ser el mismo valor de estas varialbes si se produce el cambio en ellas durante una función de interrupción.
Necesitamos una libreria que realize lo explicado anteriormente, aunque se puede hacer sin una, pero fue de la manera en que obtuvimos mejores resultados. Libreria: Encoder.zip.
El programa de ejemplo es el siguiente, esta incluido en la libreria:
#include <Encoder.h>
// Change these two numbers to the pins connected to your encoder.
// Best Performance: both pins have interrupt capability
// Good Performance: only the first pin has interrupt capability
// Low Performance: neither pin has interrupt capability
Encoder myEnc(5, 6);
// avoid using pins with LEDs attached
void setup() {
Serial.begin(9600);
Serial.println(“Basic Encoder Test:”);
}
long oldPosition = -999;
void loop() {
long newPosition = myEnc.read();
if (newPosition != oldPosition) {
oldPosition = newPosition;
Serial.println(newPosition);
}
}
Conctamos los pines CLK al pin 6 y el pin DT al 5 del arduino. GND va a GND del arduino y el pin (+) del enconder a 5V del micro.
Cuando giramos hacia un lado empezara a subir los numeros y hacia el lado contrario disminuira la cuenta.
© 2022 TecnoConCiencia.
Diseñado por kratem.net