Version finale avec LED : ne pas bloquer la boucle avec sleep()
Méthode : Code 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éthode : Code 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()