Page 1 sur 1

comportement incompréhensible GPIO.wait_for_edge()

Posté : sam. 9 sept. 2017 18:51
par Korhm
Bonjour à tous,

j'ai mis un place un bouton poussoir (un interrupteur en sailli) relié d'un côté sur le PIN 24, et de l'autre sur le GND.
Le but est de lancer des actions quand on appuie dessus.

Pour cela, j'utilise la fonction GPIO.wait_for_edge(24, GPIO.RISING) qui est censé attendre un changement d'état bas vers haut, et continue l'exécution du script. J'ai mis le tout dans une boucle infinine.
Cependant, si je laisse le bouton appuyer trop longtemps (plus de quelques millisecondes), au moment de relâcher, mon script se re-déroule quand même. Et c'est là que je ne comprend pas. Si le relâche le bouton, je suis censé être en GPIO.FALLING, non ? Du coup il est censé toujours attendre, non ?

Pour resumer:
Il détecte le RISING, exécute les actions, se remet en attente, et semble redétecter un RISING alors qu'il s'agit d'un FALLING.

Ci-dessous mon script.

Code : Tout sélectionner

#!/usr/bin/python3.4

import RPi.GPIO as GPIO  # Gestion des GPIO
import requests
import json
from time import sleep   # Gestion du temps

PIN_BTN = 24

GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_BTN, GPIO.IN, pull_up_down=GPIO.PUD_UP)


print ("Started")
while(1):
	try:  
		print("Waiting for rising edge on port 24")

		channel = GPIO.wait_for_edge(PIN_BTN, GPIO.RISING)  

		#Tout plein de belles choses qui s'exécute une deuxième fois quand le bouton est appuyé trop longtemps....

		
 
	except KeyboardInterrupt:
		print("\nInterruption par clavier.")

GPIO.cleanup()

Re: comportement incompréhensible GPIO.wait_for_edge()

Posté : sam. 9 sept. 2017 21:22
par destroyedlolo
Je n'ai pas regardé de pret ton code ... mais je pense simplement que fait fasse à un classique phénomène de rebond.
Google m'a amené là : http://home.roboticlab.eu/fr/examples/d ... h_debounce

Re: comportement incompréhensible GPIO.wait_for_edge()

Posté : lun. 11 sept. 2017 10:26
par Korhm
Bonjour et merci pour le lien, ça explique clairement le boucing (je n'avais pas compris comme ça au début....).

Je vais voir si je peux mettre une tempo du genre : n'effectuer les actions que si après x milliseconds le gpio est toujours à l'état HIGH.
Ce devrait éliminer les problème de rebonds mécaniques sans affecter le reste des mon script.