Escrita na porta paralela usando RXTX para acender leds

13 respostas
R

Bom pessoal, eu estou testando a biblioteca RXTX para fazer a comunicação pela porta paralela. Meu objetivo
é acender e apagar leds com a escrita na porta. Antes de efetivamente ligar os leds, eu resolvi testar um código
fornecido na documentação da biblioteca (http://rxtx.qbang.org/wiki/index.php/Parallel_Communications).
Porém tive um problema, ao executar o código tenho a saída:

[i]Started test…
Stable Library

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7

port.portType = 2
port type = Parallel Port
port.name = LPT1
Write…

Printer Port LPT1 failed to write : IOException.
Exception:
java.io.IOException: O dispositivo não está conectado.
in writeArray

Closed all resources.[/i]

Leva em torno de 40s entre a mensagem “Write…” e a exceção lançada.

Vi em um post aqui no guj (http://www.guj.com.br/posts/list/17273.java) a dica do George Maria de
conectar o pino 11 em um dos terras e fiz essa conexão para ver se o problema se resolvia, mas para mim não
foi a solução.

Então, gostaria de saber se alguém já passou por esse problema e tem a solução.

Obs.: Já estou com a configuração inicial para usar a biblioteca feita. Segui o artigo do Petter Silva para isso
(http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6722). Outra observação é que
estou testando a comunicação no Windows XP.

13 Respostas

J

Bom dia,

Eu tenho um projeto semelhante, mas usando a porta serial. Verifique se a sua porta paralela está instalada corretamente, e também o seu circuito.
Seu circuito é microcontrolado?
Se for, verifique o firmware do micro, e se as instruções de comunicação estão corretas.

Se não, verifique os valores dos componentes(resistores, diodos…).

R

Bom juliocbq, eu não criei um circuito para fazer o teste ainda porque achei que funcionaria sem um e também porque
não vi alguma instrução nesse sentido na documentação como um “pré-requisito”. Para deixar mais claro, o que eu fiz
foi simples: fiz aquela configuração inicial para usar a biblioteca e executei o código (que citei no post anterior) que
escreve um dado na porta paralela. Depois de ter tentado algumas configurações para corrigir o problema, criei uma
conta aqui no GUJ para tirar minhas dúvidas. =D

juliocbq, o que você me disse me deixou com outra dúvida: é necessário criar algum circuito para fazer a comunicação?
Bom, enquanto isso, vou verificar se a porta paralela tá funcionando mesmo, porque pode ser que esteja com algum problema.

Obrigado!

P

VoCê consegui acender os leds ?

Se consegui e puder mandar o codigo.
Meu email é :
[email removido]

J

rherebia:
Bom juliocbq, eu não criei um circuito para fazer o teste ainda porque achei que funcionaria sem um e também porque
não vi alguma instrução nesse sentido na documentação como um “pré-requisito”. Para deixar mais claro, o que eu fiz
foi simples: fiz aquela configuração inicial para usar a biblioteca e executei o código (que citei no post anterior) que
escreve um dado na porta paralela. Depois de ter tentado algumas configurações para corrigir o problema, criei uma
conta aqui no GUJ para tirar minhas dúvidas. =D

juliocbq, o que você me disse me deixou com outra dúvida: é necessário criar algum circuito para fazer a comunicação?
Bom, enquanto isso, vou verificar se a porta paralela tá funcionando mesmo, porque pode ser que esteja com algum problema.

Obrigado!

Você pode simular a comunicação por software.
Para acender o led, você precisa criar um circuito, que é muito simples. Formados por diodos e resistores, com finalidade apenas de tratar a tensão e a corrente(No final, o led também é um diodo).

http://www.hhdsoftware.com/Products/home/serial-monitor.html

R

juliocbq, consegui fazer o teste da porta paralela com um programa chamado parmon.
Fiz a conexão na porta paralela do pino 2 a um resistor de 470 ohm (amarelo, violeta, marrom e dourado), depois a um led e em seguida ao pino 25, de volta
à porta paralela. Depois disso, executei o parmon e alterei o sinal do pino 2 de 0 para 1 e o led se acendeu!

Ou seja, minha porta paralela está funcionando, só por Java que ainda não… hehe

Outra coisa que eu fiz foi pegar mais detalhes da exceção lançada e está ai:

java.io.Exception: O dispositivo não está conectado.

in writeByte

at gnu.io.LPRPort.writeByte(Native Method)

at gnu.io.LPRPort$ParallelOutputStream.write(LPRPort.java:281)

at meu.pacote.MinhaClasse.main(MinhaClasse.java:linha_da_chamada_ao_write)

Alguma sugestão?

J

rherebia:
juliocbq, consegui fazer o teste da porta paralela com um programa chamado parmon.
Fiz a conexão na porta paralela do pino 2 a um resistor de 470 ohm (amarelo, violeta, marrom e dourado), depois a um led e em seguida ao pino 25, de volta
à porta paralela. Depois disso, executei o parmon e alterei o sinal do pino 2 de 0 para 1 e o led se acendeu!

Ou seja, minha porta paralela está funcionando, só por Java que ainda não… hehe

Outra coisa que eu fiz foi pegar mais detalhes da exceção lançada e está ai:

java.io.Exception: O dispositivo não está conectado.

in writeByte

at gnu.io.LPRPort.writeByte(Native Method)

at gnu.io.LPRPort$ParallelOutputStream.write(LPRPort.java:281)

at meu.pacote.MinhaClasse.main(MinhaClasse.java:linha_da_chamada_ao_write)

Alguma sugestão?

Bom dia, tem como vc postar o seu codigo, para eu poder depurar aqui?
Pode postar somente o código que escreve na porta paralela. Dessa maneira dá para visualizar melhor o problema.

R

Segue o código.

import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.ParallelPort;
import gnu.io.PortInUseException;

import java.io.IOException;
import java.io.OutputStream;

import sun.io.CharToByteConverter;

public class ParallelCommunication {

    private static OutputStream outputStream;;
    private static ParallelPort parallelPort;
    private static CommPortIdentifier port;

    // CONSTANTS
    public static final String PARALLEL_PORT = "LPT1";

    public static final String[] PORT_TYPE = { "Serial Port", "Parallel Port" };

    public static void main(String[] args) {

        System.out.println("Started test....");

        try {
            // get the parallel port connected to the printer
            port = CommPortIdentifier.getPortIdentifier(PARALLEL_PORT);

            System.out.println("\nport.portType = " + port.getPortType());
            System.out.println("port type = "
                    + PORT_TYPE[port.getPortType() - 1]);
            System.out.println("port.name = " + port.getName());

            // open the parallel port -- open(App name, timeout)
            parallelPort = (ParallelPort) port.open("CommTest", 100);
            outputStream = parallelPort.getOutputStream();

            System.out.println("Write...");
            outputStream.write(128);
            System.out.println("Flush...");
            outputStream.flush();
            System.out.println("Close...");
            outputStream.close();

        } catch (NoSuchPortException nspe) {
            System.out.println("\nPrinter Port LPT1 not found : "
                    + "NoSuchPortException.\nException:\n" + nspe + "\n");
        } catch (PortInUseException piue) {
            System.out.println("\nPrinter Port LPT1 is in use : "
                    + "PortInUseException.\nException:\n" + piue + "\n");
        }
        /*
         * catch (UnsupportedCommOperationException usce) {
         * System.out.println("\nPrinter Port LPT1 fail to write :
         * UnsupportedCommException.\nException:\n" + usce + "\n"); }
         */
        catch (IOException ioe) {
            System.out.println("\nPrinter Port LPT1 failed to write : "
                    + "IOException.\nException:\n" + ioe + "\n");
            ioe.printStackTrace();
        } catch (Exception e) {
            System.out
                    .println("\nFailed to open Printer Port LPT1 with exeception : "
                            + e + "\n");
        } finally {
            if (port != null && port.isCurrentlyOwned()) {
                parallelPort.close();
            }

            System.out.println("Closed all resources.\n");
        }
    }
}
J

Eu testei aqui e tive o mesmo problema. Procurei no google, e existem mais pessoas com o mesmo problema. Dizem que é um bug no jni da porta paralela.

Testei aqui com a serial e funcionou.

Porque você não usa a porta serial para acender o led?

R

Fazer a comunicação pela porta serial seria o próximo passo. :slight_smile:

Mesmo assim, você poderia me dar algumas dicas de tutoriais que deram certo, de implementações, problemas
a enfrentar e como fazer testes com a serial (loopback)? Como ainda não fui a fundo na comunicação serial
ainda não posso fazer uma pergunta mais específica.

Enquanto isso, vou tentando uma implementação do acesso a porta paralela com JNI.

J

Você vai precisar simplesmente conectar o vcd do led no pino DTR da porta serial, e o outro, no terra.
Use o hdd free serial port para simular e ver os dados.

http://www.soft32.com/download_104595.html

Vou procurar um datasheet da porta serial e te enviar.

B

Bom dia JULIOCBQ, Iniciei um projetinho relacionado a leds mas com a comunicaçao porta SERIAL, se vc tiver os comandos em java e poder me disponibiliza-los ficarei muitissimo grato.
se vc puder me enviar [email removido] ou se quiser postar aki tambem…

grato por tua atençao.

L

Oi queria muita ajuda…
não tenho muita experiência,
estou trabalhando com este código,
mas tenho o seguinte erro ,

Console:

Started test....
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7

port.portType = 2
port type = Parallel Port
port.name = LPT1
Write...

Printer Port LPT1 failed to write : IOException.
Exception:
java.io.IOException: A operação foi concluída com êxito.
 in writeByte

java.io.IOException: A operação foi concluída com êxito.
 in writeByte
	at gnu.io.LPRPort.writeByte(Native Method)
	at gnu.io.LPRPort$ParallelOutputStream.write(LPRPort.java:281)
	at teste.main(teste.java:40)
Closed all resources.

Meu circuito de led esta funcionando ok, pois estou testando com , Relais Timer
um programinha acende e apaga os leds, e funciona tranquilo.
Estou estundo a algumas semanas, e estou usando rxtx também
se puderem me ajudar, fico muito gratoo.

abraços.

G

Olá, pessoal, sou novo aqui no fórum e passei pra dar uma ideia…
estou desenvolvendo um projeto com a porta paralela, mas estou usando a biblioteca parport… fica bem mais simples…
ainda esta dando uns erros, mas de forma geral funciona bem, ainda não achei de onde vem os erros…
quanto ao circuito, é muito simples, nem precisa de microcontrolador nem nada… se for só leds, eu liguei direto no conector do cabo e uni todos os gnd’s num unico fio…
se for pra acionar motores ou lampadas, precisa usar reles e transistores, dai procura o esquema no site do rogercom …
a minha ideia é fazer isso no linux, mas ainda não testei…
abçs

Criado 15 de outubro de 2009
Ultima resposta 14 de set. de 2010
Respostas 13
Participantes 6