[Tutorial] LCD mit dem Lua-Controler ansteuern

Der Lua-Controler ist einer der coolsten Dinge in Minetest. Kann man doch, theoretisch gesehen, ganze Mods mit diesem kleinen Controler programmieren. Was habe ich damit nicht schon alles gemacht. Zum Beispiel Wird das Hangar-Tor meines Flugfeld mit so einem Controler gesteuert. Oder meine Pyramide, da werkt gleich eine recht grosse Variante dieses Gerätes.

Da man wirklich unglaublich viel mit diesem Teil machen kann, wird hier wohl eine ganze Serie entstehen, so wie ich Zeit dafür finde.

Anfangen will ich mit dem LCD. Wie steuert man es von einem Lua-Controler aus an.

Ich möchte vorausschicken, es ist sehr von Vorteil, wenn man zumindest grundlegend über die Programmiersprache Lua informiert ist. Im Netz finden sich sehr viele Seiten, welche sich mit dem Thema befassen. Ein Beispiel findet ihr hier!

Aber jetzt gehts los!

Zuerst Hängt man irgendwo ein LCD auf. Wo spielt eigentlich keine Rolle, da man das LCD sowieso mit einer Digiline mit dem Controler verbindet.

Dann braucht man natürlich einen Lua-Controler. Hier sei gesagt, man kann sich diesen Controler nicht einfach craften, da es einen anderen Controler mit gleichem Rezept gibt. Man braucht leider einen Craftingtable, oder etwas ähnliches.

Nun kommt eine Digiline dazwischen. Es spielt dabei keine Rolle, an welchen Port des Controlers diese angeschlossen wird. Digilines sehen manchmal auch echt komisch aus, wie man auf dem Bild sehen kann, aber es funktioniert und das ist ja die Hauptsache.

Damit man nun das LCD ansteuern kann, muss man ihm einen Channel zuweisen. Einfach drauf klicken und eine Bezeichnung eingeben. Da könnt ihr eurer Fantasie freien Lauf lassen. Auch Zahlen können verwendet werden. Im Beispiel habe ich den Channel einfach »test« genannt. Achtet auf die Gross- und Kleinschreibung! Die muss später im Controler exakt übereinstimmen!

Mit einem Klick auf den Controler öffnet sich dessen Editor. Der ist soweit ganz gut, allerdings in einigen Belangen auch eingeschränkt. Er ist einfach ziemlich simpel.

Aber hier kommt nun das Programm rein, welches in Lua geschrieben werden muss. Ausschneiden und Kopieren funktioniert hier übrigens auch, so dass man sich zum Beispiel auch fertige Programme im Netz suchen und rein kopieren kann.

Die Funktion, um etwas über Digiline zu senden heisst, man glaubt es kaum:

digiline_send()

Das Beispiel besteht aus einer einzigen Zeile:

digiline_send(„test“, „Hallo“)

Schauen wir uns das mal genauer an:

Die erste Option von digiline_send() ist also „test“. Wichtig dabei ist, dass diese Option in Anführungsstriche eingebettet ist. digiline_send() erwartet an dieser Stelle eine Zeichenkette und diese wird eben in Anführungszeichen gesetzt.

Die zweite Option, welche durch ein Komma von der ersten getrennt ist, lautet in diesem Beispiel „Hallo“. Auch hier erwartet digiline_send() eine Zeichenkette und folglich müssen die Anführungszeichen um den Text.

Wollen wir mal schauen, was passiert wenn man auf »Execute« drückt. Das muss man machen, damit der Lua-Controler den geschriebenen Code auch anwendet. Also egal was ich da schreibt, immer hinterher Execute drücken. Sonst wird der Code nicht gespeichert und nicht ausgeführt!

Na schau an. Unser LCD zeigt nun »Hallo« an. Also genau das, was wir im Controler eingetippt haben. Das LCD zeigt den Text dabei immer zentriert an. Ich wüsste nun auch nicht, dass man das irgendwie umstellen kann. In der Praxis ist das aber okay.

Ein Punkt, welcher bei der Ausgabe auf dem LCD auch immer wieder interessant ist, sind Zeilenumbrüche. Man will ja nicht alles in eine Zeile quetschen. Um das zu erreichen muss man, in der zweiten Option von digiline_send(), drei Zeichen einfügen:

LEERZEICHEN

|

LEERZEICHEN

Wie im Beispiel zu sehen ist, muss man natürlich nicht »LEERZEICHEN« eintippen. Ich wüsste nur im Moment nicht, wie ich das anders zeigen sollte. Die zweite Option sieht in diesem Beispiel also so aus:

„Hallo | Wie geht es“

Schauen wir mal, wie es auf dem LCD aussieht!

Wunderbar, hat ja geklappt!

Natürlich wäre so ein LCD ziemlich nutzlos, wenn man nur fest eingegebene Zeichenketten anzeigen könnte. Das würde die ganze Sache nicht besonders dynamisch machen. Um aber eine gewisse Dynamik zu erreichen, kann man als zweite Option von digiline_send() natürlich auch eine Variable angeben.

In diesem Beispiel habe ich dafür folgendes eingefügt:

local test = „Hallo Welt!“

Das local könnte man auch weglassen, es ist aber nützlich für die Speichernutzung. Macht euch da jetzt mal keine Gedanken drum, eventuell beschreibe ich das in einem anderen Tutorial. Schreibt es einfach vorne dran, wenn ihr eine Variable einfügt, also deklariert.

Man sieht aber auch hier, »Hallo Welt!« steht in Anführungszeichen und ist demnach eine Zeichenkette. Da digiline_send() als Option eine Zeichenkette haben will, können wir die Variable einfach einfügen:

digiline_send(„test“, test)

Drücken wir mal auf Execute und schauen, was passiert!

Siehe da, anstatt »test« steht »Hallo Welt!« auf dem LCD. Wer nun noch keine grosse Erfahrung mit Programmieren hat, wird natürlich die Frage stellen, warum macht man es sich so umständlich? Das ist einfach zu erklären. Hier im Beispiel ist der Einsatz einer Variable natürlich unnötig. Man will aber meistens nicht nur irgendeinen vorgeschriebenen Text anzeigen lassen. Ein Beispiel:

Nehmen wir mal an, man will eine Tube mit Digiline-Anschluss überwachen und sich anzeigen lassen, was dort vorbei transportiert wurde. In diesem Fall wäre diese Tube mit einem eigenen Kanal ebenfalls an den Lua-Controler angeschlossen. Wandert nun etwas durch diese Tube, bekommt der Lua-Controler das gemeldet und man kann es abrufen. Was dabei heraus kommt ist eine Variable und genau die kann man schliesslich dem LCD übergeben und bekommt es angezeigt. Das ist der Sinn von Variablen!

In diesem Beispiel haben wir gleich zwei Variablen. »test1« und »test2«. Will man nun beide auf dem LCD anzeigen lassen, so benötigt man in der zweiten Option zwei einfache Punkte.

..

Hier im Beispiel will ich, dass beide Variablen angezeigt und durch ein Leerzeichen getrennt werden.

digiline_send(„test“, test1 .. “ “ .. test2)

Die Leerzeichen vor und nach den „..“ dienen dabei rein der Übersichtlichkeit. Sie haben auf den Code keinen Effekt!

Lasset uns schauen, was ein Klick auf Execute bewirkt!

Wie man sieht, wird der Inhalt beider Variablen angezeigt. Schön getrennt durch ein Leerzeichen!

Auf die selbe Weise kann man auch einen Zeilenumbruch einfügen. Denkt dabei aber daran, dass ihr vor und nach das | ein Leerzeichen einfügt, sonst funktioniert es nicht!

Dieses Beispiel bewirkt nun folgendes:

Einwandfrei! Anstelle eines Leerzeichens findet man nun den Zeilenumbruch!

Damit endet dieses Tutorial. Ich möchte aber jedem, der damit herumspielen will, den Rat geben, experimentiert einfach! Normalerweise könnt ihr damit nichts kaputt machen. Wenn ihr den Lua-Controler überlastet, überhitzt das Ding einfach und arbeitet nicht mehr weiter. Nachdem ihr wieder auf Execute gedürckt habt, läuft es dann wieder. Solltet ihr dabei aber den Fehler, welcher zum Überhitzen geführt hat, nicht entfernt haben, wird der Controler natürlich wieder überhitzen! Aber prinzipiell, viel kaputt machen könnt ihr damit nicht!

Viel Spass beim Experimentieren!

6 Kommentare

  1. Um alles Material, das durch eine Digiline-Pipe durchläuft zu zählen kann man diesen Code verwenden:
    LCD-Name: lcd1

    if event.type==”digiline” then

    if (mem.counter==nil) then
    mem.counter=0
    end

    count = 1

    pos = string.find(event.msg, ” “, nil, true)

    if pos then
    pos=pos+1

    count = 0
    while pos

  2. Lieber Diabolus Umarov,
    1001 Dank für das tolle Tutorial zum Lua-Controller!
    Leider gibt es viel zu wenig gute Tutorials zum Programmieren in Minetst, sei es mit Command-Blocks, Mesecons … oder anderen Controllern!
    Wir etzen Minetest in vielen Projekten mit Jugendlichen ein:
    https://www.kinderkultur-stadt-hannover.de/bildwelten/digitale-welten/minecraft-und-minetest-workshops-der-lernoase-des-freizeitheims
    … und nach unseren erstern Bau.Projekten möchten wir sehr gern die tolle Plattform auch für andere Projekte nutzen …
    Mein Traum ist, Text-Adventures in Minetest einzubauen …
    … etwa nach der Art, wie die WIKI-Einbindung funktioniert mit
    https://forum.minetest.net/viewtopic.php?id=6492
    … die grosse Frage für mich ist jetzt,
    wenn man nicht einen eigenen Mod programmieren will .. wie man solche verschachtelten Text-Formen in Minetst eibauen kann …
    Als ich Dein Tutorial zum Lua-Controller gelesen habe, habe ich mich gefragt, ob man nicht in „einfaches Lua-Textadventure“ über den Controller einbauen könnte, etwa
    https://github.com/shawndumas/adventure.lua
    … aber das scheitert wohl daran, dass man komplexeren Lua-Code wohl nicht einbinden kann in den Lua-Controller, oder siehst Du eine Möglichkeit?
    Da Du ja auch als Schriftsteller tolle Geschichten schreibst, interessiert dich vielleicht auch eine solche Fragestellung zum Einbinden von Texten in Minetest …
    Herzliche Grüße,
    Heiko

    • Mahlzeit Heiko!

      Erst einmal danke für das positive Feedback. Das gefällt mir immer, da ich dann weiss, ich tippe das alles nicht umsonst.

      Was ein Text-Adventure angeht, dass halte ich durchaus für möglich, auch ohne eigenen Mod. Wobei da allerdings die Frage besteht, wenn du sowieso schon so viel Zeit in die Programmierung stecken willst, warum dann nicht gleich in einem Mod? Der wird ja auch in LUA programmiert.

      Möglichkeiten hättest du auf jeden Fall mehr als genug. Sehr viele Objekte in Minetest haben eine Schnittstelle für den Controler und von daher kann man damit dann auch recht aufwendige Dinge machen.

      Nehmen wir mal ein kleines Beispiel und sagen, deine Spieler sollen in ein Dorf und dort etwas finden. So ein Dorf sollte ja kein Problem sein. Thomas hat auf meinem Server, in der Nähe des alten Spawn, ja ein echt schönes Dorf gebaut. Ist in einem meiner Videos zu sehen. Du könntest an die Häuser jeweils einen Robot setzen, der beim anklicken, oder beim Ansprechen verschiedene Informationen preis gibt, oder auch ein Objekt dropt. Auf die Art könnte man die Geschichte schon voran treiben. Bei dem richtigen Bot könnte dann zum Beispiel ein Buch herauskommen, welches als Inhalt einen Hinweis auf die Lösung eines Rätsels gibt. Vielleicht einen Code, den man an einer bestimmten Tür eintippen muss, damit eine Tür sich öffnet. Vielleicht auch noch etwas aufwendiger. Der Spieler bekommt gesagt, welche Objekte er in eine bestimmte Kiste legen muss, damit das Portal sich öffnet.

      Natürlich sind auch knifflige Lernaufgaben damit möglich. Zum Beispiel, dass die Spieler erst die Verbindung zwischen einem Generator und einem Controler herstellen müssen, damit das funktioniert. Da könnte man die Bots dazu verwenden, die entsprechenden Schritte zu erklären, was der Spieler dafür machen muss.

      Möglichkeiten hast du wie Sand am Meer. Solange du dich mit Lua auskennst, sollte das alles nicht wirklich problematisch werden, denn sowohl der Robot, wie auch der Lua-Controler können theoretisch alles, was du in einem Mod auch machen kannst.

  3. Lieber Diabolus Umarov,
    ..
    Danke für Deine Antworten, die geben mir Hoffnung, mit dem Textadventure-Projekt in Minetest voranzukommen 🙂
    … allerdings bin ich leider überhaupt kein LUA-Programmierer 🙂
    Ist vielleicht in der Hirnfrei-Community jemand so fit, einen kleinen Programmierauftrag in Lua ausführen zu können – im besten Fall sogar ein Textadventure-MOD zu programmieren?
    Könntest Du mir vielleicht Kontaktdaten schicken an
    heikoidensen@gmail.com
    …. vielleicht liest es ja auch jemand aus der Community, der oder die selbst Interesse daran hat 🙂
    .. die Hoffnung stirbt zuletzt!
    Herzliche Grüße, Heiko
    .
    P.S. Inzwischen hat ein Kollege von mir, Norbert Thien, auch eine kleine Demo-Welt mit LUA MESECONS-BEISPIELEN fertiggestellt, worin natürlich auch eure / Deine tollen Beispiele vorkommen (auf den entsprechenden „Signs“ seid ihr natürlich auch als Referenz genannt! 🙂
    https://www.multimediamobile.de/sued/materialien-sued/sued-minetest.html

    Download vorkonfiguriertes »Minetest«

    Nachfolgend finden Sie ein von uns zusammengestelltes Paket zu »Minetest« (Windows, 32bit) mit den wichtigsten Mods, wie wir sie auch in unseren Fortbildungen verwenden.

    Download Minetest-Paket (Windows, 32bit, ca. 32 MB)
    https://www.multimediamobile.de/fileadmin/Daten/Dokumente/sued/material/Minetest-Anleitung.pdf
    Anleitung zu »Minetest«: Download
    https://www.multimediamobile.de/fileadmin/Daten/Dokumente/sued/material/Minetest-Anleitung.pdf
    Einfache Übungen mit »Minetest«: Download
    https://www.multimediamobile.de/fileadmin/Daten/Dokumente/sued/material/Minetest-Aufgaben.pdf
    Welt mit einigen Mesecon-Beispielen: Download (u.a Mod signs_lib nötig)
    https://www.multimediamobile.de/fileadmin/Daten/Dokumente/sued/material/Meseland.zip

    • Wenn ich mehr Zeit hätte, dann würde ich mich dafür gerne anbieten. Im Moment bin ich aber zeitlich leider sehr eingespannt, weshalb ich im Moment auch nicht wirklich Online bin. Du könntest es aber mal bei TalkLounge versuchen. Vielleicht hat der Zeit. Der sollte das auch stemmen können. Er ist gut in Lua.

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*