Programmierung mit LUA schlägt fehl
Programmierung mit LUA schlägt fehl
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?
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?
- 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
Da der Microcontroller von Mesecons den Code jedes Mal von oben neu ausführt musst du das etwas abändern
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.
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)
Subgames Server: Sky World Subgames German Survival Server: Wildes Land 2 E-Mail: talklounge@yahoo.de
Re: Programmierung mit LUA schlägt fehl
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")
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")
- Desour
- Member
- Posts: 1472
- 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
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:
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)
Re: Programmierung mit LUA schlägt fehl
Wie mache ich das? Das soll ja eigentlich für immer laufen (sonst stimmt ja irgendwann mal die Anzahl nicht mehr...)
- Desour
- Member
- Posts: 1472
- 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
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)
Re: Programmierung mit LUA schlägt fehl
Jetzt läuft es super! Vielen Dank euch!
Re: Programmierung mit LUA schlägt fehl
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^^ )
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^^ )
- Desour
- Member
- Posts: 1472
- 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
Du meinst wohl den luacontroller. Einen "microcontroller" gibt es nämlich auch.Stachel wrote:1. Kann man an einen Microcontroller mehrere Display's anschliessen?
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.
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").Stachel wrote:2. Kann man Werte von Variablen von einem Microcontroller an einen anderen weitergeben?
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))).
Was für ein detector?Stachel wrote:3. Kann man aus dem Detector auslesen, was gerade durchgeht? Eventuell noch eine Anzahl (wegen Stapeln von 99 Stück oder so)?
Meinst du von pipeworks die digilines detector tube?
Versuche mal zu sehen, was denn für digiline Nachrichten kommen mit print(event).
Garnicht ist es möglich.Stachel wrote:4. Wie kann ich Tastatureingaben abfragen?
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.)
Was für ein control panel?Stachel wrote:5. Kann man dieses Control Panel für meine Lagerverwaltung benutzen / missbrauchen?
he/him; Codeberg; GitHub; ContentDB; public personal TODO list; "DS" is preferred (but often too short)
Re: Programmierung mit LUA schlägt fehl
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.
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.
- Desour
- Member
- Posts: 1472
- 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
Ich habe bei meiner Welt nachgesucht und das digistuff Digiline Control Panel gefunden, das meinst du bestimmt.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.
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)
Who is online
Users browsing this forum: Google [Bot] and 2 guests