Version finale avec LED : ne pas bloquer la boucle avec sleep()

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

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
feuRouge = True
9
clignotant = ticks_ms()
10
lastTransm = ticks_ms()  # derniere transmission du maitre
11
lastAlive = ticks_ms()  # derniere transmission ALIVE de l'esclave
12
13
def afficheRouge():
14
    pin1.write_digital(1)
15
    pin0.write_digital(0)
16
17
def afficheOrange():
18
    pin1.write_digital(0)
19
    # orange clignotant
20
    if ticks_ms()-clignotant < 500:
21
        pin0.write_digital(1)
22
    else:
23
        pin0.write_digital(0)
24
25
def afficheAttente(attente):
26
    display.show(str(attente))
27
28
while True:
29
    incoming = radio.receive()
30
    if incoming:
31
        if incoming == "VERT" :
32
            feuRouge = False
33
            lastTransm = ticks_ms()
34
        elif incoming == "ROUGE" :
35
            feuRouge = True
36
            lastTransm = ticks_ms()
37
        elif len(incoming) ==1:
38
            display.show(incoming)
39
40
    # Robustesse du dispositif :
41
    # Mise en securite si le maitre plante
42
    if ticks_ms() - lastTransm > 2000 :
43
        # Plus de deux secondes sans nouvelles du maitre
44
        feuRouge = True
45
        display.show(Image.SAD)
46
    # L'esclave envoie un message au maitre toutes les secondes
47
    if ticks_ms() - lastAlive > 1000:
48
        radio.send("ALIVE")
49
        lastAlive = ticks_ms()
50
51
    # Arrivee vehicule prioritaire
52
    if button_a.was_pressed():
53
        radio.send("PRIO")
54
55
    # Affichage Rouge / Clignotant
56
    if feuRouge :
57
        afficheRouge()
58
    else :
59
        afficheOrange()
60
61
    # Compteur temps à 0 toute les secondes
62
    if ticks_ms()-clignotant > 1000:
63
        clignotant = ticks_ms()