Bediene die Eitelkeit und schmier ihnen Honig um den Mund, sodass sie meinen besser zu sein als der Rest,( dann werden sie alles kaufen bzw. in irgendeinen Nonsens investieren)
sleep(5)
http://www.computercraft.info/wiki/Os.sleep
Der "Fehler2 liegt wohl in der While schleife, da passiert zu lange nix. eine einfache Lösung ist ein sleep(0.5) einzubauen, damit in der Schleife wieder was passiert.
..nebenbei du kannst eine boolsche Variable mit variable= not variable flippen. Aus true wird false und aus false wird true. in dem PRG sieht das dann so aus:
if input == password then
print("Richtig!")
rs.setOutput(side, not inverted)
sleep(opentime)
os.reboot()
...
Bei mir kam kein Fehler... CC1.8
end of file expected, taucht meistens auf wenn Blöcke, die mit 'end' geschlossen werden, nicht richtig verschachtelt sind oder einfach ein 'end' zuviel da steht.
Bei der Frage musste ich lachen, sagen wir's mal so; Es liegt im Wesentlichen nicht an der Hose, sondern an demjenigen, der die Hose trägt damit der Gesamteindruck sexy wirkt oder eben nicht.
Im ersten Moment würde ich vermuten, dass Du versuchst auf ein Listenelement zuzugreifen welches nicht exisitiert. Hat eine Liste 6 Einträge, und ich schreib sowas wie a=liste[7] dann gibt's Mecker von LUA... Die Zahl in der Fehlermeldung gibt oft, aber nicht immer, die Zeile an, in der ein Fehler entdeckt wurde.
a nil value, eigentlich sacht Lua damit, dass es diesen Wert nicht gibt oder aus igrendwelchen Gründen unbekannt ist. Kann auch bei einem Funktionsaufruf vorkommen, wenn man sich verschrieben hat, turtle.turnReight() zum Beispiel oder retstone.setOutput("side")
Da ist wohl schon alles gesagt
Was ist denn die richtige Disk ? Ich mein woran kann der Computer das erkennen ?
Ich frag mich immer noch, wie ein LKW zwei fast 90Grad Kurven mit 70Kmh durch ein wenige Meter grosse Öffnung hinbekommen hat ohne umzufallen...
Ist dann ein Computer der Server und alle anderen Clients zeigen das nur an, oder kann ich an jeden Computer gehen und da die Anzeige ändern, sprich alle Ausgaben von allen Rechnern sollen immer synchronisiert werden ?
im ersten Fall sendet der Server immer wenn eine neue Adresse eingegeben und angezeigt wird, diese Adresse übers Modem an die zuhörenden Clients. Diese ändern dann wenn eine Nachricht, sprich Adresse empfangen wird die Anzeige von webdisplays. Die Clients brauchen also ein Programm welches beständig auf dem Nachrichtenkanal nach neuen zu anzeigenden Webseiten 'lauscht'.
Der zweite Fall ist ein wenig komplexer. Jeder Rechner muss immer auf eine neue Eingabe warten und gleichzeitig lauschen ob was neues kommt. Da read() immer wartet bis die Eingabe beendet ist, muss man wahrscheinlich einen neuen Thread aufmachen, um Eingabe & Lauschen parallel laufen zu lassen. Das sollte mit dem Coroutinen Mechanismus gehen....
Ich würde den Kollegen, der sowas macht einfach mal freundlich darauf hinweisen, dass ich solches Verhalten nicht mag und er das bitte in meiner Gegenwart unterlassen soll. Hilft ungemein und ist wenn es in diesem Fall auch mal andere mithören ein klares Signal "Ich mach das nicht mit" Ob der, der lästert bekloppt oder irgendwas ist, spielt keine Rolle. Man muss nicht den Anderen in seiner Gänze verstehen um zu wissen, das man ein bestimmtes Verhalten nicht mag. Einfach Stellung beziehen, standhaft bleiben und sich nicht auf Nebendiskussionen einlassen. Hab mal im sozialen Bereich gearbeitet, da wird soviel gequtascht, man kommt ohne Abgrenzung gar nicht unbeschadet da durch...
Alles zu machen um anderen zu gefallen, das kann nur schiefgehn, weil es nicht von Dir kommt. Es entspringt nicht Deinem Wesen. Halt erstmal inne, leg eine Verschnaufpause ein, Du bist 'heissgelaufen". So wird das nix.
Such Dir ein Betätigungsfeld aus, wo Dich noch keiner kennt. Geh einfach auf Menschen zu. Freundlich aber bestimmt nicht aufdringlich sondern aus ehrlichem interesse. Da kommt dann sowieso schonmal nicht jede/r in Frage. Das muss man üben, das kann nicht jeder von Geburt an in gleichem Masse.
Ist nie verkehrt sich über andere Gedanken zu machen, doch sich selbst darf man dabei nicht verlieren. Sich den Kopf über andere zu zerbrechen bringt oft nix. Ist das überhaupt real was Ich denke was andere denken ? Einfach mal freundlich fragen du wirst überrascht sein, was da teilweise herauskommt und lernst nebenbei dich selbst (und andere natürlich) besser kennen. Aus der Selbsterkenntnis wächst dann die Selbstsicherheit.
Du könntest durchprüfen lassen, ob sich das Kabel ansprechen lässt, wenn nicht, dann muss es an anderer Position angeschlossen sein. Dazu musst du aber den Error abfangen. Hab's nur kurz bei Gockel gesucht,Stichwort 'Error Handling Computercraft'
Das ganze in einer Funktion, die alle Anschlüsse durchprüft und als Rückgabewert den Anschlussplatz wiedergibt oder so ähnlich. Hab gerade die 1.8.9 drauf, da läuft bundledCable nicht, sonst würd ichs mal durchtesten.
So stehts in der CC wiki:
http://www.computercraft.info/forums2/index.php?/topic/2649-error-handling/
local ok, val = pcall(someFunction)if ok then print(val)else print("Error")end
00 monitor = peripheral.wrap("top")
01 monitor.clear()
02 monitor.setCursorPos(1,1)
03 -- -----------------------------------------
04 aa = 1
05 bb = 1
06 -- -----------------------------------------
07 function check()
08 if
09 aa == 1
10 then
11 monitor.setBackgroundColour((colours.lime))
12 monitor.setCursorPos(1,1)
13 monitor.write(" ")
14 end
15 if
16 bb == 1
17 then
18 monitor.setBackgroundColour((colours.lime))
19 monitor.setCursorPos(1,1)
20 monitor.write(" ")
21 end
22 end
Aufbau: Computer mit einem Farbmonitor obendrauf
Also bei mir läuft das Programm durch, es passiert zwar nix, is aber auch kein Wunder denn die Funktion check() wird zwar definiert, aber nicht aufgerufen.
Zum Testen also noch einen Funktionsaufruf anhängen, zeile 23 heisst dann: check()
Die If abfragen machen so wenig Sinn weil die letzte If abfrage letztlich die Farben setzt, alle vorherigen if's werden dadurch 'überschrieben'.
wenn du eine Auswahl if-abfrage möchtest im Sinne von 'Wenn aa=1 mache dies, wenn aa=2 dann mache jenes, wenn aa=3 mache was anderes usw.
dann benutze eine If -then-elseif abfrage z.b.
if aa== 1 then
.....
elseif aa==2 then
...
elseif aa==3 then
...
[optional]
else -- hier kann der code drunter wenn aa weder 1,2 oder 3 war
...
end
zu Beachten ist, das elseif zusammengeschrieben wird, nur dann ist es eine selektive Auswahl und nicht nur eine Aneinanderreihung von Abfragen.
Wenn ein Vergleich true war, also z.B. aa==2, wird der entsprechend Code ausgeführt und der if-Block beendet. Das Programm läuft nach dem if_end weiter.
Hier gab's mal ein ähnliches Problem, bei dem unten genannten Prg, gibt der Conputer nach RECHTS ein Signal aus, wenn ein Signal von LINKS länger als [signalverzoegerung in sekunden] eingeht. Das Signal wird solange ausgegeben, bis der Eingang wieder abfällt.
Müsste nur noch um die anderen Eingänge erweitert werden und der Ausgang auf das BundledCable gelenkt werden.
Hoffe Du kannst was damit anfangen.
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
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
Hy,
ich hab selber 10 Jahre in einem T-Shirt Laden gearbeitet. Damit ist gemeint, dass du im Grafikprogramm deiner Wahl ein Dokument in 300 dpi erstellst und zwar in Originalgrösse (Ausnahme Vektordaten, da ists egal)
Danach machste einen Screenshot von deinem Motiv, der gibt nicht mehr als 96dpi oder so her, importierst das in deine 300 dpi vorlage vergösserst das importierte auf die gewünschte Ausgabegrösse. Das wird natürlich schwammig/unscharf. kann man nicht verhindern, hängt aber ein bischen vom gfx programm ab.
300 dpi dots per inch, also Punkte pro Inch, Ein Inch sind 2,54 cm. Das sind also 300 punkte pro 2,54 cm, das ist eine gängige Auflösung beim Drucken.
Ein Bildschirm hat üblicherweise 72 dpi, also 72 Bildpunkte pro 2,54cm.
Also einmal hab ich einen Inch da sind 72 punkte drin, ein anderes mal sind da 300 Punkte drin. Wenn ich jetzt die 72'er Punkte in ein 300'er Lineal reinpacke sind diese 72er Punkte natürlich viel kleiner, weil sie in einem 300 Lineal viel weniger Platz wegnehmen, ungefähr nur ein Drittel. Das Verteilung von Elementen pro Längeneinheit nennt man Auflösung.
Ziehe ich jetzt die 72 Punkte, die man sich wie Tennisbälle,auf einem Gummi befestigt vorstellen kann, auseinander, muss sich der Rechner die fehlenden 'tennisbälle' dazwischen ausdenken, (interpolieren) deswegen wird das Bild beim 'Hochziehn' unscharf.
Diese Problem kommt immer wieder vor, letztendlich muss da eine Funktion her, die den Slot in dem sich ein bestimmtes Item befindet, zurückliefert oder eben nix(nil) wenn es nicht vorhanden ist.
Das könnte dann vom Aufruf der Funktion so aussehen:
slot= getItemSlot("planks")
If slot then
turtle.select(slot)
turtle.place()
else
-- item im invetory nicht vorhanden
end
Das muss man dann bei jedem turtle.place() Befehl machen, aber ich muss mich nicht mehr darum kümmern, wo ein bestimmtes Item im Inventory liegt. Ja ich weiss, das ganze wird langsamer, aber bei aufwändigeren 'Bauarbeiten' bei denen auch noch zwischendurch gesammelt wird ist diese Funktion sehr hilfreich.
Die Funktion selber ist von mir geschrieben und sieht so aus:
-- -------------------------------------------------
-- getItemSlot(string itemName)
-- description:
-- Tries to find itemName
-- in turtles inventory.
-- returns slot if itemName was found,
-- otherwise nil
-- itemName can be a part of item's name.
-- not case sensitive
-- example:
-- local slot= getItemSlot("planks")
function getItemSlot(itemName)
local upperItemName= string.upper(itemName)
local found= false
local actualSlot= turtle.getSelectedSlot()
local counter= -1
local nextSlot= 0
local data={}
repeat
counter= counter +1
nextSlot= ((actualSlot-1+counter)%16)+1
data= turtle.getItemDetail(nextSlot)
if data then
local upperName=string.upper(data.name)
local i,j= string.find(upperName, upperItemName)
if i then found= true end
end
until found or counter == 15
if found then return nextSlot else return nil end
end
Ja nun, das ist DAS Manko von CC, der Programmstatus beim Verlassen wird nicht gespeichert. d.h. die Computer oder Turtles bleiben einfach stehn. Was die Kisten wohl machen ist ein automatisches Ausführen des startups beim Wiedereintritt in die Welt.
Also musste jede Veränderung der Schalterzustände in einer Datei speichern, d.h. im oben gezeigten Programm eine Funktion reinbasteln, die nach jedem Tastendruck aufgerufen wird und den aktuellen Schalterzustand in einer Datei speichert. Beim Wiedereintritt in die Welt muss mittels startup die Datei geladen, ausgewertet und die Schalter in die entsprechenden Zustände gebracht werden. So die Theorie....