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

MéthodeCode feu Maître

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

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
feuRouge = True
10
11
def afficheRouge():
12
    pin1.write_digital(1)
13
    pin0.write_digital(0)
14
def afficheOrange():
15
    pin1.write_digital(0)
16
    pin0.write_digital(1)
17
def afficheAttente(attente):
18
    display.show(str(attente))
19
20
while True:
21
    # Traitement des messages du maitre
22
    incoming = radio.receive()
23
    if incoming:
24
        if incoming == "VERT" :
25
            feuRouge = False
26
            lastTransm = ticks_ms()  # message recu
27
        elif incoming == "ROUGE" :
28
            feuRouge = True
29
            lastTransm = ticks_ms()  # message recu
30
        elif len(incoming) ==1:
31
            afficheAttente(int(incoming))
32
33
    # Mise en securite si le maitre plante
34
    if ticks_ms() - lastTransm > 2000 :
35
        # Plus de deux secondes sans nouvelles du maitre
36
        feuRouge = True
37
        display.show(Image.SAD)
38
39
    # Arrivee vehicule prioritaire
40
    if button_a.was_pressed():
41
        radio.send("PRIO")
42
43
    # Affichage Rouge / Orange
44
    if feuRouge :
45
        afficheRouge()
46
    else :
47
        afficheOrange()