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()