Les boutons-poussoirs (soupirs)

Bonjour à tous

Je m’appelle Olivier, 50 balais, et je suis informaticien, plutôt dans l exploitation des systèmes.

Je suis sur un projet depuis plusieurs années d’une sorte d’enceinte connectée, pilotée par un Raspberry pi 3.
J’utilise la distribution Dietpi, le développement est en python.

Mon problème concerne la détection correcte des appuis sur les boutons, pour lancer les bonnes actions

Il y a 5 boutons reliés au Raspberry pi : Mode, Next, prev, Play-Pause, et un cinquième, non défini encore. Jusque-là, sur la platine d’essai, ça allait à peu près, même si il y a eu des petits soucis, parfois, des détections d’appuis intempestifs, mais j’étais focus sur mon développement.

J’essaie de finir mon projet, je passe de la platine d’essai à la ElectroCookie soudable breadboard PCB Board parce q’il faut que cela soit demontable

Je me suis servi de ce site, par exemple

Voici le résultat de mes soudures, on ne rigole pas :wink:

J’ai donc configuré en pull-down

Voici mon code


# on définit notre fonction qui sera appelée quand on appuiera sur le bouton MODE
def Select(channel):
     logging.info("<==============> Appui détecte sur le bouton MODE")
     message = "CANAL1-MODE"
     logging.debug("<==============> Message envoyé par ZMQ : %s", message)
     sock.send(message.encode("UTF-8"))
 
def Suivant(channel):
    logging.info("<==============> Appui détecté sur le bouton SUIVANT")
    message = "CANAL1-SUIVANT"
    logging.debug("<==============> Message envoyé par ZMQ : %s", message)
    #time.sleep(0.9)
    sock.send(message.encode("UTF-8"))
    


logging.info("<==============> Configuration GPIO : %s", configuration)
#3 Bouton Mode
GPIO.setup(cfg.BROCHE_MODE, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

# 35 Bouton Suivant
GPIO.setup(cfg.BROCHE_NEXT, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)



#Ici sont définies les fonctions qui seront appelées quand l'appui sera détecté
GPIO.add_event_detect(cfg.BROCHE_MODE, GPIO.RISING, callback=Select, bouncetime=1500)
logging.info("<==============> Initialisation du Bouton MODE sur la broche %d", cfg.BROCHE_MODE)
GPIO.add_event_detect(cfg.BROCHE_PREV, GPIO.RISING, callback=Precedent, bouncetime=1500)
logging.info("<==============> Initialisation du bouton PREV sur la broche %d", cfg.BROCHE_PREV)
GPIO.add_event_detect(cfg.BROCHE_NEXT, GPIO.RISING, callback=Suivant, bouncetime=2500)
logging.info("<==============> Initialisation du bouton Suivant sur la broche %d", cfg.BROCHE_NEXT)

Le problème est que sur cet exemple, il y a une détection d’un appui Next, alors, que n’ai pas appuyé que sur Next, mais Mode, et inversement si j’appuie sur Next, Mode peut etre détecté. Ce qui est plus que dérangeant.


2024-01-22 21:31:29,008 -- root -- INFO -- <==============> Appui détecté sur le bouton SUIVANT
2024-01-22 21:31:29,008 -- root -- DEBUG -- <==============> Message envoyé par ZMQ : CANAL1-SUIVANT
2024-01-22 21:31:29,010 -- root -- DEBUG -- [ CORE ] ****************   Message reçu : b'CANAL1-SUIVANT'
2024-01-22 21:31:29,011 -- root -- INFO -- [ CORE ] ****************   Message reçu nettoyé : SUIVANT
2024-01-22 21:31:29,011 -- root -- DEBUG -- [ CORE ] ****************   Appel de la la fonction Suivant
2024-01-22 21:31:29,012 -- root -- DEBUG -- [ CORE ] =========>  Passage par la fonction Prochain
2024-01-22 21:31:29,012 -- root -- DEBUG -- [ CORE ] =========>  Etat : RADIO

Quelles sont, selon vous, les erreurs que j’ai pu faire? Quelles sont les process/réglages/câblages qui fonctionnent à 100%

Merci d’avance
Electroniquement
Olivier

hello,

j ai trouve cet article qui semble bien faire le tour de la gestion ( et des problèmes de l’utilisation ) d’ un bouton poussoir sur RPi … Si j ai bien compris tu as peut être un problème de rebondissement !