Bonjour,
Je suis un débutant avec Python 3 et Raspberry 3 B+ et j’ai quelques difficultés avec ce petit programme.
Je voudrais que la boucle while s’arrête lorsque j’appuie sur CTRL+C.
Les deux fonctions suivantes ne servent que pour les essais.
La fonction Afficheur(Thread) comme son nom l’indique n’affiche que 10 fois le caractère ‘A’.
La fonction Essais_1(Thread) fait clignoter une led .
L’ensemble me permet d’essayer les threads.
Dans ce programme l’exception ne fonctionne pas et je ne vois pas pourquoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
# -*- coding: utf-8 -*-
"""
Created on Mar Mai 22 10:30:36 2018
@author: mandrin
"""
import os
import random
import sys
from threading import Thread
import datetime 
import time
import RPi.GPIO as GPIO #++
 
# broches GPIO
GPIO.setmode(GPIO.BCM) #++ GPIO21= broche 40
GPIO.setup(20, GPIO.OUT, initial=GPIO.LOW)# broche 38 LED #++
 
class Afficheur(Thread):
 
    """Thread chargé simplement d'afficher une lettre dans la console."""
 
    def __init__(self, lettre):
        Thread.__init__(self)
        self.lettre = lettre
 
    def run(self):
        """Code à exécuter pendant l'exécution du thread."""
        i = 0
        while i < 20:
            sys.stdout.write(self.lettre)
            sys.stdout.flush() # affichage immediat
            attente = 0.2
            attente += random.randint(1, 60) / 100 # attente aleatoire de 0.2 a 0.8 s
            time.sleep(attente)
            i += 1
# fin de Afficheur
 
# allumage d'une LED ==========================================================
class Essais_1(Thread):
 
    def __init__(self):
        Thread.__init__(self)
 
    def run(self):
        date=datetime.datetime.now() #*-*
        second_old=date.second+1 #*-*
        while 1:
            try:
                date=datetime.datetime.now() #*-*
                secs=int(date.second) #*-*<
                Led=date.microsecond/1e6
# commande de la LED toute les secondes (0.5s allumee, 0.5s eteinte)
                if  Led<=0.5:
                    GPIO.output(20,GPIO.LOW)# LED  allumee #++
                    pass # equiv a nop
                else:
                    GPIO.output(20,GPIO.HIGH)# LED eteinte #++
                    pass # equiv a nop                
                if secs==second_old:
                    print('secs->',secs) #*/*
                    second_old+=1  
                    if second_old==60: 
                        second_old=0                 
            except KeyboardInterrupt:
                GPIO.cleanup()
                thread_2.join()
                break
 
# fin de while 1 =============================================================
 
thread_2 = Essais_1()           
thread_3 = Afficheur("A")
 
# Lancement des threads
thread_2.start()
thread_3.start()
 
# Attend que les threads se terminent
thread_2.join()
thread_3.join()
Si quelqu'un voit pourquoi je suis preneur.
Merci d’avance
Cordialement