La magia de la codificación Gray

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

Encoder rotativo

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
Scroll al inicio