
counter
compte des impulsions
> examples counter > edit counter
Compte les impulsions de redstone qui arrivent à gauche de l'ordinateur et affiche le total après chacune. Sans gaspiller une seule instruction entre deux impulsions : le programme dort jusqu'à ce que la redstone change.
Quoi construire
Posez quelque chose qui envoie des impulsions à gauche de l'ordinateur (la gauche vue face à l'écran) : un bouton, une plaque de pression à une porte pour compter les visiteurs, un fil de déclenchement, un observateur, le récepteur d'une Liaison de redstone de Create.
> counter J'attends des impulsions : left Impulsions : 1 Impulsions : 2 Impulsions : 3
Comment il marche
os.pull_event("redstone")os.pull_event() endort le programme jusqu'à l'arrivée d'un évènement. Un évènement redstone arrive à chaque fois que n'importe quelle entrée de l'ordinateur change, sur n'importe quelle face, à la montée comme à la descente. C'est pourquoi le programme vérifie ensuite la face qui l'intéresse. Attendre ainsi ne coûte rien, contrairement à une boucle qui relirait l'entrée sans arrêt.
local now = rs.get(side) > 0
if now and not was then
count = count + 1
print("Impulsions : " .. count)
end
was = nowrs.get() lit la puissance qui arrive sur une face, de 0 à 15, et > 0 la transforme en true ou false. Une impulsion n'est comptée que sur son front montant : quand l'entrée est allumée maintenant (now) alors qu'elle était éteinte avant (not was). Sans was, la fin de chaque impulsion (un autre évènement redstone) serait comptée aussi, tout comme les changements sur les autres faces.
La même détection de front, essayée sur une liste de mesures au lieu du vrai monde :
local mesures = {0, 15, 15, 0, 0, 15, 0, 15}
local total, avant = 0, false
for _, puissance in ipairs(mesures) do
local maintenant = puissance > 0
if maintenant and not avant then
total = total + 1
end
avant = maintenant
end
print("Impulsions : " .. total)Impulsions : 3
Idées
- Affichez le total sur un Panneau d'affichage : ajoutez
display.set({"Visiteurs", tostring(count)})après l'augmentation du compte, et pointez une Liaison d'affichage de Create sur l'ordinateur. Voirdisplay. Un bouton de remise à zéro à droite, vérifié à chaque évènement :
Brass if rs.get("right") > 0 then count = 0 print("Remise à zéro") end- Gardez le compte d'un redémarrage à l'autre en l'enregistrant dans un fichier avec
fs.write(), relu au démarrage avecfs.read(). - Faites quelque chose toutes les 10 impulsions :
if count % 10 == 0 then rs.set("top", true) end, pour allumer une lampe quand un lot est complet. - Mesurez le temps entre deux impulsions avec
os.clock()pour connaître la cadence d'une chaîne de production.
Le programme
-- Compte les impulsions de redstone reçues à gauche : un bouton, un
-- observateur, une machine... Gauche et droite vus face à l'écran.
local side = "left"
local count = 0
local was = false
print("J'attends des impulsions : " .. side)
while true do
os.pull_event("redstone") -- dort jusqu'à un changement d'entrée
local now = rs.get(side) > 0
if now and not was then
count = count + 1
print("Impulsions : " .. count)
end
was = now
end