Create: Computing AgesDoc Brass
Programmes intégrés

sequencer

un séquenceur à étapes

Tourne sur Tous Tous les ordinateurs · 15 lignes
Tapez ceci à l'invite d'un ordinateur pour le copier sur le support :
Terminal
> 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

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

Brass
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

ipairs() 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 :

Brass
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
Écran
é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 top et ajoutez rs.set("top", step.top) à la boucle.
  • Jouez la séquence une fois par appui sur un bouton : remplacez while true do par 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 dans arg[1].

Le programme

sequencer
-- 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