# javax.comm und Parallele Schnittstelle (PIN für PIN)



## hever (13. Apr 2005)

Hallo zusammen,

Ich möchte über Java die Parallele Schnittstelle ansteuern.

Hierzu gibt es die Java Comm API:
http://java.sun.com/products/javacomm/index.jsp
http://java.sun.com/products/javacomm/javadocs/javax/comm/package-summary.html

(Diese API muss man sich erstmal herunterladen und installieren, steht alles in der Readme)


Zunächst habe ich die Parallele Schnittstelle gesucht und geöffnet:

```
/** Searches and opens the Parallel-Port
     *  -1 - Not sucessfully (No Port was found)   
     *  -2 - Not sucessfully (Port is already in use)
     *   1 - Port sucessfully opened
     *
     *  (Port name and some IO-Parameters could be implemented)
     */
    public int Open() {
        //Gets "all" Ports in a List of them
        m_PortList = CommPortIdentifier.getPortIdentifiers();
        
        //Browses iterates list of Ports
        while( m_PortList.hasMoreElements() ) {
            //Gets one Port
            m_PortId = (CommPortIdentifier) m_PortList.nextElement();
            
            //Checks if selected Port is the Parallel-Port
            if( m_PortId.getPortType() == CommPortIdentifier.PORT_PARALLEL ) {
                
                try {
                    //Tries to get ownership of the Parallel-Port and opens it
                    m_ParalellPort = (ParallelPort) m_PortId.open("ParallelPortControl", 5000);
                    m_ParalellPort.setMode(m_ParalellPort.LPT_MODE_SPP);
                } catch( PortInUseException e) {
                    //Port is in use
                    return -2;
                } catch (UnsupportedCommOperationException e) {
                    return -2;
                }
                
                //Port sucessfully opened
                return 1;
            }
        }
```

Wie man erkennen kann habe ich den Modus auf LPT_MODE_SPP gesetzt.

Mein Problem ist nun aber, wie kann ich einzelne PINS an der Schnittstelle 1 oder 0 setzen?

Mein erster Versuch ging in diese Richtung:



```
try {
    outputStream = m_ParalellPort.getOutputStream();
} catch (IOException e) {}

try {
    outputStream.write((byte) 1);
} catch (IOException e) {}
```

Aber das funktioniert nicht. Ich weiß auch nicht wirklich welche bytes ich senden muss um die jeweiligen PINS anzusprechen. Ich hab ein Messgerät an die Schnittstelle angeschlossen, und das zeigt immer 1 an, ich hab auch einmal in einer schleife alle möglichen integer übergeben, aber das hat auch nix gebracht.

Hoffentlich hat jemand von euch eine IDee...

Danke im Vorraus
-hever-


----------



## www (13. Apr 2005)

Hab keine Ahnung, 
mich interessiert nur, was steuerst du an mit
der Schnittstelle?
Gruß


----------



## hever (13. Apr 2005)

Hi,
ich möchte damit eine Ampelschaltung ansteuern. Ist ein Projekt für die FH.

Die Ampelsteuerung umfasst 4 Ampeln an einer Kreuzung.
2 Ampeln mit 6 LEDs für eine Hauptstraße
2 Ampeln mit 3 LEDs für eine Nebenstraße

Ich addressiere jede Ampel und jede LED sogesehen über einen Adressbus und setze den Zustand an oder aus.
Der Zustand wird dann mittels eines FlipFlops gespeichert.
(So komm ich mit den PINs hin) (Nebenbei gesagt bieten meine Elektrotechnik Kenntnisse auch derzeit nicht mehr . Ich möchts auch ganricht anders machen)

In Java werde ich dann eine Kreuzung simulieren, Verkehrsaufkommen, verschiedene Ampelphasen etc und die Schaltung gibt dann die jeweiligen zustände der Ampeln aus...

Jaa soo hab ich mir das gedacht 
Die Programmierung der Kreuzung wird einfach werden.
Problematisch ist aber zur Zeit halt nur diese doofe Parallele Schnittstelle. Ich muss es schaffen die Daten Pins einzeln anzusteuern.


----------



## klom (14. Apr 2005)

Also nur mit den normalen Mitteln des Java comm API ist es nicht möglich einzelne pins anzusteuern, weil es auf einer standardisierten Übertragung basiert. Allerdings gibt es verschiedene Projekte, die sich diesem Problem angenommen haben. Wenn jemand noch was anderes weiß, würd es mich auch interessieren!


----------



## L-ectron-X (14. Apr 2005)

Ohne eine entsprechende externe .dll-Datei wird das nicht funktionieren, da man mit Java nicht Hardware nah programmieren kann. Leider wurde die javax.comm-Api etwas halbherzig behandelt und bisher auch nicht weiterentwickelt, so dass solche Sachen in pure Java eben nicht möglich sind.


----------



## Grizzly (14. Apr 2005)

L-ectron-X hat gesagt.:
			
		

> [...]Leider wurde die javax.comm-Api etwas halbherzig behandelt und bisher auch nicht weiterentwickelt, so dass solche Sachen in pure Java eben nicht möglich sind.


_Bisher_ nicht weiterentwickelt ist ja noch nett ausgedrückt. Im Klartext: Das Teil ist einfach steinalt.


----------



## Stephan191 (14. Apr 2005)

Hallo!

Also wir haben mal nen LaserAbstandssensor über die COM-Schnittstelle laufen lassen und konnten dabei die verschiedenen Pins mehr oder weniger direkt ansprechen. Zum Beispiel:


```
serialport = setDTR(true);
```

"serialport" ist ein Objekt der Klasse SerialPort!

DTR,CTS,DSR usw sind die Bezeichnungen für die einzelnen Pins. Hoffe das hilft dir irgendwie weiter.

Gruß Stephan


----------



## hever (14. Apr 2005)

Hi, danke für die Antworten, ich habs jetzt ähnlich wie er hier gemacht:
http://www.geocities.com/Juanga69/parport/


Eigene DLL geschrieben und über JNI in Java eingebunden:
http://java.sun.com/docs/books/tutorial/native1.1/TOC.html

Klappt Prima...


----------

