SensorPorts des Mindstorms NXTs ausreizen

Der Mindstorms NXT hat vier SensorPorts. Jeder dieser SensorPorts hat zwei GND, ein 4,3v und drei weitere Pins. Zwei dieser Pins sind für I²C und der andere ist für das Auslesen von analogen Sensoren gedacht. Diese drei Pins kann man aber fast beliebig als Ein- und Ausgänge nutzen, das heißt man kann Motoren, Multiplexer usw. an die SensorPorts anschließen. Diese Tabelle aus dem Mindstorms Forum zeigt die Pinbelegung der SensorPorts (die Pins der MotorPorts sind auch in diesem Thread zu finden):

Pinbelegung von SensorPorts

Pinbelegung von SensorPorts

Die Programmierung ist eigentlich ganz einfach, wenn man weiß, wie. Ich habe ziemlich lange gebraucht die Methoden zu finden, aber bin schließlich beim Analysieren vom Sourcecode von SensorPort drauf gestoßen. Mir sind dabei die vielen Aufrufe von nativen Methoden aufgefallen. Wahrscheinlich werde ich bald darüber schreiben, wie man native Methoden für den Mindstorms schreiben kann. Aber nun zum Code:

SensorPins als Output

Nachdem man den SensorPort festgelegt hat

SensorPort sp = SensorPort.S1;

kann man die Pins 1, 5 und 6 als Ausgänge definieren

sp.setSensorPinMode(SensorPort.SP_DIGI0, SensorPort.SP_MODE_OUTPUT);
sp.setSensorPinMode(SensorPort.SP_DIGI1, SensorPort.SP_MODE_OUTPUT);
sp.setSensorPinMode(SensorPort.SP_ANA, SensorPort.SP_MODE_OUTPUT);

und auf HIGH oder LOW setzen.

//Pin1, Pin5, Pin6 auf HIGH setzen
sp.setSensorPin(SensorPort.SP_DIGI0, 1);
sp.setSensorPin(SensorPort.SP_DIGI1, 1);
sp.setSensorPin(SensorPort.SP_ANA, 1);
//Pin1, Pin5, Pin6 auf LOW setzen
sp.setSensorPin(SensorPort.SP_DIGI0, 0);
sp.setSensorPin(SensorPort.SP_DIGI1, 0);
sp.setSensorPin(SensorPort.SP_ANA, 0);

SensorPins als Input

Nachdem man den SensorPort festgelegt hat, kann man die Pins 1, 5 und 6 auch als Eingänge definieren:

sp.setSensorPinMode(SensorPort.SP_DIGI0, SensorPort.SP_MODE_INPUT);
sp.setSensorPinMode(SensorPort.SP_DIGI1, SensorPort.SP_MODE_INPUT);
sp.setSensorPinMode(SensorPort.SP_ANA, SensorPort.SP_MODE_INPUT);

Danach kann man mit getSensorPin() von diesen Pins digitale Daten lesen:

int pin5 =sp.getSensorPin(SensorPort.SP_DIGI0);
int pin6 = sp.getSensorPin(SensorPort.SP_DIGI1);
int pin1 = sp.getSensorPin(SensorPort.SP_ANA);

Von den Pins 1 und 6 (nicht 5!) kann man mit readSensorPin() analoge Daten lesen:

int pin6 = sp.readSensorPin(SensorPort.SP_DIGI1);
int pin1 = sp.readSensorPin(SensorPort.SP_ANA);

4 Gedanken zu „SensorPorts des Mindstorms NXTs ausreizen

  1. Pingback: Input Multiplexer für Arduino oder Mindstorms NXT | backsite

  2. Pingback: Lichtsensor aus Reflexkoppler CNY 70 | backsite

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s