En este tutorial aprenderemos cómo controlar un LED RGB con un botón.
Materiales:
- Raspberry Pi con Raspbian o similar
- RGB LED
- Botón
- 4 resistencias 1K
- 5 cables macho/hembra y 2 cables macho/macho
- Placa de pruebas
El código para controlar el display 7 LED es:
import RPi.GPIO as GPIO
def next_rgb_color(r_pin, g_pin, b_pin, data):
led_colors = [(1, 0, 0), (1, 0, 1), (0, 0, 1),
(0, 1, 1), (0, 1, 0), (1, 1, 0)]
GPIO.output([r_pin, g_pin, b_pin], led_colors[data['index']])
data['index'] += 1 # Incrementamos el index
if data['index'] >= len(led_colors): # Si el index está fuera de rango
data['index'] = 0 # Empezamos desde cero
R_PIN = 11
G_PIN = 13
B_PIN = 15
BUTTON_PIN = 12
data = {'index': 0} # Creamos un diccionario porque es mutable
GPIO.setmode(GPIO.BOARD) # Configuramos el modo GPIO a BOARD para usar el número de PIN
GPIO.setup(R_PIN, GPIO.OUT, initial=0) # Preparamos el pin rojo
GPIO.setup(G_PIN, GPIO.OUT, initial=0) # Preparamos el pin verde
GPIO.setup(B_PIN, GPIO.OUT, initial=0) # Preparamos el pin azul
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Preparamos el pin del botón
# Usamos una función lambda para pasar los parámetros
btn_function = lambda x: next_rgb_color(R_PIN, G_PIN, B_PIN, data)
# Preparamos un evento cuando el botón esté RISING
GPIO.add_event_detect(BUTTON_PIN, GPIO.RISING,
callback=btn_function,
bouncetime=300)
raw_input("Exit script by pressing enter")
GPIO.cleanup() # Clear GPIO
Aquí podemos ver el circuito del LED RGB y el botón:
Aquí dejo un video explicativo para ver cómo montar el circuito y ejecutar el código en la Raspberry:
Recuerda! El modo del GPIO que utilizo es GPIO.BOARD lo que significa que siempre que hago referencia a los pines utilizo el número de PIN. Si en lugar de utilizar el GPIO en modo BOARD quieres utilizarlo en modo BCM, tendrás que convertir el número de PIN en el número de GPIO usando este esquema: Raspberry Pi: Esquema GPIO
THANK YOU!!! EXACTLY what I needed.