Comment stopper une boucle indefinie while True

Fermé
xunil2003 - 14 mai 2020 à 18:33
 Phil_1857 - 15 mai 2020 à 15:53
Bonjour,

Je suis sur une ancienne becanne equipé de pyton 2.7.6 sur linux ubuntu 14.04 x64.
Je cherche le moyen de faire clignoter un led à l'aide d'une boucle while et de l’arrêter par la suite, la led est géré par GPIO avec le Ardafruit FT232H en ligne de commande et par le gui tkinter avec deux boutons : le premier pour activer le clignotement, le deuxième pour arrêter le clignotement.
https://arduino103.blogspot.com/2017...o-ajouter.html

1) Récupérer l'argument en ligne de commande
Code :
python gpio_led_test.py on rouge


avec le code

liste_arg = []    
for arg in sys.argv:
print arg
liste_arg.append(arg)

arg1 = liste_arg[1]
arg2 = liste_arg[2]
arg2 = liste_arg[3]
choix = arg1+" "+arg2+" "+arg3

if choix=="on rouge":
print "choix rouge on"
on()
elif choix=="off rouge":
print "choix rouge off"
off()
elif choix=="on rouge clignote":
print "choix clignote rouge on"
led_rouge_clignote_on()
elif choix=="off rouge clignote":
print "choix clignote rouge off"
led_rouge_clignote_off()

Configuration: Linux / Firefox 66.0



2) Faire clignoter le led et pouvoir l'arreter impossible ?????

def led_rouge_clignotement():
# Désactivation temporaire du pilote FTDI série sur les plateformes Mac et Linux.
#FT232H.use_FT232H()

# Créer un objet FT232H (qui capture le premier périphérique FT232H disponible).
ft232h = FT232H.FT232H()

# Configurer les entrée et sortie digitales en utilisant ma méthode setup()
# Note: les broches de 0 a 15 correspondent au broches D0 à D7 puis C0 à C7 de la carte.
ft232h.setup(7, GPIO.IN) # Make pin D7 a digital input. 7
ft232h.setup(8, GPIO.OUT) # Make pin C0 a digital output. 8

ft232h.setup(6, GPIO.IN) # Make pin D6 a digital input. 6
ft232h.setup(9, GPIO.OUT) # Make pin C1 a digital output. 9

def led_rouge_clignote_on():
# Désactivation temporaire du pilote FTDI série sur les plateformes Mac et Linux.
FT232H.use_FT232H()

# Créer un objet FT232H (qui capture le premier périphérique FT232H disponible).
ft232h = FT232H.FT232H()

# Configurer les entrée et sortie digitales en utilisant ma méthode setup()
# Note: les broches de 0 a 15 correspondent au broches D0 à D7 puis C0 à C7 de la carte.
ft232h.setup(7, GPIO.IN) # Make pin D7 a digital input. 7
ft232h.setup(8, GPIO.OUT) # Make pin C0 a digital output. 8

# Bouche infinie qui change l'état de la LED (allumé/éteind) et lit l'état de l'entrée.
# Presser Ctrl-C pour quitter le programme
print 'Presse Ctrl-C pour quitter.'
while True:
# Mettre la broche C0 au niveau haut (HIGH) pour allumer la LED.
ft232h.output(8, GPIO.HIGH)
# Attendre 1 seconde.
time.sleep(1)
# Mettre la broche C0 au niveau base (LOW) pour eteindre la LED.
ft232h.output(8, GPIO.LOW)
# Attendre 1 seconde.
time.sleep(1)
# Lire l'etat de la broche D7 et afficher si le niveau est haut (HIGH) ou bas (LOW).
level = ft232h.input(7)
if level == GPIO.LOW:
print 'Pin D7 is LOW! : Eteind '
else:
print 'Pin D7 is HIGH! : Allumer'

def led_rouge_clignotement_stop
None


Je trouve pas comment y réaliser en créant un boucle qui teste une condition, chacun de mes essais son une échec.
j'ai effectué des test en cherchant avec un truc du genre :

def led_rouge_clignotement_stop():
None

def led_rouge_clignotement():
stop = ""
while True:
Le code....
...............
if stop == 'o':
break
else :
print "Continu .."


La seule solution pour arrêter une boucle c'est break !!!!!!!!!!!!!
La je bloc...

Objectif :
1) Le pc fait clignoter un led à la réception d'un sms par le biais de la ligne de commande (Led rouge : réception sms / led vert : sms envoyer /Led jaune sms en attente d'envoi.
2) L'utilisateur pourra arrêter le clignotement via python 2.7.6 avec le gui Tkinter, un bouton permettra de faire clignoter la led et sur le deuxième bouton arrêter la led qui clignote - pas de réseau gsm.

Pouvez vous m'aider ?
Merci d'avance, pour votre aide .
A voir également:

3 réponses

Utilisateur anonyme
14 mai 2020 à 18:52
Bonjour,

tu as essayé d'utiliser les balises de codes, mais pas correctement.
Du coup, l'indentation n'a pas été conservée.

Voici un court tuto sur leur bonne utilisation https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Tu as encore le temps d'éditer ton message pour corriger
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
15 mai 2020 à 10:32
Bonjour,

Tu veux dire une boucle infinie ?

Une boucle indéfinie, c'est autre chose ...
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
15 mai 2020 à 15:05
Oui comment stopper une boucle indéfini avec python ?
Merci.
0
Phil_1857 > xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024
15 mai 2020 à 15:53
une boucle infinie ...
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
15 mai 2020 à 12:37
Bonjour,

Du coup j'ai du reposter pour indiquer les balises code.
Je suis sur une ancienne becanne equipé de pyton 2.7.6 sur linux ubuntu 14.04 x64.
Je cherche le moyen de faire clignoter un led à l'aide d'une boucle while et de l’arrêter par la suite, la led est géré par GPIO avec le Ardafruit FT232H en ligne de commande et par le gui tkinter avec deux boutons : le premier pour activer le clignotement, le deuxième pour arrêter le clignotement.
https://arduino103.blogspot.com/2017...o-ajouter.html

1) Récupérer l'argument en ligne de commande
Code :

python gpio_led_test.py on rouge


avec le code

liste_arg = []
for arg in sys.argv:
print arg
liste_arg.append(arg)

arg1 = liste_arg[1]
arg2 = liste_arg[2]
arg2 = liste_arg[3]
choix = arg1+" "+arg2+" "+arg3

if choix=="on rouge":
print "choix rouge on"
on()
elif choix=="off rouge":
print "choix rouge off"
off()
elif choix=="on rouge clignote":
print "choix clignote rouge on"
led_rouge_clignote_on()
elif choix=="off rouge clignote":
print "choix clignote rouge off"
led_rouge_clignote_off()






2) Faire clignoter le led et pouvoir l'arreter impossible ?????


def led_rouge_on():
       # Désactivation temporaire du pilote FTDI série sur les plateformes Mac et Linux.
       FT232H.use_FT232H()

       # Créer un objet FT232H (qui capture le premier périphérique FT232H disponible).
       ft232h = FT232H.FT232H()

       # Configurer les entrée et sortie digitales en utilisant ma méthode setup()
       # Note: les broches de 0 a 15 correspondent au broches D0 à D7 puis C0 à C7 de la carte.
       ft232h.setup(7, GPIO.IN) # Make pin D7 a digital input. 7
       ft232h.setup(8, GPIO.OUT) # Make pin C0 a digital output. 8

       # Mettre la broche C0 au niveau haut (HIGH) pour allumer la LED.
       ft232h.output(8, GPIO.HIGH)      
       print "Led rouge allumé"

def led_rouge_off():
       # Désactivation temporaire du pilote FTDI série sur les plateformes Mac et Linux.
       FT232H.use_FT232H()

       # Créer un objet FT232H (qui capture le premier périphérique FT232H disponible).
       ft232h = FT232H.FT232H()

       # Configurer les entrée et sortie digitales en utilisant ma méthode setup()
       # Note: les broches de 0 a 15 correspondent au broches D0 à D7 puis C0 à C7 de la carte.
       ft232h.setup(7, GPIO.IN) # Make pin D7 a digital input. 7
       ft232h.setup(8, GPIO.OUT) # Make pin C0 a digital output. 8

       # Mettre la broche C0 au niveau base (LOW) pour eteindre la LED.
       ft232h.output(8, GPIO.LOW)    
       print "Led rouge éteind"  

def led_rouge_clignote_on():
       # Désactivation temporaire du pilote FTDI série sur les plateformes Mac et Linux.
       FT232H.use_FT232H()

       # Créer un objet FT232H (qui capture le premier périphérique FT232H disponible).
       ft232h = FT232H.FT232H()

       # Configurer les entrée et sortie digitales en utilisant ma méthode setup()
       # Note: les broches de 0 a 15 correspondent au broches D0 à D7 puis C0 à C7 de la carte.
       ft232h.setup(7, GPIO.IN) # Make pin D7 a digital input. 7
       ft232h.setup(8, GPIO.OUT) # Make pin C0 a digital output. 8

       # Bouche infinie qui change l'état de la LED (allumé/éteind) et lit l'état de l'entrée.
       # Presser Ctrl-C pour quitter le programme
       print 'Presse Ctrl-C pour quitter.'
       while True:
          # Mettre la broche C0 au niveau haut (HIGH) pour allumer la LED.
          ft232h.output(8, GPIO.HIGH)
          # Attendre 1 seconde.
          time.sleep(1)
          # Mettre la broche C0 au niveau base (LOW) pour eteindre la LED.
          ft232h.output(8, GPIO.LOW)
          # Attendre 1 seconde.
          time.sleep(1)
          # Lire l'etat de la broche D7 et afficher si le niveau est haut (HIGH) ou bas (LOW).
          level = ft232h.input(7)
          if level == GPIO.LOW:
               print 'Pin D7 is LOW! : Eteind '
          else:
               print 'Pin D7 is HIGH! : Allumer'

def led_rouge_clignotement_stop
       None



Je trouve pas comment y réaliser en créant un boucle qui teste une condition, chacun de mes essais son une échec.
j'ai effectué des test en cherchant avec un truc du genre :

def led_rouge_clignotement_stop():
       None

def led_rouge_clignotement():
       stop = ""
       while True:
           Le code....
           ...............
           if stop == 'o':
                 break
           else :
                 print "Continu .."



La seule solution pour arrêter une boucle c'est break !!!!!!!!!!!!!
La je bloc...

Objectif :
1) Le pc fait clignoter un led à la réception d'un sms par le biais de la ligne de commande (Led rouge : réception sms / led vert : sms envoyer /Led jaune sms en attente d'envoi.
2) L'utilisateur pourra arrêter le clignotement via python 2.7.6 avec le gui Tkinter, un bouton permettra de faire clignoter la led et sur le deuxième bouton arrêter la led qui clignote - pas de réseau gsm.

Pouvez vous m'aider ?
Merci d'avance, pour votre aide .

Configuration: Linux / Firefox 66.0
0