Version sans LED, clignotante

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
clignotant = ticks_ms()
12
13
def afficheRouge():
14
    for x in range(3,5):
15
        for y in range(2):
16
            display.set_pixel(x,y,9)
17
    for x in range(3,5):
18
        for y in range(3,5):
19
            display.set_pixel(x,y,0)
20
def afficheOrange():
21
    for x in range(3,5):
22
        for y in range(2):
23
            display.set_pixel(x,y,0)
24
    # orange clignotant
25
    couleur = max(0,4 - abs(ticks_ms()-clignotant - 500)//100)
26
    for x in range(3,5):
27
        for y in range(3,5):
28
            display.set_pixel(x,y,couleur)
29
def afficheAttente(attente):
30
    for x in range(2):
31
        for y in range(5):
32
            display.set_pixel(x,y, 0 if 5*x+y >= attente else 9)
33
34
35
while True:
36
    # Affichage Rouge / Orange
37
    if feuRouge :
38
        afficheRouge()
39
    else :
40
        afficheOrange()
41
42
    # Action toutes les secondes
43
    if ticks_ms()-clignotant > 1000:
44
        clignotant = ticks_ms()
45
        attente -= 1
46
        afficheAttente(attente)
47
        radio.send(str(attente))
48
49
    # Alternance du feu
50
    if attente == 0 :
51
        attente=DUREE
52
        feuRouge = not feuRouge
53
        if feuRouge :
54
            radio.send("VERT")
55
        else:
56
            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
feuRouge = True
9
clignotant = ticks_ms()
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
    # orange clignotant
23
    couleur = max(0,4 - abs(ticks_ms()-clignotant - 500)//100)
24
    for x in range(3,5):
25
        for y in range(3,5):
26
            display.set_pixel(x,y,couleur)
27
def afficheAttente(attente):
28
    for x in range(2):
29
        for y in range(5):
30
            display.set_pixel(x,y, 0 if 5*x+y >= attente else 9)
31
32
33
while True:
34
    # Traitement des messages du maitre
35
    incoming = radio.receive()
36
    if incoming:
37
        if incoming == "VERT" :
38
            feuRouge = False
39
        elif incoming == "ROUGE" :
40
            feuRouge = True
41
        elif len(incoming)==1:
42
            afficheAttente(int(incoming))
43
44
    # Affichage Rouge / Orange
45
    if feuRouge :
46
        afficheRouge()
47
    else :
48
        afficheOrange()
49
50
    # Compteur temps à 0 toute les secondes
51
    if ticks_ms()-clignotant > 1000:
52
        clignotant = ticks_ms()