Benutzer-Werkzeuge

Webseiten-Werkzeuge




pblua_nxt

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

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: 2015/01/31 21:50 (Externe Bearbeitung)