Page 1 sur 1
Dommage !
Posté : ven. 10 nov. 2017 15:06
par Ferois
Boonjour,
J'ai un programme qui comprend :
Code : Tout sélectionner
control_B=38
GPIO.setmode(GPIO.BOARD)
GPIO.setup(control_B,GPIO.IN,pull_up_down=GPIO.PUD_UP)
if GPIO.add_event_detect(control_B,GPIO.BOTH):
if GPIO.input(control_B):
print ("contacts ouverts')
else:
time.sleep(100)
print ("contacts fermes')
la réponse de python :
if GPIO.add_event_detect(control_B,GPIO.BOTH):
RuntimeError: Conflicting edge detection already enabled for this GPIO channel
J'ai l'impression que le programme considère que le GPIO est toujours à 1 du fait de la résistance pull-up, et qu'il juge impossible l’existence d'un front.
Alors j'ai modifié la première ligne du programme pour une résistance pull-up extérieure :
et j'ai la même réponse!
Pourquoi ? Et comment contourner l'obstacle ?
Re: Dommage !
Posté : ven. 10 nov. 2017 20:33
par jelopo
Bonjour,
Je crois qu'il dit que "GPIO.add_event_detect(control_B,GPIO.BOTH)" à déjà été fait. En fait à chaque boucle de if il le refait.
Il me semble que cette commande n'est pas une mesure d'état mais un début de détection.
Je pense qu'il faut qu'elle soit initialisée qu'une fois dans le script donc avant le if, ensuite pour la mesure il faut un "GPIO.event_dectect"
Si certains on l'habitude de manipuler les GPIO sous Python, merci de nous venir en aide.
A+
Re: Dommage !
Posté : sam. 11 nov. 2017 09:02
par nexen
bonjour,
Le add_event est à usage unique ... donc dans ta boucle il tente de rajouter à chaque fois un event
voici mon code pour tester un bouton et actionner un relay de mon coté
Code : Tout sélectionner
import RPi.GPIO as GPIO #bibliothèque RPi.GPIO
Button_Red = 5
Button_Green = 6
RelayPin = 20
RLed = 19
GLed = 16
print 'Debut ...'
GPIO.setmode(GPIO.BCM) #utilisation des numéros de ports du
#processeur
GPIO.setup(Button_Red, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(Button_Green, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(RelayPin, GPIO.OUT)
GPIO.setup(RLed, GPIO.OUT)
GPIO.setup(GLed, GPIO.OUT)
while True:
time.sleep(0.5) # test tempo lecture fichier xml
input_state_START = GPIO.input(Button_Green)
input_state_STOP = GPIO.input(Button_Red)
Relayinput = GPIO.input(RelayPin)
RLedInput = GPIO.input(RLed)
GLedInput = GPIO.input(GLed)
if (input_state_START == False and Relayinput == 0 ):
print('Button_Green Pressed' + str(input_state_START))
GPIO.output(RelayPin, GPIO.HIGH)
GPIO.output(GLed, GPIO.HIGH) #sortie 16 high
if (input_state_STOP == False and Relayinput == 1 )
print('Button_RED Pressed' + str(input_state_START))
GPIO.output(RelayPin, GPIO.LOW)
GPIO.output(RLed, GPIO.HIGH) #sortie 19 high
C'est un exemple mais dans ton cas :
Code : Tout sélectionner
control_B=38
GPIO.setmode(GPIO.BOARD)
GPIO.setup(control_B,GPIO.IN,pull_up_down=GPIO.PUD_UP)
while True :
if GPIO.input(control_B):
print ("contacts ouverts')
else:
time.sleep(100)
print ("contacts fermes')
ou aprés lecture du Add_event : on ajoute une FONCTION sur un événement du bouton
Code : Tout sélectionner
def buttonPressed():
print ("contacts")
control_B=38
GPIO.setmode(GPIO.BOARD)
GPIO.setup(control_B,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(control_B, GPIO.FALLING, callback=lambda x: buttonPressed(), bouncetime=2000)
PS : tu as des erreurs entre ' et " sur tes prints
Re: Dommage !
Posté : sam. 11 nov. 2017 16:06
par Ferois
Merci les Amis
Je comprends mieux cette commande add_event_detect.
Tout changement d'état de la broche 38 durant la boucle while entraine une interruption qui appelle un sous programme.
A l'issue de ce sous programme la boucle continue après le point d'interruption
Code : Tout sélectionner
control_B=38
GPIO.setmode(GPIO.BOARD)
GPIO.setup(control_B,GPIO.IN,pull_up_down=GPIO.PUD_UP)
def position_control_B()
time.sleep(5)
if GPIO.input(control_B):
print ('contacts ouverts')
else:
print ('contacts fermes')
GPIO.add_event_detect(control_B,GPIO.BOTH, bouncetime=2000, callback=lambda x: position_control_B())
while True:
mon programme
nexen a écrit :tu as des erreurs entre ' et " sur tes prints
Tu as l'oeil