Corrigé situation A avec 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
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é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
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()