Corrigé situation B avec LED : Améliorer la robustesse du dispositif

MéthodeCode feu Maître

1
from microbit import *
2
from time import ticks_ms
3
import radio
4
5
radio.config(group=2)
6
radio.on()
7
8
DUREE = 10  # 10 secondes
9
attente = DUREE
10
lastTransm = ticks_ms()  # derniere transmission de l'esclave
11
feuRouge = True
12
13
def afficheRouge():
14
    pin1.write_digital(1)
15
    pin0.write_digital(0)
16
def afficheOrange():
17
    pin1.write_digital(0)
18
    pin0.write_digital(1)
19
def afficheAttente(attente):
20
    display.show(str(attente))
21
22
while True:
23
    # Arrivee du vehicule prioritaire au feu maitre
24
    if button_a.was_pressed():
25
        feuRouge = False
26
        attente = DUREE
27
        radio.send("ROUGE")
28
29
    # Traitement des messages en provenance de l'esclave
30
    incoming = radio.receive()
31
    # Arrivee du vehicule priopritaire au feu esclave
32
    if incoming == "PRIO" :
33
        feuRouge = True
34
        attente = DUREE
35
        radio.send("VERT")
36
    # L'esclave est en vie :)
37
    if incoming == "ALIVE" :
38
        lastTransm = ticks_ms()
39
40
    # Affichage Rouge / Orange
41
    if feuRouge :
42
        afficheRouge()
43
    else :
44
        afficheOrange()
45
46
    # Gestion de l'attente
47
    sleep(1000)
48
    attente -= 1
49
    afficheAttente(attente)
50
    radio.send(str(attente))
51
52
    # Alternance du feu
53
    if attente == 0 :
54
        attente=DUREE
55
        feuRouge = not feuRouge
56
57
    # Robustesse du dispositif :
58
59
    # Le maitre envoie l'etat du feu a l'esclave toutes les secondes
60
    if feuRouge :
61
        radio.send("VERT")
62
    else:
63
        radio.send("ROUGE")
64
65
    # Mise en securite si l'esclave plante
66
    if ticks_ms() - lastTransm > 2000:
67
        # Plus de deux secondes sans nouvelles de l'esclave
68
        feuRouge = True
69
        display.show(Image.SAD)
70

MéthodeCode feu Esclave

1
from microbit import *
2
from time import ticks_ms
3
import radio
4
5
radio.config(group=2)
6
radio.on()
7
8
lastTransm = ticks_ms()  # derniere transmission du maitre
9
lastAlive = ticks_ms()  # derniere transmission ALIVE de l'esclave
10
feuRouge = True
11
attente=0
12
13
def afficheRouge():
14
    pin1.write_digital(1)
15
    pin0.write_digital(0)
16
def afficheOrange():
17
    pin1.write_digital(0)
18
    pin0.write_digital(1)
19
def afficheAttente(attente):
20
    display.show(str(attente))
21
22
while True:
23
    # Traitement des messages du maitre
24
    incoming = radio.receive()
25
    if incoming:
26
        if incoming == "VERT" :
27
            feuRouge = False
28
            lastTransm = ticks_ms()  # message recu
29
        elif incoming == "ROUGE" :
30
            feuRouge = True
31
            lastTransm = ticks_ms()  # message recu
32
        elif len(incoming) ==1:
33
            afficheAttente(int(incoming))
34
35
    # Robustesse du dispositif :
36
    # Mise en securite si le maitre plante
37
    if ticks_ms() - lastTransm > 2000 :
38
        # Plus de deux secondes sans nouvelles du maitre
39
        feuRouge = True
40
        display.show(Image.SAD)
41
    # L'esclave envoie un message au maitre toutes les secondes
42
    if ticks_ms() - lastAlive > 1000:
43
        radio.send("ALIVE")
44
        lastAlive = ticks_ms()
45
46
    # Arrivee vehicule prioritaire
47
    if button_a.was_pressed():
48
        radio.send("PRIO")
49
50
    # Affichage Rouge / Orange
51
    if feuRouge :
52
        afficheRouge()
53
    else :
54
        afficheOrange()