Feu tricolore
Un feu de circulation à trois lampes qui suit la redstone tout seul, jusqu'à ce qu'un ordinateur en prenne la main.
Le Feu tricolore est un feu de circulation à trois lampes, rouge en haut, orange au milieu et vert en bas, comme les premiers feux électriques des années 1910. Tout seul, il suit la redstone. Dès qu'un ordinateur le règle, il affiche ce que demande votre programme, et la redstone ne le fait plus bouger tant que le programme ne lui a pas rendu la main.
local feu = peripheral.wrap("left")
feu.set("green")light.set(aspect) | Affiche un aspect, et prend la main sur le feu : à partir de là, la redstone est ignorée. |
light.get() | L'aspect que montre le feu maintenant, quel que soit celui qui l'a choisi : votre programme, ou la redstone autour. |
light.release() | Rend le feu à la redstone. Il affiche aussitôt l'aspect que demande son entrée de redstone (off s'il ne reçoit rien). |
Installation
Le poser. Les feux sont tournés vers vous quand vous posez le bloc : placez-vous du côté d'où viendront les conducteurs. La Clé de Create le fait tourner ensuite.
Tout seul, il suit la redstone. Le signal le plus fort qu'il reçoit choisit l'aspect. Une horloge de redstone, un comparateur ou une Liaison de redstone de Create peuvent faire tourner un carrefour sans aucun ordinateur :
| redstone | aspect |
|---|---|
| 0 | off |
| 1 à 4 | red |
| 5 à 7 | red_amber |
| 8 à 11 | green |
| 12 à 14 | amber |
| 15 | flashing |
Le joindre depuis un ordinateur. Posez le feu contre une face de l'ordinateur et appelez-le par cette face : peripheral.wrap("left"). Sur un Mini-ordinateur ou un ordinateur plus récent, il peut aussi toucher un Câble de données du réseau de l'ordinateur : il prend alors le nom de ses coordonnées, comme traffic_light@120,64,-35. Et peripheral.find("traffic_light") prend le premier feu trouvé (les faces d'abord), sans nom à taper. Tous les ordinateurs peuvent le piloter, Calculateur à tubes compris. Voir Périphériques et Tous les périphériques.
Un ordinateur peut aussi faire bouger un feu par la redstone, avec le tableau ci-dessus : rs.set("left", 9) allume le vert d'un feu posé contre sa face gauche. Pour un feu éloigné, posez à côté de lui une Liaison de redstone de Create en mode récepteur, et émettez la puissance depuis l'ordinateur avec link.set. Le feu reste alors commandé par la redstone.
Commande
light.set(aspect)
Affiche un aspect, et prend la main sur le feu : à partir de là, la redstone est ignorée.
aspectstring"off","red","red_amber","amber","green"ou"flashing"
Les six aspects :
| aspect | le feu montre |
|---|---|
"off" | rien |
"red" | le rouge : arrêt |
"red_amber" | le rouge et l'orange ensemble : préparez-vous, le vert arrive |
"amber" | l'orange seul : arrêtez-vous si vous le pouvez, le rouge arrive |
"green" | le vert : passez |
"flashing" | l'orange qui clignote, une demi-seconde allumé, une demi-seconde éteint : prudence (ce que montrent les vrais feux la nuit ou en panne) |
local feu = peripheral.wrap("left")
feu.set("red")
sleep(10)
feu.set("red_amber")
sleep(2)
feu.set("green")Le feu garde l'aspect choisi par l'ordinateur après la fin du programme, après un redémarrage, et même quand l'ordinateur est cassé : appelez feu.release() pour le rendre à la redstone (casser puis reposer le feu le fait aussi). Une lampe allumée éclaire un peu autour d'elle (niveau 7).
En cas d'échec :
- un aspect inconnu arrête le programme avec
bad aspect 'yellow' (off, red, red_amber, amber, green, flashing); - quand le bloc de cette face n'est plus un Feu tricolore (cassé, remplacé) :
traffic light removed; - quand son chunk n'est pas chargé :
peripheral is not loaded.
Voir aussi traffic_light.get() traffic_light.release()
L'aspect que montre le feu maintenant, quel que soit celui qui l'a choisi : votre programme, ou la redstone autour.
- string
- l'aspect affiché maintenant :
"off","red","red_amber","amber","green"ou"flashing"
Lire ne prend jamais la main : un ordinateur peut donc surveiller un carrefour mené par une horloge de redstone, et réagir :
local feu = peripheral.find("traffic_light")
if feu.get() == "red" then
rs.set("top", true) -- baisse la barrière du passage à niveau
endUn feu qui clignote se lit "flashing" dans les deux moitiés de son clignotement. Quand le feu a été cassé, get renvoie nil.
Voir aussi traffic_light.set()
light.release()
Rend le feu à la redstone. Il affiche aussitôt l'aspect que demande son entrée de redstone (off s'il ne reçoit rien).
Servez-vous-en quand l'ordinateur ne prend la main qu'une partie du temps, par exemple pour un véhicule prioritaire, et que l'horloge de redstone mène le carrefour le reste du temps :
local feu = peripheral.wrap("left")
feu.set("green") -- les pompiers passent
sleep(15)
feu.release() -- l'horloge de redstone reprend la main
print(feu.get())L'appeler sur un feu qui n'est pas sous contrôle ne fait aucun mal. Quand le feu a été cassé, il ne fait rien.
Voir aussi traffic_light.set()
Exemples
Un cycle complet
La séquence classique, comme au Royaume-Uni ou en Allemagne : vert, orange, rouge, puis rouge et orange ensemble juste avant le vert. Enregistrez-le sous le nom startup pour que le carrefour reparte tout seul au chargement du chunk.
local feu = peripheral.wrap("left")
if feu == nil then
error("pas de feu tricolore à gauche")
end
while true do
feu.set("green")
sleep(20)
feu.set("amber")
sleep(3)
feu.set("red")
sleep(20)
feu.set("red_amber")
sleep(2)
endUn vrai carrefour a deux feux qui ne doivent jamais être verts en même temps : la recette Carrefour intelligent les pilote depuis un seul ordinateur. Le programme intégré traffic attend une voiture sur une Boucle de détection avant de passer au rouge.
Un passage piéton
La route reste au vert jusqu'à ce que quelqu'un appuie sur le bouton. Un feu est tourné vers la route, un second vers le passage piéton (le vert veut dire « traversez »), et un bouton en pierre est posé sur l'avant de l'ordinateur.
local voitures = peripheral.wrap("left")
local pietons = peripheral.wrap("right")
voitures.set("green")
pietons.set("red")
while true do
os.pull_event("redstone")
if rs.get("front") > 0 then
sleep(3) -- les voitures ne s'arrêtent pas d'un coup
voitures.set("amber")
sleep(3)
voitures.set("red")
sleep(1)
pietons.set("green")
sleep(10)
pietons.set("flashing") -- dépêchez-vous
sleep(4)
pietons.set("red")
sleep(1)
voitures.set("red_amber")
sleep(2)
voitures.set("green")
end
endos.pull_event("redstone") dort jusqu'à ce qu'une entrée de redstone de l'ordinateur change : le programme ne coûte rien tant que personne ne vient. Le test rs.get("front") > 0 ne garde qu'un bouton enfoncé à cet instant : l'évènement du bouton qui ressort ne lance rien, pas plus qu'un ancien appui fait pendant que des gens traversaient (un bouton en pierre reste enfoncé une seconde).