🛠 Lire un bouton poussoir et afficher dans la console
Objetivos
Completar el primer tutorial añadiendo una entrada digital: un botón pulsador leído por el microcontrolador ATmega32U4 integrado, con visualización del estado en la consola del PC x86 mediante pinpong. Se aprende el cableado de una entrada (resistencia de pull-up), la lectura read_digital y el rebote de contacto. Es la base de toda interacción humano-máquina con los pines.
Material
- LattePanda 3 Delta correctamente alimentada (12 V ≥ 2 A o USB-C PD ≥ 24 W)
- 1 botón pulsador de 2 o 4 patillas
- 1 resistencia de 10 kΩ (pull-up)
- Cables Dupont
- Biblioteca instalada:
pip install pinpong
Código completo
Cableado: una pata del botón → D2, la otra → GND; resistencia de 10 kΩ entre D2 y 3,3V (pull-up). Pulsación = D2 conectado a GND = nivel 0.
import time
from pinpong.board import Board, Pin
Board("leonardo", "COM5").begin # Linux : "/dev/ttyACM0"
btn = Pin(Pin.D2, Pin.IN) # D2 en entrée numérique
etat_precedent = None
while True:
etat = btn.read_digital # 0 quand le bouton est pressé (pull-up)
if etat != etat_precedent: # n'afficher qu'aux changements
if etat == 0:
print("Bouton PRESSÉ")
else:
print("Bouton relâché")
etat_precedent = etat
time.sleep(0.05) # anti-rebond logiciel (50 ms)
Verificación esperada
En cada pulsación, la consola muestra «Botón PULSADO» y luego «Botón soltado» al soltarlo, sin salvas parásitas gracias a la temporización de 50 ms. Detener el programa con Ctrl+C.
Errores frecuentes
- Entrada dejada al aire: sin pull-up (o pull-down), el pin queda flotante y muestra estados aleatorios. La resistencia de 10 kΩ hacia 3,3 V es obligatoria con este cableado.
- Lógica invertida: con un pull-up, la pulsación da 0 y no 1. Si la visualización parece invertida, es normal: es el cableado activo a nivel bajo.
- Puerto incorrecto: una vez más, es el puerto serie virtual del Leonardo (
/dev/ttyACM0en Linux) el que hay que dar aBoard. - Nivel lógico: >
- Pin ocupado: D2 no es un pin PWM marcado con
~(los PWM son D3, D5, D6, D9, D10, D11, D13), pero es perfectamente utilizable como entrada digital.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton.pyPythonservo.pyPythonanalogique.pyPythonrespiration.pyPythonneopixel.pyPython