Send byte/bits til parallelporten....
Jeg har via Java´s comm-API fået mulighed for at kommunikere med med min parallelport, men kan ikke helt få det til at virke.Jeg har en optokobler tilsluttet porten, og sat en diode på hvert data-ben (2-9), og ideen er at jeg ved at sende en defineret byte, kan tænde/slukke for hver enkelt diode uafhængig af de andre.
Det følgende program kan sende data til porten, og kan tænde/slukke for de 8 ben alt efter hvad der sendes af 1-taller og nuller.
Problemet er bare at jeg ikke kan sende data til porten hvis min optokobler er tilsluttet. Jeg kan heller ikke sende data til porten uden nogen printer tilsluttet, altså til en port uden noget tilsluttet.
Hvis jeg imidlertid sætter min printer(kun når den er tændt)til porten kan jeg se at der bliver sendt data, ved efterfølgende at flyttet printerkablet over på min optokobler, så tænder forskellige dioder alt efter hvad der er sendt til printeren. Programmet terminerer også korrekt ved printertilslutning.
Uden min printer når jeg ikke længere end til mit write(..)-statement i koden, så hænger programmet der og venter. Hvordan kan jeg sende en byte direkte til min optokobler uden at skulle sende til printeren først og derefter flytte kablet for at se hvilken byte der er sendt(det er lidt trivielt i længden)? Det er som om porten venter på et udefra kommende signal før den vil sende, men hvad er det printeren gør som min optokobler eller en "tom" port ikke gør.
Der fulgte et lille c++ program med optokobleren. Det kan tænde og slukke hver diode som jeg ønsker det, så det er ikke computeren/porten det er galt med. Jeg vil bare gerne have det til at virke med et java-program også.
import java.util.*;
import javax.comm.*;
import java.io.*;
class Start
{
public static void main(String args[])
{
// 1 byte/otte bits -> 1 = tændt 0 = slukket
String binNumber = ("11111111");
try
{
//fang LPT1 porten
CommPortIdentifier commId = CommPortIdentifier.getPortIdentifier("LPT1");
//hvem har porten nu
System.out.println("Owner of Port " + commId.getCurrentOwner());
//Snup porten til dig selv, åbn den, og lav den til et commport-objekt
ParallelPort parport = (ParallelPort)commId.open("My port", 1000);
//hvem har porten nu (dig selv forhåbentlig)
System.out.println("Owner of port " + commId.getCurrentOwner());
//lav en outstream du kan skrive til
OutputStream outstream = parport.getOutputStream();
//skriv en byte til din outstream
outstream.write(Integer.valueOf(binNumber, 2).intValue());
//tøm din outstream
outstream.flush();
//og luk den
outstream.close();
//luk din port igen
parport.close();
System.exit(0);
}
catch(NoSuchPortException e)
{System.out.println("NoSuchPortException");}
catch(PortInUseException e)
{System.out.println("PortInUseException");}
catch(IOException e)
{System.out.println("IOException");}
}//main
}//class
