
traffic
un cycle de feu tricolore
> examples traffic > edit traffic
Fait passer un Feu tricolore par son vrai cycle : vert, orange, rouge, puis rouge et orange ensemble avant le vert. Avec une Boucle de détection, le feu reste vert jusqu'à ce qu'un véhicule attende sur la boucle. C'est le programme de la scène Ponder du Microcontrôleur.
Quoi construire
- Un Feu tricolore qui touche la gauche de l'ordinateur (vue face à l'écran).
- Si vous voulez, une Boucle de détection qui touche la face droite. Elle sent les joueurs, les créatures, les wagonnets, les bateaux et les véhicules de Create Aeronautics jusqu'à deux blocs au-dessus d'elle.
Un Microcontrôleur, entraîné par le dessous, se loge bien dans un poteau au bord de la route. Sans rien à gauche, le programme s'arrête avec pas de feu tricolore à gauche.
Comment il marche
local light = peripheral.wrap("left")
local loop = peripheral.wrap("right")Les deux blocs sont enveloppés. La boucle est facultative : quand rien n'est à droite, loop vaut nil.
light.set("green")
if loop then
repeat sleep(0.5) until loop.detected()
end
sleep(3)traffic_light.set() allume un aspect : "off" (éteint), "red" (rouge), "red_amber" (rouge et orange), "amber" (orange), "green" (vert) ou "flashing" (orange clignotant). Tant qu'un ordinateur pilote le feu, c'est l'ordinateur qui décide, quoi que dise la redstone (traffic_light.release() rend la main à la redstone). if loop then saute l'attente quand il n'y a pas de boucle. repeat ... until interroge la boucle deux fois par seconde jusqu'à ce que inductive_loop.detected() réponde true, puis le feu reste encore vert 3 secondes.
light.set("amber")
sleep(2)
light.set("red")
sleep(8)
light.set("red_amber")
sleep(1)La suite du cycle : un aspect après l'autre, chacun avec sa durée. Puis while true repart sur le vert.
Idées
Rangez le cycle dans une table, comme dans le sequencer : facile à lire et à régler.
Brass local cycle = { {"green", 3}, {"amber", 2}, {"red", 8}, {"red_amber", 1}, } local total = 0 for _, phase in ipairs(cycle) do print(phase[1], phase[2] .. " s") total = total + phase[2] end print("cycle : " .. total .. " s")green 3 s amber 2 s red 8 s red_amber 1 s cycle : 14 s
La boucle devient alors
for _, phase in ipairs(cycle) do light.set(phase[1]) sleep(phase[2]) end.- Orange clignotant la nuit :
light.set("flashing")quandos.day_time()dépasse 13 000. - Comptez les véhicules avec
inductive_loop.count()et donnez un vert plus long à la route la plus chargée. - Un bouton pour piétons : un bouton à l'arrière qui écourte le vert.
- Deux feux pour un carrefour, toujours opposés : la recette carrefour à feux.
Le programme
-- Contrôleur de feu : un feu tricolore à gauche, et si vous
-- voulez une boucle de détection à droite pour attendre les voitures.
local light = peripheral.wrap("left")
local loop = peripheral.wrap("right")
if light == nil then
error("pas de feu tricolore à gauche")
end
while true do
light.set("green")
if loop then
repeat sleep(0.5) until loop.detected()
end
sleep(3)
light.set("amber")
sleep(2)
light.set("red")
sleep(8)
light.set("red_amber")
sleep(1)
end