Create: Computing AgesDoc Brass
Périphériques

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.

Brass
local feu = peripheral.wrap("left")
feu.set("green")
Méthodes
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 :

redstoneaspect
0off
1 à 4red
5 à 7red_amber
8 à 11green
12 à 14amber
15flashing

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.

Piloter un feu sans en prendre la main

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.

Paramètres
aspect string
"off", "red", "red_amber", "amber", "green" ou "flashing"

Les six aspects :

aspectle 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)
Brass
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()

#

light.get()

→ string

L'aspect que montre le feu maintenant, quel que soit celui qui l'a choisi : votre programme, ou la redstone autour.

Renvoie
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 :

Brass
local feu = peripheral.find("traffic_light")
if feu.get() == "red" then
  rs.set("top", true)  -- baisse la barrière du passage à niveau
end

Un 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 :

Brass
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.

startup
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)
end

Un 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.

Brass
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
end

os.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).