Frage von sonnig140, 58

Wie schreibe ich dieses Programm in Computercraft (Minecraft)?

Hallo, ich brauche ein Programm was folgendes können soll: Wenn ein kurzes Redstone Signal (Zum Beispiel von einem Knopf) in die rechte Seite vom Computer eingeleitet wird soll der Computer nichts machen, wenn aber ein langes und bleibendes Redstone Signal von der rechten Seite des Computers eingeleitet wird soll der Computer ebenfalls ein Redstone Signal aus der linken Seite des Computers ausgeben, bis das Signal von rechts aufhört. Der Computer soll unendlich Prüfen ob ein kurzes oder ein langes Signal von rechts kommt. Ich hoffe ihr versteht was ich meine. Wäre total super wenn mir jemand helfen könnte.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von HotteKrempel, 31

Die Auslösezeiten, kurz und lang müssen festgelegt werden.

Wir sagen mal 'kurz' ist bis zu einer Sekunde,

'lang' ist alles was darüber ist.

--erstmal warten bis ein Signal kommt

while rs.getInput("right") == false do

  sleep(0.1) -- wir tun was in der schleife, damit CC nicht meckert.

end

-- jetzt liegt ein Signal an, also 'messen' wir die Dauer

dauer= 0

while rs.getInput("right")== true do

   sleep(0.1)

   dauer=dauer + 0.1

   -- wenn das Signal nach einer Sekunde immer noch anliegt, schicken wir ein Signal nach links raus

   if dauer > 1 then  -- hier wird die grenze zwischen kurz / lang definiert

       rs.setOutput("left", "true")

   end

end

--  jetzt warten wir solange, bis das Signal erlischt.

     while rs.getInput("right")== true

         sleep(0.1)

     end

-- Signal  ist wieder weg, also schalten wir auch das Redstone Signal wieder aus

     rs.setOutput("left", "false")

Spätestens hier fehlt mir die info für den 'äusseren Rahmen', soll die Funktion sich selber immer wieder aufrufen, oder was passiert da sonst noch. In welchen Kontext findet das Ganze statt ?

p.s.: ich hab nix getestet, das ist einfach so runtergeschrieben

   

  

Kommentar von sonnig140 ,

Vielen, Dank für deine Antwort. Ich habe ehrlich gesagt nicht mehr gedacht, dass jemand sich die Zeit nimmt um mir zu Helfen. Das Programm soll nach dem erfolgreichen Ablauf erneut von vorne beginnen. Wäre cool, wenn man das noch realisieren können. Danke nochmal

Kommentar von HotteKrempel ,

Hy,

hier das fertige Programm. Es läuft in einer Endlosschleife.

Der Versuchsaufbau von links nach rechts ist

ein rs-schalter,zwei rs-leitungen,eine Turtle,zwei rs-leitungen, eine rs-lampe.

Die Kroete steht also zwischen Schalter und Lampe, verbunden durch rs Leitungen.

Gruss,

Hotte

while true do
signalverzoegerung= 2
ausloeser= false

-- warten bis ein Signal kommt
while rs.getInput("left")== false do
   sleep(0.2)
end

-- Signallänge messen
while rs.getInput("left") == true and ausloeser == false do
    sleep(0.2)
    signalverzoegerung= signalverzoegerung - 0.2
    if signalverzoegerung < 0 then
        -- Zeit ist erreicht, Ausloeser setzen,
       -- dadurch wird die Schleife verlassen
       -- Sie wird auch dann verlassen, wenn das
       -- Eingangssignal vorher abfällt, nur wurde
       -- dann der Ausloeser nicht gesetzt
    ausloeser= true
    end
end


-- wenn der Ausloeser gesetzt wurde
if ausloeser== true then
    -- Ausgangssignal setzen
    rs.setOutput("right", true)
    --warten bis der Eingang wieder abfällt
    while rs.getInput("left") == true do
       sleep(0.2)
    end
    -- Ausgang zurücksetzen
   rs.setOutput("right", false)
end

end

Antwort
von HotteKrempel, 18

Hy,

hier das fertige Programm. Es läuft in einer Endlosschleife.

Der Versuchsaufbau von links nach rechts ist

ein rs-schalter,zwei rs-leitungen,eine Turtle,zwei rs-leitungen, eine rs-lampe.

Die Kroete steht also zwischen Schalter und Lampe, verbunden durch rs Leitungen.

Gruss,

Hotte

p.s.: Ich habe den Verdacht, das könnte auch ganz leicht mit einer Redstoneschaltung erreichen, doch da kenn ich mich nicht so mit aus.

while true do
signalverzoegerung= 2
ausloeser= false

-- warten bis ein Signal kommt
while rs.getInput("left")== false do
   sleep(0.2)
end

-- Signallänge messen
while rs.getInput("left") == true and ausloeser == false do
    sleep(0.2)
    signalverzoegerung= signalverzoegerung - 0.2
    if signalverzoegerung < 0 then
        -- Zeit ist erreicht, Ausloeser setzen,
       -- dadurch wird die Schleife verlassen
       -- Sie wird auch dann verlassen, wenn das
       -- Eingangssignal vorher abfällt, nur wurde
       -- dann der Ausloeser nicht gesetzt
    ausloeser= true
    end
end


-- wenn der Ausloeser gesetzt wurde
if ausloeser== true then
    -- Ausgangssignal setzen
    rs.setOutput("right", true)
    --warten bis der Eingang wieder abfällt
    while rs.getInput("left") == true do
       sleep(0.2)
    end
    -- Ausgang zurücksetzen
   rs.setOutput("right", false)
end

end

Kommentar von sonnig140 ,

Vielen Dank für die Hilfe! Finde ich super!

Kommentar von HotteKrempel ,

gerne geschehen,

nebenbei ist mir schon oft aufgefallen, das in irgendwelchen Foren blabla geschrieben wird anstatt ein Antwort zu präsentieren, anscheinend werden nur Punkte gesammelt.

Was hilft es jemandem wenn als antwort such mal bei Google geschrieben wird, dat is doch Kuhmist.

Antwort
von welt101, 37

http://lmgtfy.com/?q=ComputerCraft+Redstone+Signal

Keine passende Antwort gefunden?

Fragen Sie die Community