Port verwendung

Hallo liebe und vorallem coole Java Nutzer und java-forer,

ich möchte mal ein Programm schreiben um über einen Port (Parallel, Seriel, USB oder was auch immer) eine LED zu betreiben.

Ich kenne mich auf diesem Gebiet überhaupt nicht aus, habe mich aber mit google schon ein wenig umgeschaut. Alle Beispiele die ich fand waren einfach iwelcher Code den ich zwar so lesen(also lesen und wissen was passiert) konnte aber nicht wusste was das macht. Wenn ich versuche die Programme laufen zu lassen(ich arbeite unter eclipse) kamen immer iwelche fehler. aber okey das ist ja auch iwie verständlich da ich noch nicht einmal das Gerät dran habe (würde einfach zwei pins mit LED(3V, ca. 0,01A) verbinden, ggf. eine schaltung um die Spannung runter zu kurbeln und die Stromstärke zu setzen).

Ich hätte gerne einfach ein beispiel mit kleinen kommentaren was passieren soll und wie das Programm dann arbeitet.

An alle Antworter im voraus ein großes Danke:applaus:!

JI
 
hmmm,

das ist nich so einfach.

Es gibt ein package von Sun (jetzt: Oracle) unter der Name javax.comm damit kannst du serielle und parallele Schnittstellen oeffnen und daten austauschen. Wenn du das benutzen willst, dann muss du paar dll's (oder .so wenn du auf Linux bist) installieren.

Nach meiner Meinung das Beste ist wenn du fuer diesen LED einen fertigen C-API hast und eine Schnittstelle zwischen diesen API und Java mit hilfe von JNI schreibst.
 
Über Java Comm(onication) API habe ich auch schon gelesen. Genau das was du sagst habe ich auch so ähnlich wo anders gelesen. Leider habe ich keinen Plan wie ich eine C-API einbinde und was ich da nehmen sollte. Damit habe ich keinerlei Erfahrung. Ich bräuchte einfach code beispiele.

die comm api und rxtx habe ich mitlerweile eingebunden und auch dran versucht klapt aber einfach nciht.
 
dann es gibt nur eine einfache Loesung fuer dich:

Vergiss Java fuer 2 Stunden. Schreibe ein einfaches C-Programm, dass Operationen mit der seriellen Schnittstelle durchfuehrt, und erzeug ein ausfuhrbares programm davon ( z.B. .exe fuer Windows)

Das C programm soll ungefaehr so aussehen ( Linux )

Java:
(Das ist C-code)

int main ( )
{
    int fd;
    unsigned char[] befehl1 = { 0xFE, 0x02, ... } // angenohmen das  Befehl hat mehrere bytes als nur eins.

    fd = open("/dev/ttyS0"); // Fuer die 1ste serielle Schnittestell wenn du auf Linux bist. 
    write ( fd, befehl1 );     // siehe die Doku fuer die function 'write'
    close ( fd );
}


Wenn du auf Windows bist, dann google "c open serial port windows" und du kannst sehen wie du ein entsprechendes programm schreiben kannst.


und angenohmen das (C-)kompiliertes Programm heisst befehl1.exe dann kannst du diesen Programm innerhalb von Java aufrufen mit

Java:
Runtime.getRuntime.exec("befehl1.exe");

Lass uns wissen ob das hilf weiter, so dass wir dann die Einzelheiten sehen koennen.
 
Zuletzt bearbeitet:
und angenohmen das (C-)kompiliertes Programm heisst befehl1.exe dann kannst du diesen Programm innerhalb von Java aufrufen mit

Java:
Runtime.getRuntime.exec("befehl1.exe");
Oder du nutzt JNI, um das Programm anzusprechen. Aber was ist das Problem mit javax.comm? Soweit ich gehört habe, läuft das eigentlich ganz gut. Beim Start muss halt nur darauf geachtet werden, dass der JVM auch die Position der eventuell benötigten nativen Bibliotheken mitgeteilt wird.
 
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)

habe ich gerade bekommen und habe ich glaube ich auch schoneinmal bekommen!

sorry hätte ich selbst drauf kommen können.
 
Zuletzt bearbeitet:
okey den habe ich grade selber gelöst 😉

beim adden der RXTXcomm.jar muss man die native libary auch hinzufügen (damit die dll's eingebunden werden) Using RXTX In Eclipse - Rxtx

wie kann ich jetzt einen pin auf 1 setzen? was passiert wenn ich was in den outputstream reinhauen?
 
Zuletzt bearbeitet:
LEDs gibt es auch mit fertig eingebautem Widerstand, die kannst du direkt an 5V hängen und glücklich sein. Lässt sich dann am seriellen Port betreiben.

Für USB brauchst du natürlich ein USB-Gerät welches die LED dann an- und ausschaltet. Ist auch ganz einfach, wenn man z.B. ein Arduino-Board verwendet.
 
das ist ja gut und schön aber das möchte ich nicht wissen.
das ist sekundär. ich will wiessen wie ich auf einzelne pins saft (1) lege. dann können wir über sowas reden. hat iwer sowas schonmal gemacht. Ich bin auch dafür offen C oder ähnliches zu verwenden nur habe ich damit noch nicht programmiert und habe eigentlich auch keinen bock darauf jetzt mich damit nur wegen einer portansteuerung auseinander zu setzen
 
Die einzelnen Pins wirst du ehr nicht direkt ansteuern können aus Java, höchstens Steuerleitungen, könntest aber evtl. Erfolg haben, wenn du einen T-Flipflipflop dazwischen hängst und eine Steuerleitung schaltest. Aus C geht das schon ehr, ich meine zumindest sowas schonmal gelesen zu haben. Aber auch das ist nicht wirklich die feine Englische.

PS: Direkt vorkauen wird dir hier niemand etwas. Wenn du am seriellen Port etwas betreiben willst, dann solltest du dich schon selbständig mal einlesen wie der funktioniert, welche Leitungen dort hängen usw, dann ergibt sich das meiste von selbst.
 
Zuletzt bearbeitet:
Das ist der Primäre fehler! Ich bekomme einfach keinen byte gesendet!

IOExceptionjava.io.IOException: Das Gerät ist nicht angeschlossen.
in writeByte

Java:
try {port = CommPortIdentifier.getPortIdentifier(PARALLEL_PORT);
			parallelPort = (ParallelPort) port.open("LPT1", 50);
			outputStream = new DataOutputStream(parallelPort.getOutputStream());
			System.out.println("super");
			outputStream.write(255);
			outputStream.flush();
			outputStream.close();
		} catch (PortInUseException piue) {
			System.out.println("PORTException");
		} catch (IOException e) {
			System.out.println("IOException" +e);
		} catch (Exception e) {
			System.out.println("Exception" +e);
		}
 
Hi,

gib bitte hier Bescheid, wenn Du das mit dem parallelen Port hinbekommst, weil das hat bei mir noch nie funktioniert. K. A. ob das überhaupt schon implementiert ist.

Am seriellen Port kannst Du nur mit den Steuerleitungen vernünftig arbeiten, wenn Du eine LED mit Dauerstrom erzeugen willst. Das geht mit diesen Leitungen:

Java:
RXTXPort port = (RXTXPort) CommPortIdentifier.getPortIdentifier(...).open(...);

port.setRTS(true);
port.setDTR(true);

RTS und DTR sind die einzigen beiden Steuerleitungen des COM-Ports die Du direkt ansteuern kannst. Wo die liegen, am Besten hier nachforschen: RS-232 ? Wikipedia

Für mehrere LEDs empfehle ich trotzdem den LPT-Port, aber mit dieser lib hier: Parallel Printer Port Access through Java
(Einfaches C-Programm. Kann man sehr gut nachvollziehen).

Grüße
 

Zurück
Oben