Create: Computing AgesDoc Brass
Programmes intégrés

speed

pilote un régulateur

Tourne sur Tous Tous les ordinateurs · 15 lignes
Tapez ceci à l'invite d'un ordinateur pour le copier sur le support :
Terminal
> examples speed
> edit speed

Pilote un Contrôleur de vitesse de rotation de Create : les machines tournent vite (128 tr/min) quand l'entrée gauche est alimentée, et lentement (16 tr/min) sinon. Un ordinateur qui règle des vitesses peut économiser du stress quand une chaîne est à l'arrêt, accélérer un broyeur quand le minerai s'entasse, ou ralentir une machine en fin de course.

Quoi construire

  • À droite de l'ordinateur (vu face à l'écran), un Contrôleur de vitesse de rotation, alimenté par un arbre en rotation comme d'habitude, avec par-dessus la grande roue dentée qui entraîne vos machines.
  • À gauche, un levier, un bouton, ou n'importe quel signal de redstone.

Si le bloc de droite n'est pas un périphérique, le programme s'arrête avec pas de régulateur de vitesse à droite. Si c'est un autre bloc de Create, le premier kinetic.set_speed() l'arrête avec set_speed needs a Rotation Speed Controller.

Comment il marche

Brass
local motor = peripheral.wrap("right")

peripheral.wrap() donne un objet pour le bloc de droite. Un bloc de Create qui tourne a les méthodes cinétiques ; sur un Contrôleur de vitesse de rotation, elles comprennent set_speed.

Brass
if rs.get("left") > 0 then
  motor.set_speed(128)
else
  motor.set_speed(16)
end

set_speed règle la vitesse cible du contrôleur, en tr/min, comme la valeur sur son côté : jusqu'à 256 dans un sens ou dans l'autre, un nombre négatif faisant tourner à l'envers. Le changement atteint le monde à la fin du tick du jeu, une seule fois, avec la dernière valeur demandée : régler une vitesse dans une boucle serrée ne submerge pas le serveur.

Brass
print(motor.speed() .. " tr/min")
os.pull_event("redstone")

kinetic.speed() lit la vitesse du bloc lui-même. Sur un Contrôleur de vitesse de rotation, c'est la vitesse de l'arbre qui l'alimente, pas la cible que vous venez de régler. Ensuite os.pull_event() attend, sans rien coûter, qu'une entrée de redstone change, et la boucle recommence.

Idées

  • Servez-vous de la force du signal : 0 à 15 converti en 0 à 256 tr/min, pour une vitesse réglée au cadran, avec un Levier analogique de Create par exemple :

    Brass
    for _, puissance in ipairs({0, 1, 8, 15}) do
      local vitesse = math.floor(puissance / 15 * 256)
      print(puissance, vitesse)
    end
    Écran
    0   0
    1   17
    8   136
    15  256

    Dans le programme : motor.set_speed(math.floor(rs.get("left") / 15 * 256)).

  • Ralentissez avant la casse : kinetic.overstressed() indique quand le réseau est surmené. La recette garde-fou de surcharge baisse la vitesse jusqu'à ce qu'il s'en remette.
  • Faites tourner les broyeurs plus vite tant qu'un Coffre à objet renforcé contient beaucoup de minerai, avec inventory.count() (voir stock).
  • Inversez un tapis roulant quelques secondes avec une vitesse négative, puis remettez-la.

Le programme

speed
-- Pilote une machine Create : un régulateur de vitesse à droite
-- tourne vite quand l'entrée gauche est alimentée, lentement sinon.
local motor = peripheral.wrap("right")
if motor == nil then
  error("pas de régulateur de vitesse à droite")
end
while true do
  if rs.get("left") > 0 then
    motor.set_speed(128)
  else
    motor.set_speed(16)
  end
  print(motor.speed() .. " tr/min")
  os.pull_event("redstone")
end