Programme für Lego Mindstorms RCX erstellen

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Programme für Lego Mindstorms RCX erstellen

Beitrag von Batze »

So, ich habe eine Frage, und gebe mich der Hoffnung hin, dass schon mal jemand sich mit dem Thema befasst hat und deshalb Ahnung hat (oder auch einfach so Rat weiß).
Jedenfalls folgendes:
Habe mir damals - in Jugendlichem Leichtsinn - dieses LEGO-Mindstorms gekauft und mit der Software von Lego mehr oder Minder Erfolgreich rumgedoktort. Jetzt, da ich mein Zimmer nach 5 Jahren zum ersten mal wieder aufräume habe ich diesen wiederentdeckt.
Da ich über Internetrecherchen bereits herrausgefunden habe, dass man den auch einigermaßen professionell steuern kann, wollte ich fragen ob jemand weiß wie das geht. Am besten mit PB, was ich aber nicht wirklich für möglich halte.

Wer kennt sich damit aus?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

So wie es aussieht, ist es möglich wenn du die betreffende rcx.dll aus
folgende Seite herunter lädst.

http://www.gajdaw.pl/nmlt/software.html

hier der direktlink zur DLL, die auch unter Purebasci genutzt werden könnte.
http://www.gajdaw.pl/nmlt/zip/rcxdll_0_1.zip

Die Funktionen der DLL sind in der Beschreibung angegeben, welche du
manuell in PB erstellst, oder vielleicht mit ts-soft sein hübsches tool
"DLL2PBLib.exe" extrahierst und entsprechend der Beschreibung anpasst.
Beschreibung zur rcx.dll --> hat geschrieben:RCX.DLL Exported functions:

procedure RCXSetSerialPort(no:smallint);StdCall;
procedure RCXStart;StdCall;
procedure RCXStop;StdCall;

procedure RCXMotorOn(no:word);StdCall;
procedure RCXMotorOff(no:word);StdCall;

procedure RCXSetFwd(no:word);StdCall;
procedure RCXSetRwd(no:word);StdCall;
procedure RCXAlterDir(no:word);StdCall;

function RCXSensor1:word;StdCall;
function RCXSensor2:word;StdCall;
function RCXSensor3:word;StdCall;
Etwas vorarbeit habe ich schon mal gemacht. Nur nicht die Anpassung an
die Funktionen, da ich dieses nicht ohne Hardware in PB testen kann.
Aber das sollte nicht schwer sein.
Wenn alles korrekt läuft, kannst du mit Tailbite eine PB-Lib daraus
erzeugen.
erstellt mit tool von ts-soft hat geschrieben:; Source generiert durch DLL2PBLib
; Copyright 2005 by Thomas Schulz (TS-Soft)


; Globale Variablen deklaration
Global RCXAlterDir.l
Global RCXMotorOff.l
Global RCXMotorOn.l
Global RCXSensor1.l
Global RCXSensor2.l
Global RCXSensor3.l
Global RCXSetFwd.l
Global RCXSetRwd.l
Global RCXSetSerialPort.l
Global RCXStart.l
Global RCXStop.l

; Init-Funktion
ProcedureDLL rcx_Init()
Shared DLL.l
DLL = LoadLibrary_("rcx.dll")
If DLL
RCXAlterDir = GetProcAddress_(DLL, "RCXAlterDir")
RCXMotorOff = GetProcAddress_(DLL, "RCXMotorOff")
RCXMotorOn = GetProcAddress_(DLL, "RCXMotorOn")
RCXSensor1 = GetProcAddress_(DLL, "RCXSensor1")
RCXSensor2 = GetProcAddress_(DLL, "RCXSensor2")
RCXSensor3 = GetProcAddress_(DLL, "RCXSensor3")
RCXSetFwd = GetProcAddress_(DLL, "RCXSetFwd")
RCXSetRwd = GetProcAddress_(DLL, "RCXSetRwd")
RCXSetSerialPort = GetProcAddress_(DLL, "RCXSetSerialPort")
RCXStart = GetProcAddress_(DLL, "RCXStart")
RCXStop = GetProcAddress_(DLL, "RCXStop")
EndIf
EndProcedure
; End-Funktion
ProcedureDLL rcx_End()
Shared DLL.l
FreeLibrary_(DLL)
EndProcedure
; Allgemeine Funktionen
ProcedureDLL.l RCXAlterDir()
ProcedureReturn CallFunctionFast(RCXAlterDir)
EndProcedure

ProcedureDLL.l RCXMotorOff()
ProcedureReturn CallFunctionFast(RCXMotorOff)
EndProcedure

ProcedureDLL.l RCXMotorOn()
ProcedureReturn CallFunctionFast(RCXMotorOn)
EndProcedure

ProcedureDLL.l RCXSensor1()
ProcedureReturn CallFunctionFast(RCXSensor1)
EndProcedure

ProcedureDLL.l RCXSensor2()
ProcedureReturn CallFunctionFast(RCXSensor2)
EndProcedure

ProcedureDLL.l RCXSensor3()
ProcedureReturn CallFunctionFast(RCXSensor3)
EndProcedure

ProcedureDLL.l RCXSetFwd()
ProcedureReturn CallFunctionFast(RCXSetFwd)
EndProcedure

ProcedureDLL.l RCXSetRwd()
ProcedureReturn CallFunctionFast(RCXSetRwd)
EndProcedure

ProcedureDLL.l RCXSetSerialPort(a.l)
ProcedureReturn CallFunctionFast(RCXSetSerialPort,a)
EndProcedure

ProcedureDLL.l RCXStart()
ProcedureReturn CallFunctionFast(RCXStart)
EndProcedure

ProcedureDLL.l RCXStop()
ProcedureReturn CallFunctionFast(RCXStop)
EndProcedure
Ich hoffe ich konnte etwas dazu beitragen ;)

[Edit] Hier noch ein weiterer Link, wo all diese Infos herkommen und
sogar ein Delphibeispiel diese DLL ausführlich darstellt und sich leicht in
PB anpassen lässt. Dazu sollte man die einzelnen
procedure TForm1.Button3Click(Sender: TObject);
sich so vorstellen, als ob man z.B. mit Visualdesigner Buttons hergestellt hat und in den einzelnen If-Anweisungen oder Case-Anweisungen die Funktion hineinschreibt.
Oder gleich die einzelnen Funktionen in selbst gewählte Proceduren erstellen. [/Edit]




MfG Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ich probiers mal die Tage.
Vielen dank für die vielen Informationen.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

Für die Steuerung des RCX gibt's auch ein .NET Interface:
http://msdn.microsoft.com/coding4fun/lego/default.aspx
Antworten