Raspberry Pi: manejando un keypad desde Python

Estoy poniéndome al día en el lenguaje de programación Python. Sí.. jeje.. ahora con Python.. Hay que reciclarse, lo disfruto, y tenía en hoja de ruta a Python ya que está muy de moda. Recuerdo que coincidí en un trabajo con un compañero que decía que Python era sólo para los románticos. Pues si es para los románticos, yo me he enamorado 😀 Estoy haciendo mis primeros pinitos, y veo que es un gran lenguaje de programación.

Estoy redescubriendo que Python sirve para muchas tareas.. desde la construcción de páginas web, a aplicaciones de escritorio, inteligencia artificial, robótica, pasando por las clásicas aplicaciones de terminal, tanto para Windows, Mac o Linux. Es un lenguaje muy limpio y conciso, con una gran cantidad de librerías disponibles para todo tipo de tareas. Además se está usando profesionalmente cada vez más. Así que con todo esto, aquí que estoy compartiendo otro granito de arena en todo esto de la programación.

Al grano, código fuente para manejo de un keypad con Python

Una de las primeras tareas que he hecho estos días en Python ha sido traducir un código fuente que publiqué en Shell Script para manejo de un keypad de 4×4 de una Raspberry Pi que tengo por aquí. Ahora en Python nos queda el código fuente mucho más limpio y mantenible:

import RPi.GPIO as GPIO
import time


# Configure Keypad..
ROWS = [27, 22, 10, 9]
COLS = [23, 24, 25, 5]
GPIO.setmode(GPIO.BCM)
# GPIO.setmode(GPIO.BOARD)
# GPIO.setwarnings(False)
for i in range(0, 4):
    GPIO.setup(ROWS[i], GPIO.OUT)
    GPIO.output(ROWS[i], GPIO.LOW)
    GPIO.setup(COLS[i], GPIO.IN, pull_up_down=GPIO.PUD_DOWN)


# Just for launching actions when buttons are pressed..
def generateAction(currentRow, currentCol):
    if currentRow == 0 and currentCol == 0:  # button 1
        pass
    elif currentRow == 0 and currentCol == 1:  # button 2
        pass
    elif currentRow == 0 and currentCol == 2:  # button 3
        pass
    elif currentRow == 0 and currentCol == 3:  # button A
        pass
    elif currentRow == 1 and currentCol == 0:  # button 4
        pass
    elif currentRow == 1 and currentCol == 1:  # button 5
        pass
    elif currentRow == 1 and currentCol == 2:  # button 6
        pass
    elif currentRow == 1 and currentCol == 3:  # button B
        pass
    elif currentRow == 2 and currentCol == 0:  # button 7
        pass
    elif currentRow == 2 and currentCol == 1:  # button 8
        pass
    elif currentRow == 2 and currentCol == 2:  # button 9
        pass
    elif currentRow == 2 and currentCol == 3:  # button C
        pass
    elif currentRow == 3 and currentCol == 0:  # button *
        pass
    elif currentRow == 3 and currentCol == 1:  # button 0
        pass
    elif currentRow == 3 and currentCol == 2:  # button #
        pass
    elif currentRow == 3 and currentCol == 3:  # button D
        pass


# The main loop that checks for buttons pressed..
try:
    while True:
        for currentRow in range(0, 4):
            GPIO.output(ROWS[currentRow], GPIO.HIGH)
            time.sleep(0.02)
            for currentCol in range(0, 4):
                if GPIO.input(COLS[currentCol]) == GPIO.HIGH:
                    generateAction(currentRow, currentCol)
                    time.sleep(1)
            GPIO.output(ROWS[currentRow], GPIO.LOW)
            time.sleep(0.02)
except:
    print 'GOT AN ERROR!'
finally:
    print 'FINALLY GOT AN ERROR!'

# GPIO.cleanup()

Sólo me queda explicar que si lo usas hay que ponerlo en un fichero, por ejemplo llamarlo runKeypad.py y lanzarlo desde línea de comandos poniendo:

python runKeypad.py

Según tu caso, un keypad de 4×4 tiene 8 pines de los cuales los cuatro primeros son columnas y los otros cuatro filas, o viceversa, esto da igual. La lógica de funcionamiento es la misma que comenté en el post anterior. Me remito a dicho post en Shell Script.. es decir, es la lógica del bucle final.

Si lo usas este programa, tendrás que poner los pines que has conectado realmente en tu Raspberry Pi en las variables COLS y ROWS. Espero que sirva de ayuda ya que si has llegado a este post, estás como yo que no encontré ningún programa hecho por Internet funcionando. Así que aquí lo dejo 😉

¡Un saludo! Otro día más..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *