Benutzer-Werkzeuge

Webseiten-Werkzeuge




pblua_nxt

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
pblua_nxt [2007/09/09 10:35]
admin angelegt
pblua_nxt [2019/01/10 18:05] (aktuell)
Zeile 1: Zeile 1:
 +==== NXT:pbLua ====
 +
 +
 +===== Die deutsche pbLua NXT FAQ =====
 +
 +
 +Autor: chrimo@moccy.xdsnet.de
 +Datum: 20.01.2007 22:00
 +Lizenz: GPL
 +
 +"​pbLua"​ ist eine Portierung von Lua 5.1 [[http://​www.lua.org]] auf die Lego Mindstorms "​NXT"​ Hardware.
 +
 +Die Entwicklung wird von Ralph Hempel [[http://​www.hempeldesigngroup.com/​lego/​pbLua/​]],​ einem der vier NXT-Design-Pioniere vorangetrieben.
 +
 +Lua ist ein sehr kleiner und extrem schneller Interpreter. Im Gegensatz zu anderen Programmiersprachen wird der Quellkode nicht vorher kompiliert und dann ausgeführt,​ sondern erst beim Start des Lua-Interpreters.
 +D.h. auf dem PC wird nur der Qellkode erstellt, auf den NXT übertragen und dann gestartet. Lua übernimmt dann die Übersetzung direkt auf
 +der NXT-Hardware. ​
 +
 +Lua ist für fast alle Betriebssysteme verfügbar. ​
 +
 +Zum Kennenlernen der Sprache kann man ja mal schnell eine Version lokal ausprobieren [[http://​www.lua.org]].
 + 
 +Download Lua: [[http://​luaforge.net/​projects/​luabinaries/​]] ​
 +
 + 
 +"​Achtung!"​ Zum Betrieb von pbLua ist es "​notwendig"​ den NXT mit einem neuen Betriebssystem "zu flashen"​.
 +
 +**Beschreibung pbLuaNXT-Funktionen**
 +[[http://​www.hempeldesigngroup.com/​lego/​pbLua/​nxtFunctionDefs.html]]
 +
 +==== Warum ist jetzt Lua so interessant für den NXT ?  ====
 +
 +Lua ist sehr einfach zu erlernen
 +
 +Lua läuft auf fast jedem PC und daher kann man alle Programme vorher lokal mit einem einfachen Simulator austesten.
 +
 +Der Hit ist dann natürlich die Erweiterung mit einem grafischen 3D-Simulatior,​ der reelle Werte der virtuellen Sensoren zurückliefert.
 +ct-Sim 3D-Simulator [[http://​www.heise.de/​ct/​ftp/​projekte/​ct-bot/​ct-sim.shtml]]
 +
 +Cool, oder ? Natürlich funktionert das dann auch im Netzwerk (Internet). Wettkämpfe vieler NXT sind dann einfach realisierbar !
 +
 +
 +==== Entwicklungsumgebungen für Lua ====
 +
 +Für die Programmierung mit Lua gibt es z.Z. fantastische Editoren oder Entwicklungsumgebungen.
 +
 +1. Emacs +  LuaMode.el [[http://​lua-mode.luaforge.net/​]]
 +
 +2. Eclipse + EclipseLua [[http://​luaforge.net/​forum/​forum.php?​forum_id=1072]]
 +
 +==== Kommentare ====
 +Kommentare werden mit '''​--'''​ eingeleitet. Dieser Kommentar gilt aber nur für diese Zeile.
 +
 +Wird ein Kommentar über mehrere Zeilen bnötigt, so wird dieser mit '''​--[['''​ eingeleitet und mit '''​--]]'''​ beendet.
 +
 + -- ich bin ein Kommentar, leider nur für diese Zeile
 +
 + ​--[[ ​
 + ich bin auch
 + ein
 + ​Kommentar
 + und ich kann viel mehr 
 + --]]
 +
 +
 +===== Befehlszeilen =====
 +
 +Befehlszeilen und Blöcke können beliebig eingegeben werden. Zur Übersichtlichkeit empfehle ich aber einen Befehl mit ; abzuschließen. In der Literatur findet man dafür auch immer den Begriff CHUNK. Vielleicht muß man es gar nicht speziell erwähnen, aber bei allen Worten wird zwischen Groß -und Kleinschreibung unterschieden.
 +
 +Variable1 ist nicht gleich VARIABLE1
 +
 +i=1
 +satz="​ich bin ein Satz"
 +
 +
 +===== Reservierte Worte =====
 +
 +
 +Folgende Worte sollten nicht für eigene Zwecke benutzt werden und sind für Lua intern reserviert.
 +
 +end break do else elseif end false for function if in local nil not or repeat return then true until while
 +
 +...
 +
 +===== Operatoren und Verknüpfungen =====
 +
 +
 += < > ==
 +
 +Mit = wird einer Variablen ein Wert zugewiesen.
 +
 +Variable = Wert
 +i=0
 +ausgabe="​text"​
 +
 +Vergleiche werden mit < (kleiner als), > (größer als) oder == gleich, ausgeführt.
 +
 +a=1
 +b=2
 +if(a < b) ==> wahr
 +if(a > b) ==> falsch
 +if(a == b) ==> falsch
 +
 +..
 +
 +===== Variablen =====
 +
 +
 +Lua kennt keine strengen Typen, sondern erkennt selber ob es sich um Zahlen, Zeichen oder Zeichenketten handelt. Alle Variblen sind ohne weitere Angabe GOBAL im ganzen Quelltext zugänglich. Bei spezieller Kennzeichnung mit dem Präfix local sin sie nur innerhalb eines Blockes sichtbar. Werden Variablen nicht mr gebrauch oder verwendet, räumt LUa sogar selbstständig auf. Eine besondere Bedeutung hat der Wert nil. Eine Variable hat den Wert nil, wenn ihr kein spezieller Wert zugewiesen wurde. Weist man einer Variablen nil zu, so wird diese komplett aus dem Speicher gelöscht !
 +
 +
 +i=1   -- ich bin überall sichtbat
 +
 +do...
 +local j=2  -- ich bin nur hier sichtbar !!!
 +end
 +
 +k=nil  -- Hilfe ich werde gelöscht ;-(
 +
 +...
 +
 +===== Tabellen und Felder =====
 +
 +
 +Lua basiert in der Regel immer auf Tabellen (intern). Tabellen beinhalten beliebige Datenfelder und Inhalte. Lua kann also auch Funktionen in Tabellen speichern. Tabellen oder Felder haben nicht nur einen Zahlenindex zur Verwaltung, sonder es können auch beliebig Zeichen ketten als Index verwendet werden (assoziative Arrays).
 +
 +Tabelle anlegen:
 +
 +nxt = {}
 +
 +Einträge hinzufügen
 +
 +nxt.Bezeichner = Wert;
 +nxt.Funktionsaufruf = function ( parameter) ​
 +    CHUNK;
 +    end
 +
 +Cool näh ?
 +
 +
 +...
 +
 +===== Funktionen =====
 +
 +
 +Funktionen werden einfach mit dem reservierten Wort function und dem Funktionsnamen () bekannt gemacht. Rückgabewerte können mit dem Aufruf von return(Wert) an den Aufrufer der Funktion zurückgeliefert werden. Lua ist sogar in der Lage mehere Werte an den Aufrufer zurück zu liefern.
 +
 +function meine Funktion( Wert)
 +   ​return(Wert);​
 +end
 +
 +oder
 +
 +function meine Funktion( Wert)
 +   ​return(Wert1,​Wert2);​
 +end
 +
 +
 +...
 +
 +===== pbLuaSimulator =====
 + 
 +
 +{{nxtluasim.jpg?​300}}
 +
 +Nun aber ein einfaches Beispiel einer lokalen Simulation für den NXT mit pbLua:
 +
 +Die NXT Funktionen werden in einer Luatabelle/​Array (noch nicht die aus pbLua, kommt morgen) gespeichert.
 +
 +-- NXT specific table with functions --
 +
 +nxt={}
 +-- adding to table
 +
 +nxt.DisplaySetPixel = function (x,y)
 +     ​io.write("​Setze Punkt"​.. x y .. "​\n"​)
 +     ​sim.DisplaySetPixel( x,y )
 +end
 +nxt.DisplayClear = function ( x,y )
 +     ​io.write("​Lösche alle Punkte ".. x y .. "​\n"​)
 +     ​sim.DisplayClear( x,y )
 +end
 +nxt.DisplayClearPixel = function ( x,y )
 +     ​io.write("​Lösche Punkt"​.. x y .. "​\n"​)
 +     ​sim.DisplayClearPixel( x,y )
 +end
 +nxt.DisplayScroll = function ()
 +     ​io.write("​\n"​)
 +     ​sim.DisplayScroll()
 +end
 +nxt.DisplayText = function ( string )
 +     ​io.write( string)
 +     ​sim.DisplayText
 +end
 +
 +-- FakeOn()
 +
 +nxt.buttonsensor = function (port)
 +    return buttonvalue
 +end
 +nxt.soundsensor = function (port)
 +    return soundvalue
 +end
 +nxt.lightsensor = function (port)
 +    return lightvalue
 +end
 +nxt.ultrasonicsensor = function (port)
 +    return ultrasonicvalue
 +end
 +
 +
 +-- Hauptprogramm
 +while(true) do
 +-- loop forever
 +    nxt.DisplayText ("​BTS:"​ .. nxt.ultrasonicsensor(1) .. "​\n"​)
 +    nxt.DisplayText ("​SSS:"​ .. nxt.ultrasonicsensor(2) .. "​\n"​)
 +    nxt.DisplayText ("​LIS:"​ .. nxt.ultrasonicsensor(3) .. "​\n"​)
 +    nxt.DisplayText ("​USS:"​ .. nxt.ultrasonicsensor(4) .. "​\n"​)
 +end
 +
 +
  


pblua_nxt.txt · Zuletzt geändert: 2019/01/10 18:05 (Externe Bearbeitung)