Programmierung mit LUA schlägt fehl

German
Post Reply
Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Programmierung mit LUA schlägt fehl

by Stachel » Post

Hallo!

Ich versuche schon den ganzen Tag in LUA etwas zu programmieren!
Folgendes zur Erklärung: Ich wollte den Microcontroller mit folgenden Befehlen füttern:

Anzahl=0
if pin.b == true then Anzahl=Anzahl+1
end
if pin.c == true then Anzahl=Anzahl-1
end
digiline_send("LCD",Anzahl)

Jedoch auf dem Display "LCD" steht immer die Null drin, erreichen möchte ich aber das der hoch- und runterzählt, je nachdem, welche Pin angesprochen wird. Es geht um den Bestand in einer Kiste, welcher gezählt werden soll.

"Eingang Kiste" über Meseconleitung am Pin B
"Ausgang Kiste" über Meseconleitung am Pin C
"LCD" hängt über Digiline am Pin D

Pin A ist bautechnisch nicht angeschlossen. Die Ein- und Ausgangskontrolle wird über "Detecting Pneumatic Tube Segment" überwacht, ein Signal auf der Meseconleitung wird durch Aufleuchten angezeigt

Kann mir bitte jemand sagen, was ich ändern muss, damit es funktioniert?

User avatar
TalkLounge
Member
Posts: 324
Joined: Sun Mar 26, 2017 12:42
GitHub: TalkLounge
In-game: TalkLounge
Location: Germany

Re: Programmierung mit LUA schlägt fehl

by TalkLounge » Post

Da der Microcontroller von Mesecons den Code jedes Mal von oben neu ausführt musst du das etwas abändern

Code: Select all

if event.type == "program" then
Anzahl = 0
end

if pin.b then
Anzahl = Anzahl + 1
end

if pin.c then
Anzahl = Anzahl - 1
end

digiline_send("LCD", Anzahl)
Das == true kannste auch weglassen, da das If-Statement eh nur true oder false will und die Pins nur true oder false sein können.
Subgames Server: Sky World Subgames German Survival Server: Wildes Land 2 E-Mail: talklounge@yahoo.de

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Post

Ich habe es 1:1 übernommen, bekomme aber folgende Fehlermeldungen:

Warning: Message was too complex, or contained invalid data (als dauerhafte Anzeige)

(load) 6:attempt to perform arithmetic on global 'Anzahl' (a nil value) (als kurzzeitige Anzeige beim "Eingang")

(load) 10:attempt to perform arithmetic on global 'Anzahl' (a nil value) (als kurzzeitige Anzeige beim "Ausgang")

User avatar
Desour
Member
Posts: 1469
Joined: Thu Jun 19, 2014 19:49
GitHub: Desour
IRC: Desour
In-game: DS
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.

Re: Programmierung mit LUA schlägt fehl

by Desour » Post

Wenn du etwas dauerhaft speichern möchtest, benutze den table mem. mem wird vor jedem Ausführen aus der node meta geholt und nach jedem Ausführen wieder gespeichert. Andere variablen bleiben nicht erhalten.
Mache also:

Code: Select all

if event.type == "program" then
mem.anzahl = 0
elseif event.type == "on" then
if event.pin.name == "A" then -- wohl nicht A sondern B oder was du da benutzt
mem.anzahl = mem.anzahl + 1
elseif event.pin.name == "B" then
mem.anzahl = mem.anzahl - 1
end
digiline_send("LCD", ""..mem.anzahl)
end
Last edited by Desour on Sat May 04, 2019 21:58, edited 3 times in total.
he/him; Codeberg; GitHub; ContentDB; public personal TODO list; "DS" is preferred (but often too short)

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Post

Wie mache ich das? Das soll ja eigentlich für immer laufen (sonst stimmt ja irgendwann mal die Anzahl nicht mehr...)

User avatar
Desour
Member
Posts: 1469
Joined: Thu Jun 19, 2014 19:49
GitHub: Desour
IRC: Desour
In-game: DS
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.

Re: Programmierung mit LUA schlägt fehl

by Desour » Post

Entschuldige, ich habe versehentlich zu früh auf submit gerückt, jetzt ist es vollständig.
he/him; Codeberg; GitHub; ContentDB; public personal TODO list; "DS" is preferred (but often too short)

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Post

Jetzt läuft es super! Vielen Dank euch!

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Post

Ich hätte nochmal ein paar Fragen:

1. Kann man an einen Microcontroller mehrere Display's anschliessen?
2. Kann man Werte von Variablen von einem Microcontroller an einen anderen weitergeben?
3. Kann man aus dem Detector auslesen, was gerade durchgeht? Eventuell noch eine Anzahl (wegen Stapeln von 99 Stück oder so)?
4. Wie kann ich Tastatureingaben abfragen?
5. Kann man dieses Control Panel für meine Lagerverwaltung benutzen / missbrauchen?
6. vielleicht fällt mir später noch was ein (bin gerade auf Arbeit^^ )

User avatar
Desour
Member
Posts: 1469
Joined: Thu Jun 19, 2014 19:49
GitHub: Desour
IRC: Desour
In-game: DS
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.

Re: Programmierung mit LUA schlägt fehl

by Desour » Post

Stachel wrote:1. Kann man an einen Microcontroller mehrere Display's anschliessen?
Du meinst wohl den luacontroller. Einen "microcontroller" gibt es nämlich auch.
Aber ja, das geht. Beim lcd kannst du per Rechtsklick einen channel einstellen. Digilines erlaubt es, über mehrere Kanäle zu senden und empfangen. Benutze digiline_send(<channel>, <msg>). Und baue nur ein Kabel, das an beide geht.
Stachel wrote:2. Kann man Werte von Variablen von einem Microcontroller an einen anderen weitergeben?
Ja, mit digilines. Versuche print(event), dann siehst du im Terminal, mit dem du Minetest gestartet hast, was der table event für Sachen hat. Du musst wissen, dass der Luacontroller eventbasiert ist. Jedes mal, wenn der Code des Luacontrollers ausgeführt wird, gibt es die event variable. Sie ist immer ein table und hat immer den Eintrag event.type, der ein String ist (beispielsweise: "on" oder "digiline" oder "program").
Du kannst nun die Variabeln vom einen zum anderen luacontroller senden und dort empfangen. Sende aber nicht jede einzeln, sonst überhitzen deine luacontroller noch, sondern alle in einem table (sowas wie {mem.anzahl, baum, foo, bar}) (du kannst sie auch mit unpack wieder entpacken (mem.anzahl, baum, foo, bar, ... = unpack(event.msg))).
Stachel wrote:3. Kann man aus dem Detector auslesen, was gerade durchgeht? Eventuell noch eine Anzahl (wegen Stapeln von 99 Stück oder so)?
Was für ein detector?
Meinst du von pipeworks die digilines detector tube?
Versuche mal zu sehen, was denn für digiline Nachrichten kommen mit print(event).
Stachel wrote:4. Wie kann ich Tastatureingaben abfragen?
Garnicht ist es möglich.
In minetest ist momentan für Server nur möglich, mods auf dem Server laufen zu lassen. Um jegliche Tastendrücke abzufangen müsste der Client all diese per Netzwerk durch die halbe Welt verschicken. Das tut er aber nicht. Somit ist es momentan unmöglich in minetest per modding Tastatureingaben abzufragen. (Aber das ändert sich hoffentlich bald (= in den nächsten Jahren) mit spcsm.)
Stachel wrote:5. Kann man dieses Control Panel für meine Lagerverwaltung benutzen / missbrauchen?
Was für ein control panel?
he/him; Codeberg; GitHub; ContentDB; public personal TODO list; "DS" is preferred (but often too short)

Stachel
Member
Posts: 57
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Post

zu 1.: Stimmt, hätte ich nicht fragen brauchen.

Wenn man den LuaController anklickt, steht auf der "Programmieroberfläche" Microcontroller, vielleicht hat sich das dadurch falsch eingeprägt.

das mit der Programmierung muss ich mir mal in Ruhe anschauen, habe momentan zu viele Stunden, die ich auf Arbeit verbringen darf. Ich danke dir auf jeden Fall schon mal.

zu 4.: Schade, dass es sowas noch nicht gibt, aber nicht zu ändern. Hoffen wir auf das entsprechende Update.

zu 5.: Ich meine das Digiline Control Panel, da kann man doch bestimmt die 6 Steuertasten links unten für eine Menü-Steuerung (für meine Lagerverwaltung) missbrauchen.

User avatar
Desour
Member
Posts: 1469
Joined: Thu Jun 19, 2014 19:49
GitHub: Desour
IRC: Desour
In-game: DS
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.

Re: Programmierung mit LUA schlägt fehl

by Desour » Post

Stachel wrote:zu 5.: Ich meine das Digiline Control Panel, da kann man doch bestimmt die 6 Steuertasten links unten für eine Menü-Steuerung (für meine Lagerverwaltung) missbrauchen.
Ich habe bei meiner Welt nachgesucht und das digistuff Digiline Control Panel gefunden, das meinst du bestimmt.
Es sendet digiline signale mit msg = "up", "down", "right", "left", "back" oder "enter". Was du mit diesen Signalen machst, ist deine Sache.
he/him; Codeberg; GitHub; ContentDB; public personal TODO list; "DS" is preferred (but often too short)

Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests