Create: Computing AgesDoc Brass
Périphériques

Capteurs de Create Aeronautics

Hauteur, inclinaison, vitesse, obstacles et cap d'un navire volant, lus par un ordinateur sur les capteurs de Create Aeronautics.

Il faut Create Aeronautics

Tout ce qui se trouve sur cette page n'existe que si Create Aeronautics est installé (il est livré avec Create Simulated, qui ajoute ces blocs). Sans lui, aucun de ces blocs n'existe, et peripheral.find("gimbal_sensor") renvoie nil.

Create Aeronautics équipe ses navires volants d'une série de capteurs. Seuls, ils émettent des signaux de redstone ; un ordinateur lit à la place leurs valeurs exactes, des nombres avec lesquels il peut calculer : la hauteur du navire, son inclinaison, sa vitesse, ce qu'il a devant lui, la direction de sa cible.

Create Aeronautics n'est pas traduit en français : en jeu, ses blocs gardent leur nom anglais, indiqué entre parenthèses.

Bloc (nom en jeu)type de périphériquece qu'il mesure
capteur d'altitude (Altitude Sensor)altitude_sensorla hauteur (Y du monde) et la pression de l'air
capteur gyroscopique (Gimbal Sensor)gimbal_sensorl'inclinaison du navire, en degrés
capteur de vitesse (Velocity Sensor)velocity_sensorla vitesse le long d'un axe, en blocs par seconde
capteur optique (Optical Sensor)optical_sensorle premier bloc touché par son laser, et sa distance
table de navigation (Navigation Table)navigation_tablela direction et la distance d'une cible
roulement pivotant (Swivel Bearing)swivel_bearingl'angle vers lequel il tourne sa structure
ressort de torsion (Torsion Spring)torsion_springson angle et sa limite d'angle

Le brûleur à air chaud d'Aeronautics est lui aussi un périphérique : il a sa propre page, Brûleur à air chaud.

Atteindre un capteur. Comme tout appareil, un capteur qui touche l'ordinateur s'appelle par la face où il se trouve ("left", "top"...), et un capteur qui touche un Câble de données (Mini-ordinateur et plus récents) reçoit un nom de réseau comme altitude_sensor@12,70,-3. Le plus simple est de laisser peripheral.find le chercher par son type :

Brass
local alt = peripheral.find("altitude_sensor")
local gyro = peripheral.find("gimbal_sensor")
print("hauteur " .. alt.height())
print("pente X " .. gyro.angle_x() .. ", Z " .. gyro.angle_z())

Tous les ordinateurs peuvent lire un capteur posé contre l'une de leurs faces. Un capteur sur un navire et un ordinateur resté au sol ne se touchent pas : en pratique, l'ordinateur vole avec le navire, souvent un Microcontrôleur (voir Maintien d'altitude d'un dirigeable).

Ce qui revient. Les nombres sont arrondis à 3 décimales (64.5, 0.871). Chaque appel relit le bloc : une valeur est toujours fraîche, et un capteur enveloppé par peripheral.wrap ne devient jamais périmé. Quand quelque chose ne va pas, l'appel arrête le programme avec une erreur que vous pouvez rattraper avec pcall :

erreurquand
sensor removedle bloc a été cassé ou remplacé depuis peripheral.wrap
peripheral is not loadedle chunk du capteur n'est pas chargé
this version of Simulated has no getWorldHeightvotre version de Create Simulated n'a pas cette mesure (le nom à la fin est celui qui manque)
sensor error: ...le capteur lui-même a échoué en répondant
Note

Si vous connaissez les périphériques ComputerCraft de Simulated : les mesures sont les mêmes, sous les noms de ce mod (height() plutôt que getHeight()), et les angles du capteur gyroscopique arrivent en degrés, une méthode par axe.

Méthodes
capteur.read()Lit toutes les valeurs d'un capteur en un seul appel, et les renvoie dans une table dont les clés sont les noms de ses méthodes.
alt.height()La hauteur du capteur dans le monde, en blocs : la coordonnée Y du centre du bloc.
alt.pressure()La pression de l'air là où se trouve le capteur : 1 au niveau de la mer, de moins en moins à mesure que l'on monte.
gyro.angle_x()L'inclinaison du navire autour de son axe X (l'axe est-ouest), en degrés : le « nez en l'air, nez en bas » d'un navire qui vole vers le nord ou le sud.
gyro.angle_z()L'inclinaison du navire autour de son axe Z (l'axe nord-sud), en degrés : à quel point il penche sur le côté.
vitesse.velocity()La vitesse du navire le long de l'axe du capteur de vitesse (Velocity Sensor), en blocs par seconde (Aeronautics écrit m/s : c'est la même chose).
oeil.hit()Indique si le faisceau touche un bloc à sa portée.
oeil.distance()La distance du bloc, en blocs, mesurée du centre du capteur au point où le faisceau touche le bloc. nil quand le faisceau ne touche rien.
oeil.block()L'id du bloc que touche le faisceau, comme "minecraft:oak_log" ou "create:andesite_casing". nil quand le faisceau ne touche rien.
oeil.range()La plus grande distance qu'atteint le faisceau, en blocs : le panneau de réglage du capteur. Un capteur neuf commence au maximum du serveur, 15 blocs sauf si la configuration serveur optical_sensor_max_range en décide autrement.
oeil.set_range(blocks)Change la longueur du faisceau, comme si l'on tournait son panneau de réglage. La valeur est gardée entre 1 et le maximum du serveur (15 par défaut), et la fonction ne renvoie rien : lisez range() pour voir ce qui a été retenu.
nav.angle()La direction de la cible, en degrés de 0 à 360, mesurée à plat dans le plan de la table. Elle tourne avec le navire : quand le navire tourne, l'angle change.
nav.distance()La distance de la table à la cible, en blocs, en ligne droite.
roulement.target_angle()L'angle vers lequel le roulement tourne sa structure, en degrés. La structure le suit physiquement, avec un peu de retard.
ressort.angle()De combien le ressort est remonté en ce moment, en degrés.
ressort.limit()La limite d'angle réglée sur le panneau du ressort, en degrés : 90 sur un ressort neuf, de 1 à 360.
ressort.running()true tant que le ressort bouge (son angle a changé pendant le dernier tick), false quand il est au repos.
ressort.set_limit(degrees)Change la limite d'angle, seulement quand le ressort est au repos. Quand il tourne, rien ne change et la fonction renvoie false, comme le périphérique ComputerCraft de Simulated : changer la plage au milieu d'un mouvement le ferait sauter.

Toutes les mesures d'un coup

#

capteur.read()

→ table

Lit toutes les valeurs d'un capteur en un seul appel, et les renvoie dans une table dont les clés sont les noms de ses méthodes.

Renvoie
table
toutes les mesures du capteur, par nom

Tous les capteurs de cette page l'ont (et le brûleur à air chaud aussi). Les clés de la table sont :

capteurclés de read()
altitude_sensorheight, pressure
gimbal_sensorangle_x, angle_z
velocity_sensorvelocity
optical_sensorhit, distance, block, range
navigation_tableangle, distance
swivel_bearingtarget_angle
torsion_springangle, limit, running
hot_air_burneroutput, signal, amount, filled, capacity

Une mesure qui vaut nil est tout simplement absente de la table : un capteur optique qui ne voit rien n'a ni clé distance ni clé block.

Brass
local gyro = peripheral.find("gimbal_sensor")
local m = gyro.read()
print("X " .. m.angle_x .. "  Z " .. m.angle_z)

Deux bonnes raisons de la préférer dans une boucle : un appel coûte moins que deux ou trois, et toutes les valeurs vont ensemble. Avec des appels séparés, un long programme peut être mis en pause par son budget d'instructions entre deux d'entre eux, et la seconde valeur vient alors d'un tick plus tard.

Comme read n'existe que sur les capteurs, elle permet aussi de les reconnaître parmi les autres appareils. Ce programme liste tous les capteurs que l'ordinateur atteint, avec toutes leurs mesures :

Brass
for _, nom in ipairs(peripheral.list()) do
  local p = peripheral.wrap(nom)
  if p and p.read then
    print(nom)
    for cle, valeur in pairs(p.read()) do
      print("  " .. cle, valeur)
    end
  end
end

Capteur d'altitude

Le capteur d'altitude (Altitude Sensor) émet un signal de redstone qui grandit avec sa hauteur, entre deux hauteurs réglées dans son écran. L'ordinateur se passe de cette échelle et lit directement la hauteur.

#

alt.height()

→ number

La hauteur du capteur dans le monde, en blocs : la coordonnée Y du centre du bloc.

Renvoie
number
la hauteur du centre du capteur, en blocs (Y du monde)

Au sol, un capteur posé sur un bloc en Y 64 est lui-même en Y 65 : il lit donc 65.5. Sur un navire en vol, il lit la vraie hauteur du navire dans le monde, où qu'il soit. C'est la mesure que tient un pilote automatique d'altitude (voir Maintien d'altitude d'un dirigeable).

Brass
local alt = peripheral.find("altitude_sensor")
print(string.format("Hauteur : %.1f", alt.height()))

Une alarme d'altitude basse : une lampe sur le dessus de l'ordinateur s'allume sous Y 90.

Brass
local alt = peripheral.find("altitude_sensor")
while true do
  rs.set("top", alt.height() < 90)
  sleep(0.5)
end

La vitesse de montée se déduit de deux mesures : la différence de hauteur divisée par le temps écoulé entre elles.

Brass
local alt = peripheral.find("altitude_sensor")
local avant = alt.height()
sleep(1)
local montee = alt.height() - avant
print(string.format("montée %+.1f blocs/s", montee))

Voir aussi altitude_sensor.pressure() vehicle.position()

#

alt.pressure()

→ number

La pression de l'air là où se trouve le capteur : 1 au niveau de la mer, de moins en moins à mesure que l'on monte.

Renvoie
number
la pression de l'air autour du capteur, 1 au niveau de la mer

Par défaut, l'air se raréfie en douceur avec la hauteur : environ 0.71 en Y 150, 0.58 en Y 200, et 0 en haut du monde. Sous le niveau de la mer, elle dépasse 1. Les Lunettes d'ingénieur montrent la même valeur en pourcentage. Un pack de données peut changer la courbe d'une dimension.

La pression compte, car les ballons portent moins dans l'air raréfié : un navire qui flotte sans peine en Y 100 peut ne pas réussir à dépasser Y 250. Pour l'afficher en pourcentage :

Brass
local alt = peripheral.find("altitude_sensor")
print(string.format("Air : %.0f %%", alt.pressure() * 100))

Capteur gyroscopique

Le capteur gyroscopique (Gimbal Sensor) mesure l'inclinaison du navire. Ses panneaux de réglage (l'angle du signal maximal, le sens de la sortie) ne changent que sa sortie de redstone, pas ce que lit un ordinateur.

Les deux angles sont mesurés dans les axes du navire lui-même : le « sud » est le côté du navire qui regardait vers le sud (+Z) quand il a été construit, et l'« est » le côté qui regardait vers l'est (+X), quelle que soit la direction du navire maintenant. Les noms des appareils sur le Câble de données du navire utilisent les mêmes axes, ce qui les rend faciles à combiner (un brûleur d'X plus grand est du côté est).

Au sol, loin de tout navire assemblé, les deux angles valent 0.

#

gyro.angle_x()

→ number

L'inclinaison du navire autour de son axe X (l'axe est-ouest), en degrés : le « nez en l'air, nez en bas » d'un navire qui vole vers le nord ou le sud.

Renvoie
number
l'inclinaison autour de l'axe X, en degrés ; plus de 0 quand le côté sud est bas

0 veut dire à plat. Au-dessus de 0, le côté sud est plus bas que le côté nord ; en dessous de 0, c'est le côté nord qui est plus bas.

Brass
local gyro = peripheral.find("gimbal_sensor")
local x = gyro.angle_x()
if x > 1 then
  print("côté sud bas de " .. x .. " degrés")
elseif x < -1 then
  print("côté nord bas de " .. -x .. " degrés")
else
  print("à plat du nord au sud")
end

Voir aussi gimbal_sensor.angle_z()

#

gyro.angle_z()

→ number

L'inclinaison du navire autour de son axe Z (l'axe nord-sud), en degrés : à quel point il penche sur le côté.

Renvoie
number
l'inclinaison autour de l'axe Z, en degrés ; plus de 0 quand le côté est est bas

0 veut dire à plat. Au-dessus de 0, le côté est est plus bas que le côté ouest ; en dessous de 0, c'est le côté ouest qui est plus bas.

Les deux angles font un niveau à bulle. La bulle file vers le côté haut, comme sur un vrai niveau, et passe au jaune puis au rouge quand le navire penche davantage. Le dessin prend la table que renvoie read() : on l'essaie donc ici avec une mesure tapée à la main (le côté sud bas de 2,5 degrés, le côté ouest de 4) :

Brass
local function niveau(m)
  gfx.clear("black")
  term.clear()
  local cx, cy, r = 153, 90, 70
  gfx.circle(cx, cy, r, "gray", 2)
  gfx.circle(cx, cy, 12, "light_gray")
  gfx.line(cx - r, cy, cx + r, cy, "gray")
  gfx.line(cx, cy - r, cx, cy + r, "gray")
  -- le nord en haut : l'est bas pousse la bulle à l'ouest, le sud bas la pousse au nord
  local bx = cx - math.max(-60, math.min(60, m.angle_z * 6))
  local by = cy - math.max(-60, math.min(60, m.angle_x * 6))
  local pente = math.sqrt(m.angle_x ^ 2 + m.angle_z ^ 2)
  local couleur = "lime"
  if pente > 5 then
    couleur = "red"
  elseif pente > 1 then
    couleur = "yellow"
  end
  gfx.circle(bx, by, 9, couleur, true)
  term.set_cursor(1, 1)
  term.write(string.format("X %+.1f", m.angle_x))
  term.set_cursor(1, 2)
  term.write(string.format("Z %+.1f", m.angle_z))
  gfx.text(cx - 1, cy - r - 9, "N", "white")
end

niveau({angle_x = 2.5, angle_z = -4})
Écran
Écran

Sur le navire, donnez-lui le vrai capteur plusieurs fois par seconde (avec la fonction niveau ci-dessus dans le même fichier) :

Brass
local gyro = peripheral.find("gimbal_sensor")
while true do
  niveau(gyro.read())
  sleep(0.2)
end

Voir aussi gimbal_sensor.angle_x()

Capteur de vitesse

#

vitesse.velocity()

→ number

La vitesse du navire le long de l'axe du capteur de vitesse (Velocity Sensor), en blocs par seconde (Aeronautics écrit m/s : c'est la même chose).

Renvoie
number
la vitesse du navire le long de l'axe du capteur, en blocs par seconde, avec un signe

Le capteur ne mesure que le long de son propre axe, celui de son hélice : posé dans la longueur du navire, il donne la vitesse d'avancement ; posé debout, la vitesse de montée. Le signe indique le sens sur cet axe : positif dans un sens, négatif dans l'autre. Avancez une fois pour voir quel signe donne votre capteur.

Sous 0,05 bloc par seconde, il lit 0, et il lit toujours 0 hors d'un navire assemblé. Son panneau de réglage (la vitesse du signal maximal) ne change que sa sortie de redstone.

Brass
local vitesse = peripheral.find("velocity_sensor")
print(string.format("%.1f blocs/s", math.abs(vitesse.velocity())))

Un régulateur de croisière : les hélices tournent par un Contrôleur de vitesse de rotation derrière l'ordinateur, et le programme les accélère ou les ralentit pour tenir 10 blocs par seconde. set_speed veut un nombre entier, d'où math.floor. Si votre capteur lit une vitesse négative quand le navire avance, écrivez -vitesse.velocity().

Brass
local vitesse = peripheral.find("velocity_sensor")
local moteur = peripheral.wrap("back")   -- Contrôleur de vitesse de rotation des hélices
local CROISIERE = 10
local rpm = 64
while true do
  local v = vitesse.velocity()
  rpm = math.max(0, math.min(256, rpm + (CROISIERE - v) * 2))
  moteur.set_speed(math.floor(rpm))
  sleep(0.5)
end
Astuce

Un ordinateur embarqué sur le navire a aussi vehicle (Micro-ordinateur, Microcontrôleur, Ordinateur moderne) : vehicle.speed est la vitesse dans toutes les directions à la fois, vehicle.velocity la donne par axe du monde. Le capteur de vitesse est celui qu'il faut pour un axe du navire, comme « vers l'avant ».

Voir aussi vehicle.speed() vehicle.velocity()

Capteur optique

Le capteur optique (Optical Sensor) envoie un laser depuis sa face (droit vers le haut quand il est posé sur un sol, droit vers le bas quand il est accroché sous un plafond), et indique le premier bloc que touche le faisceau. Avec un objet dans son emplacement de filtre, seuls les blocs correspondants comptent : un faisceau qui touche autre chose n'indique rien.

Pointez-en un vers l'avant sur la proue pour repérer les obstacles, ou vers le bas sous la coque pour mesurer la hauteur au-dessus du sol.

#

oeil.hit()

→ boolean

Indique si le faisceau touche un bloc à sa portée.

Renvoie
boolean
true quand le faisceau touche un bloc (qui passe le filtre, s'il y en a un)
Brass
local oeil = peripheral.find("optical_sensor")
if oeil.hit() then
  print("quelque chose devant")
end

Voir aussi optical_sensor.distance() optical_sensor.block()

#

oeil.distance()

→ number|nil

La distance du bloc, en blocs, mesurée du centre du capteur au point où le faisceau touche le bloc. nil quand le faisceau ne touche rien.

Renvoie
number|nil
la distance du centre du capteur au point touché, en blocs ; nil quand rien n'est touché

Pointé vers le bas sous un navire, c'est la hauteur au-dessus du sol, que le capteur d'altitude ne donne pas : pratique pour se poser en douceur.

Brass
local oeil = peripheral.find("optical_sensor")
local d = oeil.distance()
if d then
  print(string.format("sol à %.1f blocs dessous", d))
else
  print("pas de sol à portée")
end

Voir aussi optical_sensor.hit() optical_sensor.range()

#

oeil.block()

→ string|nil

L'id du bloc que touche le faisceau, comme "minecraft:oak_log" ou "create:andesite_casing". nil quand le faisceau ne touche rien.

Renvoie
string|nil
l'id du bloc touché, comme "minecraft:stone" ; nil quand rien n'est touché

Un capteur pointé vers le bas trouve l'aire d'atterrissage, un carré de béton jaune :

Brass
local oeil = peripheral.find("optical_sensor")
if oeil.block() == "minecraft:yellow_concrete" then
  print("juste au-dessus de l'aire d'atterrissage")
end

Le faisceau traverse les fluides, sauf si un objet contenant un fluide est dans l'emplacement de filtre : avec un seau d'eau, il s'arrête sur l'eau (block() donne "minecraft:water") et plus rien d'autre ne compte.

Voir aussi optical_sensor.hit()

#

oeil.range()

→ number

La plus grande distance qu'atteint le faisceau, en blocs : le panneau de réglage du capteur. Un capteur neuf commence au maximum du serveur, 15 blocs sauf si la configuration serveur optical_sensor_max_range en décide autrement.

Renvoie
number
la longueur du faisceau, en blocs
Brass
local oeil = peripheral.find("optical_sensor")
print("faisceau : " .. oeil.range() .. " blocs")

Voir aussi optical_sensor.set_range()

#

oeil.set_range(blocks)

Change la longueur du faisceau, comme si l'on tournait son panneau de réglage. La valeur est gardée entre 1 et le maximum du serveur (15 par défaut), et la fonction ne renvoie rien : lisez range() pour voir ce qui a été retenu.

Paramètres
blocks number
la nouvelle longueur du faisceau, un nombre entier de blocs

Le nombre doit être entier : oeil.set_range(7.5) arrête le programme avec bad argument #1 to 'set_range' (number has no integer representation). Arrondissez-le d'abord avec math.floor.

Un faisceau court ignore ce qui est loin, par exemple pour une alarme qui ne s'intéresse qu'aux 6 derniers blocs :

Brass
local oeil = peripheral.find("optical_sensor")
oeil.set_range(6)
print(oeil.range())
oeil.set_range(1000)
print(oeil.range())   -- le maximum du serveur, 15 par défaut

Une alerte d'obstacle. Un capteur sur la proue regarde devant, et l'ordinateur fait sonner une cloche (ou allume une lampe) sur sa face du dessus quand quelque chose est à moins de 8 blocs. read() prend les trois valeurs du même instant :

Brass
local oeil = peripheral.find("optical_sensor")
while true do
  local m = oeil.read()
  local danger = m.hit and m.distance < 8
  rs.set("top", danger)
  term.clear()
  term.set_cursor(1, 1)
  if danger then
    print("OBSTACLE " .. m.block .. " à " .. m.distance)
  else
    print("la voie est libre")
  end
  sleep(0.25)
end

La même mesure dessinée en jauge : la barre est le faisceau, remplie jusqu'à l'obstacle, rouge quand il est proche. Ici avec une mesure tapée à la main, un arbre à 6,4 blocs devant :

Brass
local function radar(m)
  gfx.clear("black")
  term.clear()
  term.set_cursor(2, 2)
  term.write("CAPTEUR DE PROUE, faisceau " .. m.range .. " blocs")
  gfx.rect(10, 40, 286, 30, "gray", 2)
  if m.hit then
    local w = math.floor(282 * m.distance / m.range)
    local couleur = "lime"
    if m.distance < 8 then
      couleur = "red"
    end
    gfx.rect(12, 42, w, 26, couleur, true)
    term.set_cursor(2, 10)
    term.write(string.format("%s à %.1f blocs", m.block, m.distance))
  else
    term.set_cursor(2, 10)
    term.write("la voie est libre")
  end
end

radar({hit = true, distance = 6.4, block = "minecraft:oak_log", range = 15})
Écran
Écran

Voir aussi optical_sensor.range()

Table de navigation

La table de navigation (Navigation Table) indique la cible de l'objet de navigation posé dessus : une boussole (le point d'apparition du monde, ou sa magnétite), une boussole de récupération (votre dernière mort), une carte (le repère le plus proche dessus : une structure d'une carte d'exploration, ou une bannière que vous avez marquée). Seule, elle envoie de la redstone vers la cible ; l'ordinateur lit la direction et la distance.

Roulement pivotant

Le roulement pivotant (Swivel Bearing) fait tourner une structure collée devant lui (elle s'assemble en contraption quand sa roue dentée reçoit de la rotation), comme une tourelle ou une antenne radar. C'est aussi un bloc cinétique de Create : le roulement enveloppé a donc en plus les méthodes de Blocs cinétiques de Create, comme speed().

#

roulement.target_angle()

→ number

L'angle vers lequel le roulement tourne sa structure, en degrés. La structure le suit physiquement, avec un peu de retard.

Renvoie
number
l'angle vers lequel le roulement tourne sa structure, en degrés

L'angle grandit (ou diminue, selon le sens) à mesure que la roue dentée tourne, et repart après un tour complet : il reste entre -360 et 360. angle % 360 le ramène entre 0 et 360. Il vaut 0 tant que le roulement n'est pas assemblé.

Brass
local roulement = peripheral.find("swivel_bearing")
print(string.format("vise %.1f degrés", roulement.target_angle() % 360))

Tourner une tourelle vers un cap : un Contrôleur de vitesse de rotation derrière l'ordinateur entraîne doucement la roue dentée du roulement jusqu'à ce que l'angle soit à moins de 3 degrés du but, puis s'arrête. Avec sa roue dentée à 8 tr/min, le roulement tourne de 2,4 degrés par tick : la boucle, qui vérifie à chaque tick, ne peut pas sauter par-dessus la fenêtre de 6 degrés.

Brass
local roulement = peripheral.find("swivel_bearing")
local moteur = peripheral.wrap("back")   -- Contrôleur de vitesse de rotation de la roue dentée
local BUT = 90

local function ecart(angle)
  return (BUT - angle + 180) % 360 - 180
end

moteur.set_speed(8)
repeat
  sleep(0.05)
until math.abs(ecart(roulement.target_angle())) < 3
moteur.set_speed(0)

Ressort de torsion

Le ressort de torsion (Torsion Spring) transmet la rotation dans une plage d'angles, puis revient à son angle de départ quand l'entrée s'arrête (sauf si de la redstone le retient). Son panneau de réglage fixe cette plage, la limite d'angle. Comme le roulement pivotant, c'est aussi un bloc cinétique.

#

ressort.angle()

→ number

De combien le ressort est remonté en ce moment, en degrés.

Renvoie
number
l'angle actuel du ressort, en degrés
Brass
local ressort = peripheral.find("torsion_spring")
print("remonté à " .. ressort.angle() .. " sur " .. ressort.limit() .. " degrés")

Voir aussi torsion_spring.limit()

#

ressort.limit()

→ number

La limite d'angle réglée sur le panneau du ressort, en degrés : 90 sur un ressort neuf, de 1 à 360.

Renvoie
number
la limite d'angle, de 1 à 360 degrés

Voir aussi torsion_spring.set_limit()

#

ressort.running()

→ boolean

true tant que le ressort bouge (son angle a changé pendant le dernier tick), false quand il est au repos.

Renvoie
boolean
true tant que le ressort tourne
Brass
local ressort = peripheral.find("torsion_spring")
while ressort.running() do
  sleep(0.1)
end
print("le ressort est au repos")

Voir aussi torsion_spring.set_limit()

#

ressort.set_limit(degrees)

→ boolean

Change la limite d'angle, seulement quand le ressort est au repos. Quand il tourne, rien ne change et la fonction renvoie false, comme le périphérique ComputerCraft de Simulated : changer la plage au milieu d'un mouvement le ferait sauter.

Paramètres
degrees number
la nouvelle limite d'angle, un nombre entier de degrés
Renvoie
boolean
true quand la limite a été changée, false quand le ressort tournait

La valeur est gardée entre 1 et 360. Comme pour tout argument entier, 90.5 arrête le programme avec bad argument #1 to 'set_limit' (number has no integer representation).

Comme elle peut refuser, réessayez jusqu'à ce qu'elle accepte. Une trappe entraînée par un ressort s'ouvre de 90 degrés pour la cargaison, de 30 pour aérer :

Brass
local ressort = peripheral.find("torsion_spring")

local function ouvrir_a(degres)
  while not ressort.set_limit(degres) do
    sleep(0.1)   -- il bouge encore : on attend qu'il se repose
  end
end

ouvrir_a(90)
print("limite : " .. ressort.limit())

Voir aussi torsion_spring.running() torsion_spring.limit()