Mejoramos nuestro encoder rotativo añadiéndole codificación Gray, gracias a lo cual podremos tener posicionamiento absoluto.
La codificación Gray es una técnica genial que permite eliminar errores de lectura y es muy eficaz y sencilla.
No te pierdas la animación, en la que analizamos su funcionamiento paso a paso, haciendo una conversión de binario a decimal muy sencilla.
Algunas herramientas y referencias usadas en el vídeo:
– ESP8266
Si te gustó el vídeo dale al like 👍, deja un comentario y no olvides suscribirte.
Aquí el programa para ESPHome
number:
- platform: template
name: "Posición encoder"
id: pos_encoder
max_value: 15
step: 1
min_value: 0
optimistic: true
binary_sensor:
- platform: gpio
pin: GPIO16
id: Pin0
name: "Pin0"
on_state:
then:
- script.execute:
id: lee_posicion
- platform: gpio
pin: GPIO5
id: Pin1
name: "Pin1"
on_state:
then:
- script.execute:
id: lee_posicion
- platform: gpio
pin: GPIO4
id: Pin2
name: "Pin2"
on_state:
then:
- script.execute:
id: lee_posicion
- platform: gpio
pin: GPIO0
id: Pin3
name: "Pin3"
on_state:
then:
- script.execute:
id: lee_posicion
script:
- id: lee_posicion
then:
- number.set:
id: pos_encoder
value: !lambda |-
int lecturas[16]= {3, 2, 0, 1,12,13,15,14, 4, 5, 7, 6,11,10, 8, 9};
return lecturas[id(Pin0).state + id(Pin1).state * 2 + id(Pin2).state * 4 + id(Pin3).state * 8];
# este es el orden de las lecturas y así asociamos el array
# 2, 3, 1, 0, 8, 9,11,10,14,15,13,12, 4, 5, 7, 6
# esto es lo que queremos que devuelva realmente
# 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15
# lecturas[2]=0; lecturas[3]=1; lecturas[1]=2; ...
# el array queda, por tanto, así:
# 3, 2, 0, 1,12,13,15,14, 4, 5, 7, 6,11,10, 8, 9

