Contador de 0 a 9 con MicroPython

Contenido:

Contador de 0 a 9 con MicroPython

Un contador de 0 a 9 con MicroPython es de gran utilidad para mantener un conteo en diversas situaciones, ya sea para el marcador de puntos en un juego, contar objetos, entre otras.

Este proyecto fue realizado con una Placa Raspberry Pi Pico con el firmware de micropython previamente instalado, para la visualización del conteo se emplea un display de siete segmentos de ánodo común, el cual es capaz de visualizar números desde 0 hasta el 9.

Materiales

  • 1x Placa Raspberry Pi Pico, Esp32 o cualquier placa con micropython.
  • 1x Display de 7 segmentos de ánodo común.
  • 8x Resistor de 330 Ohm.
  • 2x Pulsador normalmente abierto.
  • 1x Protoboard.
  • Cables de conexión.

Circuito

Para el montaje de este circuito se utilizó una placa Raspberry Pi Pico, si utilizas otra placa debes verificar la disponibilidad o modificar los pines utilizados para este diseño.

contador de 0 a 9 micropython
Figura 1: Circuito con la Placa Raspberry Pi Pico.

El display se debe conectar de la siguiente manera:

contador de 0 a 9 micropython
Figura 2: Display 7 segmentos.
  • El Pin a va conectado al Pin GP7 de la placa.
  • El Pin b va conectado al Pin GP6 de la placa.
  • El Pin c va conectado al Pin GP9 de la placa.
  • El Pin d va conectado al Pin GP10 de la placa.
  • El Pin e va conectado al Pin GP11 de la placa.
  • El Pin f va conectado al Pin GP12 de la placa.
  • El Pin g va conectado al Pin GP13 de la placa.
  • El Pin DP va conectado al Pin GP8 de la placa.

El pin de salida del pulsador de incremento va conectado al Pin GP4 de la Placa. El Pin de ingreso va conectado a GND.

El pin de salida del pulsador de decremento va conectado al Pin GP5 de la Placa. El Pin de ingreso va conectado a GND.

Sketch en MicroPython

Para la programación de este sketch se utilizó una placa Raspberry Pi Pico, si utilizas otra placa debes verificar la disponibilidad o modificar los pines utilizados.

from machine import Pin
from time import sleep

#Setup Pin de Entrada (Pulsador)
pin_btn_up = Pin(4, Pin.IN, Pin.PULL_UP)
pin_btn_down = Pin(5, Pin.IN, Pin.PULL_UP)

#Setup Pines de Salida (Display Anado Comun)
pin_a = Pin(7, Pin.OUT)
pin_b = Pin(6, Pin.OUT)
pin_c = Pin(9, Pin.OUT)
pin_d = Pin(10, Pin.OUT)
pin_e = Pin(11, Pin.OUT)
pin_f = Pin(12, Pin.OUT)
pin_g = Pin(13, Pin.OUT)
pin_dp = Pin(8, Pin.OUT)

#Estados logicos de ON/OFF para display de Anodo Comun
H = 0
L = 1
numero = 0

#Funcion para activar cada segmentos del display
def driver(a,b,c,d,e,f,g,dp):
    pin_a.value(a)
    pin_b.value(b)
    pin_c.value(c)
    pin_d.value(d)
    pin_e.value(e)
    pin_f.value(f)
    pin_g.value(g)
    pin_dp.value(dp)

#Funcion para pruebas de conexion y funcionamiento
def funcionamiento():
    driver(H, H, H, H, H, H, H, H)
    sleep(1)
    driver(L, L, L, L, L, L, L, L)

#Funcion que compara cada numero
def numeros(numero):
    #Numero 0
    if numero == 0:
        driver(H, H, H, H, H, H, L, L)
    #Numero 1
    if numero == 1:
        driver(L, H, H, L, L, L, L, L)
    #Numero 2
    if numero == 2:
        driver(H, H, L, H, H, L, H, L)
    #Numero 3
    if numero == 3:
        driver(H, H, H, H, L, L, H, L)
    #Numero 4
    if numero == 4:
        driver(L, H, H, L, L, H, H, L)
    #Numero 5
    if numero == 5:
        driver(H, L, H, H, L, H, H, L)
    #Numero 6
    if numero == 6:
        driver(H, L, H, H, H, H, H, H)
    #Numero 7
    if numero == 7:
        driver(H, H, H, L, L, L, L, L)
    #Numero 8
    if numero == 8:
        driver(H, H, H, H, H, H, H, L)
    #Numero 9
    if numero == 9:
        driver(H, H, H, H, L, H, H, H)

#Prueba de conexion y funcionamiento
funcionamiento()
numeros(numero)

#Bucle de repeticion infinita
while 1:
    #Si el estado del Pin de entrada up es LOW
    if (pin_btn_up.value() == 0):
        #Retardo Antirrebote
        sleep(0.005)
        #Mientras el estado del Pin sea LOW ingresa al bucle
        while(pin_btn_up.value() == 0):
            continue
        #Incrementa la variable en una unidad
        numero = numero+1
        #Si el valor de numero es mayor a 9
        if numero > 9:
            #Asigna el valor 0 a numero
            numero = 0
        #Envia a la funcion el valor de numero
        numeros(numero)
    #Si el estado del Pin de entrada down es LOW
    if (pin_btn_down.value() == 0):
        #Retardo Antirrebote
        sleep(0.005)
        #Mientras el estado del Pin sea LOW ingresa al bucle
        while(pin_btn_down.value() == 0):
            continue
        #Decrementa la variable en una unidad
        numero = numero-1
        #Si el valor de numero es menor a 0
        if numero < 0:
            #Asigna el valor 9 a numero
            numero = 9
        #Envia a la funcion el valor de numero
        numeros(numero)
    #Retardo 100ms
    sleep(0.1)

¿Cómo funciona el Sketch?

El Sketch funciona de la siguiente manera:

  • Al energizar la placa, en el display se encenderán todos los segmentos, para así comprobar que tanto el display como su conexión se encuentren de manera correcta.
  • Posterior a esto el display mostrará el número de inicio el cual es el 0.
  • Al presionar el pulsador de incremento, la variable numero aumenta en una unidad siendo el valor máximo 9, si supera dicho valor se le asigna el valor de 0, todo esto será visualizado en el display.
  • Al presionar el pulsador de decremento,  la variable numero disminuye en una unidad siendo el valor mínimo 0, si supera dicho valor se le asigna el valor de 9, todo esto será visualizado en el display.

Deja un comentario