Programmierung mit LUA schlägt fehl

German
Stachel
New member
 
Posts: 6
Joined: Sat May 04, 2019 20:33

Programmierung mit LUA schlägt fehl

by Stachel » Sat May 04, 2019 20:47

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: 244
Joined: Sun Mar 26, 2017 12:42
Location: Germany
GitHub: TalkLounge
IRC: TalkLounge
In-game: TalkLounge

Re: Programmierung mit LUA schlägt fehl

by TalkLounge » Sat May 04, 2019 20:58

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
New member
 
Posts: 6
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Sat May 04, 2019 21:12

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
DS-minetest
Member
 
Posts: 1075
Joined: Thu Jun 19, 2014 19:49
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.
GitHub: DS-Minetest
In-game: DS

Re: Programmierung mit LUA schlägt fehl

by DS-minetest » Sat May 04, 2019 21:52

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 DS-minetest on Sat May 04, 2019 21:58, edited 3 times in total.
Do not call me -minetest.
Call me DS or DS-minetest.
I am German, so you don't have to pm me English if you are also German.
The background is a lie.
 

Stachel
New member
 
Posts: 6
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Sat May 04, 2019 21:56

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

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

Re: Programmierung mit LUA schlägt fehl

by DS-minetest » Sat May 04, 2019 21:58

Entschuldige, ich habe versehentlich zu früh auf submit gerückt, jetzt ist es vollständig.
Do not call me -minetest.
Call me DS or DS-minetest.
I am German, so you don't have to pm me English if you are also German.
The background is a lie.
 

Stachel
New member
 
Posts: 6
Joined: Sat May 04, 2019 20:33
 

Stachel
New member
 
Posts: 6
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Tue May 07, 2019 12:12

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
DS-minetest
Member
 
Posts: 1075
Joined: Thu Jun 19, 2014 19:49
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.
GitHub: DS-Minetest
In-game: DS

Re: Programmierung mit LUA schlägt fehl

by DS-minetest » Tue May 07, 2019 13:32

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?
Do not call me -minetest.
Call me DS or DS-minetest.
I am German, so you don't have to pm me English if you are also German.
The background is a lie.
 

Stachel
New member
 
Posts: 6
Joined: Sat May 04, 2019 20:33

Re: Programmierung mit LUA schlägt fehl

by Stachel » Tue May 07, 2019 18:36

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
DS-minetest
Member
 
Posts: 1075
Joined: Thu Jun 19, 2014 19:49
Location: I'm scared that if this is too exact, I will be unable to use my keyboard.
GitHub: DS-Minetest
In-game: DS

Re: Programmierung mit LUA schlägt fehl

by DS-minetest » Wed May 08, 2019 13:01

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.
Do not call me -minetest.
Call me DS or DS-minetest.
I am German, so you don't have to pm me English if you are also German.
The background is a lie.
 


Return to Deutsch



Who is online

Users browsing this forum: No registered users and 0 guests