Corrigé situation A sans LED : Améliorer la robustesse du dispositif
Méthode : Code 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
for x in range(3,5):
13
for y in range(2):
14
display.set_pixel(x,y,9)
15
for x in range(3,5):
16
for y in range(3,5):
17
display.set_pixel(x,y,0)
18
def afficheOrange():
19
for x in range(3,5):
20
for y in range(2):
21
display.set_pixel(x,y,0)
22
for x in range(3,5):
23
for y in range(3,5):
24
display.set_pixel(x,y,4)
25
def afficheAttente(attente):
26
for x in range(2):
27
for y in range(5):
28
display.set_pixel(x,y, 0 if 5*x+y >= attente else 9)
29
30
while True:
31
# Arrivee du vehicule prioritaire au feu maitre
32
if button_a.was_pressed():
33
feuRouge = False
34
attente = DUREE
35
radio.send("ROUGE")
36
37
# Traitement des messages en provenance de l'esclave
38
incoming = radio.receive()
39
# Arrivee du vehicule priopritaire au feu esclave
40
if incoming == "PRIO" :
41
feuRouge = True
42
attente = DUREE
43
radio.send("VERT")
44
45
# Affichage Rouge / Orange
46
if feuRouge :
47
afficheRouge()
48
else :
49
afficheOrange()
50
51
# Gestion de l'attente
52
sleep(1000)
53
attente -= 1
54
afficheAttente(attente)
55
radio.send(str(attente))
56
57
# Alternance du feu
58
if attente == 0 :
59
attente=DUREE
60
feuRouge = not feuRouge
61
62
# Robustesse du dispositif :
63
# Le maitre envoie l'etat du feu a l'esclave
64
# toutes les secondes
65
if feuRouge :
66
radio.send("VERT")
67
else:
68
radio.send("ROUGE")
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
lastTransm = ticks_ms() # derniere transmission du maitre
9
feuRouge = True
10
11
def afficheRouge():
12
for x in range(3,5):
13
for y in range(2):
14
display.set_pixel(x,y,9)
15
for x in range(3,5):
16
for y in range(3,5):
17
display.set_pixel(x,y,0)
18
def afficheOrange():
19
for x in range(3,5):
20
for y in range(2):
21
display.set_pixel(x,y,0)
22
for x in range(3,5):
23
for y in range(3,5):
24
display.set_pixel(x,y,4)
25
def afficheAttente(attente):
26
display.set_pixel(2,3,0)
27
for x in range(2):
28
for y in range(5):
29
display.set_pixel(x,y, 0 if 5*x+y >= attente else 9)
30
31
while True:
32
# Traitement des messages du maitre
33
incoming = radio.receive()
34
if incoming:
35
if incoming == "VERT" :
36
feuRouge = False
37
lastTransm = ticks_ms() # message recu
38
elif incoming == "ROUGE" :
39
feuRouge = True
40
lastTransm = ticks_ms() # message recu
41
elif len(incoming) ==1:
42
afficheAttente(int(incoming))
43
44
# Mise en securite si le maitre plante
45
if ticks_ms() - lastTransm > 2000 :
46
# Plus de deux secondes sans nouvelles du maitre
47
feuRouge = True
48
display.clear()
49
display.show(Image.SAD)
50
else :
51
# Arrivee vehicule prioritaire
52
if button_a.was_pressed():
53
radio.send("PRIO")
54
55
# Affichage Rouge / Orange
56
if feuRouge :
57
afficheRouge()
58
else :
59
afficheOrange()