
sequencer
un séquenceur à étapes
> examples sequencer > edit sequencer
Un séquenceur à étapes : une liste d'étapes, chacune réglant les sorties gauche et droite pendant un temps donné, jouée en boucle. C'est le Lecteur de cartes Jacquard du premier âge écrit en code, et la base de toute machine minutée : une porte qui s'ouvre et se ferme, un ascenseur à pistons, un jeu de lumières, une presse qui attend le tapis.
Quoi construire
Posez quelque chose qui obéit à la redstone à gauche et à droite de l'ordinateur (vu face à l'écran) : des lampes pour suivre la séquence, des pistons, ou des blocs de Create comme un Embrayage (alimenté : l'arbre s'arrête) ou un Inverseur de rotation (alimenté : la rotation s'inverse).
Comment il marche
local steps = {
{left = 15, right = 0, time = 1},
{left = 0, right = 15, time = 1},
{left = 15, right = 15, time = 2},
{left = 0, right = 0, time = 1},
}Toute la séquence est une donnée : une liste (une table) d'étapes, chaque étape étant une petite table à trois champs. Changer la séquence revient à changer cette liste, pas le code. Un cycle dure 1 + 1 + 2 + 1 = 5 secondes.
while true do
for i, step in ipairs(steps) do
rs.set("left", step.left)
rs.set("right", step.right)
sleep(step.time)
end
endipairs() parcourt la liste dans l'ordre, en donnant la position i et l'étape. step.left lit un champ de l'étape. rs.set() prend ici une force de 0 à 15, plutôt que true ou false. Après la dernière étape, while true reprend la liste.
Pour voir passer les étapes, affichez-les pendant qu'elles jouent. Ici avec deux étapes seulement :
local etapes = {
{left = 15, right = 0, time = 1},
{left = 0, right = 15, time = 1},
}
for i, etape in ipairs(etapes) do
print("étape " .. i .. " : gauche " .. etape.left .. ", droite " .. etape.right)
rs.set("left", etape.left)
rs.set("right", etape.right)
sleep(etape.time)
endétape 1 : gauche 15, droite 0 étape 2 : gauche 0, droite 15
Idées
Une porte ou un ascenseur à pistons avec Create : un Embrayage à gauche arrête le mouvement, un Inverseur de rotation à droite le renverse. Quatre étapes le font avancer, attendre, revenir et attendre :
Brass local steps = { {left = 0, right = 0, time = 3}, -- avance {left = 15, right = 0, time = 2}, -- arrêt {left = 0, right = 15, time = 3}, -- retour {left = 15, right = 15, time = 2}, -- arrêt }Réglez la durée des étapes sur la longueur du trajet à votre vitesse.
- Ajoutez une troisième sortie : donnez à chaque étape un champ
topet ajoutezrs.set("top", step.top)à la boucle. - Jouez la séquence une fois par appui sur un bouton : remplacez
while true dopar une boucle qui attend d'abord le bouton,repeat os.pull_event("redstone") until rs.get("back") > 0, puis joue la liste une fois. - Rangez plusieurs séquences dans une table de listes et choisissez-en une par un argument (
sequencer rapide), lu dansarg[1].
Le programme
-- Un séquenceur, comme le lecteur Jacquard mais en code :
-- chaque étape règle les sorties gauche et droite pendant un temps.
local steps = {
{left = 15, right = 0, time = 1},
{left = 0, right = 15, time = 1},
{left = 15, right = 15, time = 2},
{left = 0, right = 0, time = 1},
}
while true do
for i, step in ipairs(steps) do
rs.set("left", step.left)
rs.set("right", step.right)
sleep(step.time)
end
end