Eletrônica & Porta Paralela & Java 14 Jan 2007 16:48

Protótipo usando Porta Parelela, Leds e Java

Vi que seria muito complicado fazer algum tipo de placa que interpretasse o que a porta serial manda, pois teria que ter um controle muito minuscioso. Com isso, fui estudar a porta paralela, que durante algum estudo, notei que é uma comunicação de 8 bits.

A porta paralela possui 25 pinos. 8 deles, são usados para representar 8 bits de 1 byte. Numa única comunicação, o programa conseguirá escrever um byte inteiro. Então pesquisei um pouco mais sobre a parte física, e descobri que são liberados 5 volts de tensão em cada pino desses 8, dependendo do valor que se queira escrever. A grosso modo, medindo-se a tensão de cada pino desses, os que conterem 5 V, representam o bit 1, e vice-versa. Tive a idéia de montar uma caixinha, com 8 leds, parar mostrar o byte que eu enviei pela porta da impressora.

Segue uma foto explicando a arquitetura da porta paralela retirada do site RogerCom.

Porta Paralela

Estudei também, se esses 5 volts que saem dos pinos D0 -> D7 são o suficientes ou se não são demais para acender um led. Um led precisa de uns 2 volts para acender. Por isso, usei um resistor de 390 Ohms ligado em série com o led. No site do Clube do Hardware tem um projeto “Construindo Protótipos usando a Porta Paralela” com a mesma idéia do que apresento aqui.
A placa pronta, com cada Dx ligada a um resistor de 390 Ohms e ao led, com a outra perna dos leds ligadas ao terra da porta, só faltava fazer um programinha p/ testar.

Essa era a próxima dificuldade. Fui pelo Google atrás de como escrever na porta paralela pelo Java, e só achava com C. Até que encontrei a biblioteca Parport, que segundo o tutorial, realizava essa tarefa. Apesar de ser uma classe em Java, ele acessa métodos nativos, que executam funções em C para a escrita. Tive problemas porque nunca funcionava nos meus teste. Então dei mais uma pesquisada, e encontrei um artigo falando que o Windows XP (no caso o meu SO) não aceita acesso direto à porta paralela, tive que usar um programa chamado UserPort para poder testar meu aplicativo. Depois funcionou perfeitamente e vi os leds ascenderem na ordem em que eu escrevia no meu programa.

Uma coisa que não podemos esquecer, é q a parport trabalha com DLL, é necessário colocá-la no diretório BIN de sua JRE e JDK e pronto. Para usar o programa que permite acesso direto a porta, é necessário copiar o arquivo UserPort.sys no diretório C:\Windows\system32\Drivers, logo após, é só executar UserPort.exe. Não se preocupe, todos os downloads vêem com instruções de uso.

Tem uma classe java que já acompanha, que é a parport.ParallelPort. no meu fonte, apenas precisei instanciar essa classe passando o endereço da porta, e depois chamar o método write. Segue:

package com.rafaelquines.portaparalela;
import parport.ParallelPort;
public class Main {
    public static void main(String[] args) {
        //Acessa endereço da porta.
        ParallelPort porta=new ParallelPort(0x378);
        for(int i=0; i < 9; i++) {
            int valor = 0;
            if(i == 0) {
                valor = 1;
            } else if(i == 1) {
                valor = 2;
            } else if(i == 2) {
                valor = 4;
            } else if(i == 3) {
                valor = 8;
            } else if(i == 4) {
                valor = 16;
            } else if(i == 5) {
                valor = 32;
            } else if(i == 6) {
                valor = 64;
            } else if(i == 7) {
                valor = 128;
            } else if(i == 8) {
                valor = 255;
            }
            porta.write(valor);
            try {
                Thread.sleep(500);
            } catch (Exception e) {}
        }
        try {
            Thread.sleep(1000);
        } catch (Exception e) {}
        porta.write(0);
        System.out.println("Foi");
    }
}

Compare Preços de: placa, leds, relés, automação, java

Adicione ao del.icio.us

89 Respostas para “Protótipo usando Porta Parelela, Leds e Java”

  1. em 23 Jan 2007 as 4:07 pm 1.Edson disse …

    bom dia! saudações e parabens pela publicação, estou com problemas para instanciar a classe paralledport, preciso colocar algum .jar em algum lugar? obrigado!

  2. em 23 Jan 2007 as 4:19 pm 2.Rafael Quines disse …

    Seguinte, quando você baixa o zip da parport, ela vem com um diretorio parport, que dentro, tem um classe java ParallelPort.java. Você tem 2 opções, ou coloca esse .java dentro do seu projeto, podendo instanciá-la a qq momento, ou entao pode gerar um jar só com essa classe, e importar esse mesmo jar no seu projeto. É necessário colocar a DLL da parport nos diretorios “bin” de sua JDK e sua JRE. Além dessas configurações, caso use Win XP, será necessário tb usar a UserPort, cujo link está no POST, para habilitar o acesso direto à porta paralela, coisa que não é permitido pela segurança do sistema operacional.

    Obrigado. t+

  3. em 24 Jan 2007 as 9:45 am 3.Fabiano disse …

    Rafael,

    Vi alguns posts seu em uma lista de discussão sobre conexão por sockets em celulares com JAVA. Desenvolvi uma aplicação que funciona direito no emulador do netbeans, transmitindo e recebendo dados do servidor via socket sem problema, mas quando carrego a aplicação em um celular não tem jeito de funcionar. Simplesmente não comunica, mas não apresenta erro nenhum. Você chegou a fazer sua aplicação funcionar em um celular ???

    Obrigado por sua atenção .

  4. em 25 Jan 2007 as 3:33 am 4.Rafael Quines disse …

    Kra, é o seguinte. Realmente fiz isso, e funcionou. Trabalho há uns 2 anos com desenvolvimento pra celular, e desse tempo, tirei uma coisa boa, opinião minha: Siemens é o melhor. Sempre que testo meus aplicativos em Siemens funciona blz. Por exemplo, nunca consegui faz um programa J2Me conectar na internet a partir de um motorola. Motorola normalmente é todo bloqueado. Nokia foi tranquilo tb. Qual celular que você está testando? Aconselho baixar os emuladores da Siemens, onde testo meus jad/jar e depois disso é que baixo pro celular. Eles oferecem emuladores idênticos ao aparelhos.. Qq ajuda, só falar ae.. Flw

  5. em 29 Jan 2007 as 6:47 am 5.Eiti Kimura disse …

    Olá, gostaria de saber como configurar o userport, quais portas você adicionou para funcionar com o exemplo você mostrou no POST? E como saber se o parport está instalado corretamente? Estou com erro quando executo seu programa:

    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    # EXCEPTION_PRIV_INSTRUCTION (0xc0000096) at pc=0×003f107b, pid=2628, tid=3660
    #
    # Java VM: Java HotSpot(TM) Client VM (1.4.2_09-b05 mixed mode)
    # Problematic frame:
    # C [parport.dll+0×107b]

    Sabe se esse problema é referente ao parport ou ao userport?? Estou trabalhando no win XP service pack1 com java 1.4.2_09.

    Abraço,

  6. em 29 Jan 2007 as 7:10 am 6.Rafael Quines disse …

    Kra, tive esse problema antes de conhecer o UserPort. Foi depois deste problema que fui atras do desbloqueio da porta paralela. Ve se tá certo o arquivo UserPort.sys lá no diretorio Drivers dentro de system32. Te liga, tem que dar a permissão da 0×378 nas duas janelas do programinha.. Qq problema só falar ae.. t+

  7. em 29 Jan 2007 as 9:56 am 7.Eiti Kimura disse …

    Opa Rafael,
    Coloquei o UserPort.sys no drivers do system32, e adicionei as portas de 0×378-0×380 nas duas janelas do UserPort, dei um start e o driver parece carregar , pelo menos o programa não dá mensagem de erro. No entanto, quando tento executar o programa java tenho ainda a mesma mensagem de erro. Parece que ou o UserPort não está funcionando ou o Parport está com problemas, não consigo identificar aonde está o problema. Você deixa as opções de portas que vém por padrão do UserPort habilitadas?
    Alguma sugestão? Estou com winXP service pack 1 e java 1.4.2_09. Como indicado no manual descompactei o parport em c:\jsdk1.4.2_09 e coloquei a pasta no classpath, coloquei a dll parport.dll no bin do jsdk do jre e do jre do arquivo de programas conforme indicado. O que parece é que o java não entende que o UserPort está rodando???

    Alguma dica?

    Obrigado,

  8. em 29 Jan 2007 as 11:50 am 8.Rafael Quines disse …

    Kra, você está logado como Administrador da máquina? Por favor, faça este teste. Isso não é configuração da parport nao. Eu deixo as portas que já estão no UserPort. Faça um teste tb, deixa o UserPort aberto enquanto vc roda sua aplicação java. Aliás, vc ligou algo na porta paralela para ver se o valor está sendo escrito certo???

    flw

  9. em 05 Feb 2007 as 2:14 pm 9.Edson disse …

    ola Rafael, desculpa a insistencia, mas instalei o parport e a user port no meu pc corretamente, mas toda a vez q vou compilar uma classe que use o parallelport, tentei ate msm com o exemplo SimpleIO.java, esta aparecendo a mensagem: “java.lang.UnsatisfiedLinkError: readOneByte” jah quebrei a cabeça, o estranho q tenho um sistema delphi q usa a porta paralela e ele acessa normalmente, o que pode ser?

  10. em 05 Feb 2007 as 2:24 pm 10.Rafael Quines disse …

    Kra, com certeza, o erro UnsatisfiedLinkError quer dizer que o programa não encontrou sua DLL. Lembrando sempre, a DLL parport.dll deve estart no diretório bin de sua JRE. na dúvida, coloque em todos os seguntes diretórios:
    $JDK/bin/parport.dll
    $JDK/jre/bin/parport.dll
    $JRE/bin/parport.dll

    Fazendo isso, é impossível não funcionar. O único erro que pode acontecer é da permissão na porta, aí deve seguir os passos da UserPort.

    Não pense duas vezes antes de perguntar. A insistência é uma qualidade, não é um defeito.
    T+.

  11. em 14 Feb 2007 as 8:48 pm 11.Paulo Vinicius disse …

    Cara eu não tenho nem como te agradecer depois de quebra a cabeça 10000000lhões de vezes vc foi a luz…
    finalmente essa “ONDA” rodou…. Muito Obrigado….

  12. em 15 Feb 2007 as 3:30 am 12.Rafael Quines disse …

    Onde que estava sendo tua dificuldade? Estou planejando re-postar esse artigo com fotos e explicações mais detalhadas, até com melhores explicações. O sua dificuldade pode ser a de muitos. O que aconteceu?

    Valeu.

  13. em 23 Feb 2007 as 1:50 pm 13.Bruno disse …

    olá, o meu net beans naum aceita o simbolo × o que tem de erado?

  14. em 23 Feb 2007 as 5:03 pm 14.Rafael Quines disse …

    Amigo, talvez na hora de copiar pro blog, ratiei. Mas no Java, como no PHP e em outras linguagens, a letra ‘x’ é usada para informar que se trata de um número em HEXADECIMAL entendeu? 0xFF, 0xFE, etc…

    Qualquer outra dúvida, é só postar.

    Valeu. Flw

  15. em 07 Mar 2007 as 4:17 am 15.Xará disse …

    Oi Rafael;
    fiz tudo isso e acho que estou com problema com a maquina virtual. Pelo App em java, parece que não termina o uso da maquina virtual. Então, a primeira vez que eu executo o App ele funciona de acordo com um programa de monitaramento da porta paralela, mas ao roda novamente, ele da um erro e diz que a biblioteca ja esta sendo usada. Pode me ajudar!? Acredito que me problema seja mais com o java. Qualquer ajuda é válida!
    O SO é o WinXP. Eu estava usando um editor ruim de java, mas agora ja passei para o NEtBeans, mas persiste o problemas.

    R. Sadao

  16. em 07 Mar 2007 as 5:30 am 16.Rafael Quines disse …

    Kra, de repente esse seu programa de monitoramento da porta paralela pode estar “ocupando” a porta, não permitindo assim a escrita pelo Java. Você tá usando a UserPort ??? Poderia passar o seu fonte? ou apenas copiou do blog? Qual o erro exatamente que acontece??

    Ah, outra coisa. Use Eclipse cara…
    Valeu. Flw…

  17. em 17 May 2007 as 1:39 pm 17.Tom disse …

    Olá Rafael, tudo joia?!
    Cara primeiramente, meus parabens pelo post muito bom msm!
    Segundo, você já se deparou com este erro?

    http://img78.imageshack.us/img78/684/imagemct1.jpg

    o meu parport.dll já se encontra em todos os diretorios:
    $JDK/bin/parport.dll
    $JDK/jre/bin/parport.dll
    $JRE/bin/parport.dll

    Desde já agradeço!!

    p.s.: O meu UserPort esta configurado conforme é mostrado na imagem!!

  18. em 26 May 2007 as 8:51 pm 18.Bruno disse …

    oi, eu gostaria de saber o que eu faço, pois quando eu ligo o meu pc ele ja seta bits na porta paralela e o led que eu tenho nela ja fica ligado…. eu tenho que mecher na bios?

  19. em 27 May 2007 as 10:09 am 19.Rafael Quines disse …

    RESPOSTA PARA TOM

    Olá Tom. Pois é, já tive esse erro sim. Mas é meio sem explicação. Isso é um erro que a parport causa, porém, pra mim, as vezes funciona normalmente, mas as vezes dá esse mesmo erro. Nunca consegui resolver esse problema. Se descolbrir algo, seria legal que postasse aqui. Ultimamente não tenho conseguido mexer mto nisso..

    Valeu e Obrigado.

    T+

  20. em 27 May 2007 as 10:11 am 20.Rafael Quines disse …

    RESPOSTA PARA BRUNO

    Olá Bruno.

    Seguinte, não precisa mexer na BIOS. Apenas via software, mande desligar. É por padrão do Windows alguns bits virem ligados já

    Valeu

  21. em 28 May 2007 as 4:37 am 21.Gustavo disse …

    Olá Rafael.

    Então eu também estou com problemas para usar o parport. To usando ele em uma aplicação web e ele ta dando o seguinte erro:

    28/05/2007 08:37:13 org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet esteiraAdm threw exception
    java.lang.UnsatisfiedLinkError: br.com.hdn.util.ParallelPort.writeOneByte(II)V

    Eu achei que poderia ser algo relacionado ao tomcat mas o SimpleIO.java ta dando o msmo problema. E eu ja coloquei o parport.dll em todos os diretorios do java. Nossa cara to quebrando a cabeça aqui. Ja tentei usar as bibliotecas JavaComm e a RXTX mas sem sucesso também.

    Já Agradeço.

  22. em 28 May 2007 as 4:54 am 22.Rafael Quines disse …

    Kra, esse erro acontece quando não conseguiu encontrar a DLL. tenta colocar a DLL no diretório BIN do tomcat. tenta aí.

    Flw

  23. em 28 May 2007 as 5:51 am 23.Gustavo disse …

    Então cara eu tentei isso e não deu certo também.
    O estranho é que por exemplo quando to com o tomcat ligado eu não consigo sobrescrever a dll porque eles está em uso. E o erro ele ta dando no read e no write. Então parece que ele ta encontrando ela. E nem o SimpleIO roda. Eu não sei o que pode ser. Hoje a tarde vou testar em outra maquina.

  24. em 29 May 2007 as 8:59 am 24.Gustavo disse …

    Olá Rafael, boa tarde.
    Então no fim consegui resolver o problema utilizando o parport como jar. Mas agora minha duvida eh a seguinte: Hoje fui testar com o equipamento, não funcionou mas parece ser problema do equipamento. Mas nos medimos a voltagem das portas. Tipo as portas de saida e controle estavamo mandado 5v. Como q seria o funcionamento. Eu passo como parametro da função de envio um nume inteiro com o valor de bits da porta. Seria por exemplo 1,2,4,8,16,32,64,128. É assim de se deve mandar msmo??
    De ante mão agradeço.
    Falow

  25. em 10 Jul 2007 as 12:16 pm 25.Rodrigo Pinheiro disse …

    Rafael, primeiramente parabens pelo tutorial, foi de grande ajuda.

    Eu estou tendo o mesmo erro que o TOM, queria saber se vc ja conseguiu saber qual era o problema. Muito obrigado.

  26. em 13 Jul 2007 as 7:32 am 26.Hélio Monteiro disse …

    Olá Rafael!Primeiramente parabéns pela publicação.Rafael estou com uns problemas e então não estou conseguindo fazer funcionar se vc pude me ajudar ficarei muito agradecido desde já. Estarei mostrando o que eu fiz.
    *******************************************************
    Aqui eu coloquei o arquivo que descompactei dentro do projeto ParallePort.java junto com a Main e então eu deixei como comentário o package e o import.Foram as únicas mudanças que fiz.
    ********************************************************

    //package com.rafaelquines.portaparalela;
    //import parport.ParallelPort;

    public class Main {
    public static void main(String args[])
    {
    ParallelPort porta=new ParallelPort(0×378); //Acessa registro de dados.
    ********************************************************
    Este é o erro que aparece.
    ********************************************************
    Exception in thread “main” java.lang.UnsatisfiedLinkError: ParallelPort.writeOneByte(II)V
    at ParallelPort.writeOneByte(Native Method)
    at ParallelPort.write(ParallelPort.java:60)
    at Main.main(Main.java:42)
    Java Result: 1

    ********************************************************
    Aqui eu coloquei o arquivo parport.dll nos seguintes diretórios.
    ********************************************************
    parport.dll

    C:\Arquivos de programas\Java\jdk1.6.0\bin
    C:\Arquivos de programas\Java\jdk1.6.0\jre\bin
    C:\Arquivos de programas\Java\jre1.6.0\bin

    ********************************************************
    Aqui eu coloquei o UsePort.sys e executei o Useport.exe
    ********************************************************
    C:\WINDOWS\system32\drivers
    UsePort.sys
    UsePort.exe

    ********************************************************

  27. em 19 Jul 2007 as 5:24 pm 27.Rafael Quines disse …

    Para Rodrigo Pinheiro.

    Olá Rodrigo, infelizmente não consegui resolver. É um grande problema esses software as vezes funcionarem e outras não. o ideal seria tratar exceptions e gerenciar em nro de tentativas..

    Flw

  28. em 19 Jul 2007 as 5:27 pm 28.Rafael Quines disse …

    Para Hélio Monteiro

    Amigo, o erro “java.lang.UnsatisfiedLinkError” quer dizer q o java não encontrou a DLL. Vc colocou nos diretórios corretos, porém, dê uma olhada nas configurações do seu Eclipse (ou outra IDE que use) para saber ql Java exatamente está usando para compilar/executar seu programa.

    As vezes acontece de por padrão, as IDEs identificam automaticamente um JAVA que esteja lá em Arquivos de programas e talz. Acho muito provável que seja isso…

    Qq dúvida, estarei a disposição..

    Valeu. Flw

  29. em 19 Jul 2007 as 5:28 pm 29.Rafael Quines disse …

    Para Gustavo

    Desculpe a demora para responder..

    Mas você está certo. deve mandar o valor referente ao bits, 1, 2, 4, 8, … Isso liberará os 5 V nos pinos referente a cada Bit..

    Ah, e poderia compartilhar conosco a solução para a comm.jar funcionar normalmente no tomcat?

    obrigado

    Flw

  30. em 23 Aug 2007 as 9:02 am 30.Tiago - VikinG disse …

    Eu estava tendo o seguinte problema:

    *********************************************
    Exception in thread “main” java.lang.UnsatisfiedLinkError: ParallelPort.writeOneByte(II)V
    at ParallelPort.writeOneByte(Native Method)
    at ParallelPort.write(ParallelPort.java:60)
    at Main.main(Main.java:42)
    Java Result: 1
    *********************************************

    Este problema estava acontecendo exatamente por eu não havia criado um pacote chamado: parport

    Foi só criar o pacote e colocar a classe ParallelPort lá dentro que corrigiu o problema.

    Tbm há a possibilidade de criar um jar, mas mantendo o nome do pacote.

  31. em 23 Aug 2007 as 10:30 am 31.Rafael Quines disse …

    Olá. Mto obrigado pelo seu comentário..

    Uma coisa que já aprendi, é que esses erros que dizem “UnsatisfiedLinkError”, significa que falta a DLL. Ou a dll não está no lugar certo, os pacotes da parport não estão no projeto.. Significa coisas faltando. hehe..

    Valeu..

    flw

  32. em 25 Sep 2007 as 12:00 pm 32.Cedeia disse …

    Estou enfrentando um grande problema para acessar a porta paralela com java, eu precisava controlar motores de passo mas ainda não descobrir como mandar pulsos para os pinos.Que comando devo utilizar????/Se alguem puder me ajudar desde ja eu agradeço.

  33. em 26 Sep 2007 as 3:28 am 33.Rafael Quines disse …

    Amigo, tem o código em Java aí nesse post… Que dificuldade vc está tendo? Obrigado

  34. em 04 Oct 2007 as 2:12 pm 34.giovanni facholli disse …

    bleza rafael???bom dei uma olhada nesse seu projeto e esse realmente se encaixa no que vou fazer…te mandei umas perguntas no outro topico…”batendo reles pela porta paralela”…mas acho esse aqui mais especifico para o que estou fazendo…o codigo fonte é esse aí que tu disponibilizou aí em cima???tu tem msn pra gente trocar uma ideia sobre esse projeto???

  35. em 05 Oct 2007 as 11:53 am 35.Tom disse …

    Olá Rafael, blz velho?!

    Man consegui supri aquele erro[ http://img78.imageshack.us/img78/684/imagemct1.jpg ] atravéz de uma “modificação” do [i]inpout32.dll[/i].

    Segue o link:
    [i]http://www.hytherion.com/beattidp/comput/pport.htm[/i]

    Testei e funfou que foi uma blz sem nenhuma ressalva.
    O ruim é que ele se utiliza de uma nova sintaxe para a cominicação paralela( diferente da usade neste seu exmplo), mas dando um simples olhada no [i]sample[/i] dar-se para ter uma ideia de como trabalhar.

    Vlw,
    espero ter contribuido!
    [8)]

  36. em 05 Oct 2007 as 12:43 pm 36.Rafael Quines disse …

    Po kra, mto obrigado. Com certeza contribuiu mto.. Valeu. Flw

  37. em 18 Oct 2007 as 7:59 am 37.carlos neto disse …

    Olá galera.

    Eu estava tendo o mesmo problema de “UnsatisfiedLinkError”. Entretanto, contornei o problema com a solução do tiago, criar um pacote parport.

    Agora, surgiu outro problema, este mais árduo ainda. Segue a mensagem de erro:

    #
    # An unexpected error has been detected by Java Runtime Environment:
    #
    # EXCEPTION_PRIV_INSTRUCTION (0xc0000096) at pc=0×0371107b, pid=3796, tid=1088
    #
    # Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
    # Problematic frame:
    # C [parport.dll+0×107b]
    #
    # An error report file with more information is saved as hs_err_pid3796.log
    #
    # If you would like to submit a bug report, please visit:
    # http://java.sun.com/webapps/bugreport/crash.jsp

    Estou usando o windowsXP com o jdk 1.6.03

    []’s

  38. em 18 Oct 2007 as 5:49 pm 38.Rafael Quines disse …

    Bah, blz. Mto Obrigado pelo seu relato. Parece que tem uma série de pessoas com esse mesmo problema…

    Valeu. T+

  39. em 24 Oct 2007 as 6:30 pm 39.Luiz Augusto disse …

    Blz Rafael? bixo, estou desenvolvendo um protótipo de um robô escavadeira. A idéia é: controlá-lo pela porta paralela do PC. a sua idéia caiu como uma luva para o meu projeto só q ainda sou um pouco leigo nessa parte de linguagem de programação em java. me recomendaram usar a linguagem C q seria mais fácil e me ofereceram o “TurboC”. conhece? pois é estou treinando nele e gostaria que se vc pudesse me dar umas dicas nesse programa. Eu ainda baixei os arquivos”paralledport e o userport” e vi os exemplo do joystick seria interessante se pudesse me ajudar “traduzindo” akele exemplo para C. ou melhor, se tiver algum material para eu poder destrinchar melhor o java e assim embalaria no meu projeto de vez em java msm, se kiser posso mandar umas fotos da parte estrutural dele… Basicamente o robo sera controlado via rádio: a placa emissora estará conectada à porta e a receptora no robo e a idéia é controlálo pelo teclado.então kra conto com a sua ajuda….obg

  40. em 29 Oct 2007 as 6:25 am 40.giovanni facholli disse …

    rafael…postei no seu outro link…e agora me surgiu mais uma duvida…para usar o userport…quando executo ele dentro do windows/system32/drivers…tenho que colocar 0×378 nas duas janelas???e 0×380??? se puder me explica isso direitinho?????valeu velho

  41. em 29 Oct 2007 as 7:04 am 41.Rafael Quines disse …

    kra, nao é 0×380. é o “0x” quer dizer que é em hexa. Então, o numero que vem após o 0×379 é 0 0×37A.
    coloca nos dois lados, 0×378-0×37A e do outro lado, a mesma coisa..

    flw

  42. em 07 Nov 2007 as 7:37 am 42.giovanni facholli disse …

    rafael…tu pode me esclarecer uma duvida…é que preciso dos endereços…para setar os leds e para receber dados pela porta paralela…é o seguinte:

    vou acender e apagar 4 leds conectados nos pinos 2, 3, 4 e 5 da porta paralela…o endereços das portas para acionar esses leds é o 0×378???

    tambem vou receber dados pela porta paralela…atraves de um sensor conectado ao pino 10 da porta paralela…que é o pino aknowledge…o endereço que utilizarei é o endereço 0×379???

    estou correto nessas colocações???

  43. em 26 Nov 2007 as 3:35 pm 43.giovanni facholli disse …

    boa noite…cara me fala uma coisinha…esse seu software…ele acende e apaga um led???

  44. em 26 Nov 2007 as 5:57 pm 44.Rafael Quines disse …

    Kra, vc só pode estar brincando comigo. Já estava te explicando coisas a níveis de portas, acha que estou te mentindo esse tempo todo. Vc só quer perguntar, perguntar, e não testa nada. se tivesse um pouquinho mais de força de vontade já estaria fazendo robozinho… Desculpa a grosseria. Flw

  45. em 26 Nov 2007 as 6:03 pm 45.giovanni facholli disse …

    nao velho…nao é isso…nao acho que esta mentindo…nem tenho pq achar…as duvidas que falei contigo…sao normais…nao conheço java…conheço pouquissimo e tenho que fazer isso em java…aí so perguntei se ele acende e apaga…os leds???1 a 1…pois tem programa que so acende…só isso que perguntei…qto as portas…foi de grande utilidade…e ja to quase testando o hw que fiz…desculpa aí a pergunta brother

  46. em 12 Dec 2007 as 9:18 am 46.Felipe disse …

    Olá Rafael, não sei se você ou alguem consegue me ajudar, nao intendi mto bem como funciona esse seu projeto, mas creio que seja parecido com o meu. Tenho a necessidade de criar uma placa com porta paralela com 8 leds, até ai acho que está igual a sua. Minha aplicação em Java precisa ter 9 comandos ou seja, 1 para cada led, individual, ou seja, comando 1 liga led, comando 2 led 2 etc, e o 9º comando liga todos o leds simultaneamente, você tem uma ideia da onde eu posso achar isso?? como eu faço?? a minha placa pode ser igual a sua??? desde ja agradeço pela atenção de vcs, abraços

  47. em 12 Dec 2007 as 10:07 am 47.Rafael Quines disse …

    Amigo, é o seguinte, os 8 leds que têm ligados na porta da impressora são equivalentes aos BITS. Tipo, se olhar meu código ali, escrevo 1, 2, 4, 8, 16, 32, 64, 128 para ligar cada LED. Logo, se eu somar 1 + 2, ligará os dois primeiros led. se somar 16 + 1, por exemplo, liga o primeiro e o quinto led. Assim, se quer ligar todos os leds é só escrever 255 na porta, que setará todos os bits (leds) do byte..

    Espero ter ajudado..

    Valeu. Flw

  48. em 09 Jan 2008 as 3:09 pm 48.Diogo disse …

    Amigo, por acaso vc teria algum exemplo de como receber sinais atraves da porta paralela em java?

  49. em 10 Jan 2008 as 9:56 am 49.douglas disse …

    Rafael

    Minha duvida é a seguinte: Tenho uma aplicação que roda como serviço e executa um método de uma DLL que lê o valor da porta serial.

    Quando eu executo a função pela segunda vez, o serviço cai gerando o seguinte log:

    #
    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0×03ddf270, pid=1488, tid=1196
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_11-b03 mixed mode, sharing)
    # Problematic frame:
    # C 0×03ddf270
    #

    ————— T H R E A D —————

    Current thread (0×02c77650): JavaThread “JCO.ServerThread-1″ [_thread_in_native, id=1196]

    siginfo: ExceptionCode=0xc0000005, reading address 0×03ddf270

    Registers:
    EAX=0×7ffd5000, EBX=0×00000000, ECX=0×00000000, EDX=0×000011ff
    ESP=0×03c7da28, EBP=0×03c7da50, ESI=0×03ddf270, EDI=0×03c7da8c
    EIP=0×03ddf270, EFLAGS=0×00010202

    Top of Stack: (sp=0×03c7da28)
    0×03c7da28: 77d48709 000d029a 00008ffe 00000000
    0×03c7da38: 00000000 03ddf270 dcbaabcd 00000000
    0×03c7da48: 03c7da8c 03ddf270 03c7dab8 77d487eb
    0×03c7da58: 03ddf270 000d029a 00008ffe 00000000
    0×03c7da68: 00000000 03c7db40 03c7db38 005458d8
    0×03c7da78: 00000014 00000001 00000000 00000000
    0×03c7da88: 00000010 00000000 03c7dae0 00000001
    0×03c7da98: 00000000 00000000 03c7da6c 03c7d64c

    Instructions: (pc=0×03ddf270)
    0×03ddf260:
    [error occurred during error reporting, step 100, id 0xc0000005]

    Stack: [0×03c40000,0×03c80000), sp=0×03c7da28, free space=246k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C 0×03ddf270
    C [USER32.dll+0×87eb]
    C [USER32.dll+0×89a5]
    C [USER32.dll+0xbccc]
    C [PesoSaturno_v11.dll+0×23eea]
    C [jna24926.tmp+0×7269]
    C [jna24926.tmp+0×1dea]
    C [jna24926.tmp+0×224b]
    j com.sun.jna.Function.invokeDouble(I[Ljava/lang/Object;)D+0
    j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;+465
    j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+197
    j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+303
    j $Proxy0.LePeso1()D+9
    j br.com.stk.yara.balanca.conBalanca.SaturnoControl.LePeso(Ljava/lang/String;)D+13
    j br.com.stk.yara.balanca.conBalanca.SaturnoControl.SaturnoInit(Ljava/lang/String;)Ljava/lang/String;+86
    j br.com.stk.yara.balanca.conBalanca.ControlBalanca.ControlInit()Ljava/lang/String;+36
    j br.com.stk.yara.balanca.conSap.Server.handleRequest(Lcom/sap/mw/jco/JCO$Function;)V+222
    j com.sap.mw.jco.JCO$Server.dispatchRequest(Lcom/sap/mw/jco/JCO$Function;)V+614
    v ~StubRoutines::call_stub
    V [jvm.dll+0×871a8]
    V [jvm.dll+0xdf462]
    V [jvm.dll+0×87079]
    V [jvm.dll+0×8c456]
    C [sapjcorfc.dll+0xa1c3]
    C [LIBRFC32.dll+0×136d3]
    C [sapjcorfc.dll+0xb3ff]
    j com.sap.mw.jco.rfc.MiddlewareRFC$Server.nativeListen(Lcom/sap/mw/jco/JCO$Server;Ljava/lang/String;)V+0
    j com.sap.mw.jco.rfc.MiddlewareRFC$Server.listen(Lcom/sap/mw/jco/JCO$Server;Ljava/lang/String;)V+3
    j com.sap.mw.jco.JCO$Server.listen()V+45
    j com.sap.mw.jco.JCO$Server.run()V+70
    j java.lang.Thread.run()V+11
    v ~StubRoutines::call_stub
    V [jvm.dll+0×871a8]
    V [jvm.dll+0xdf462]
    V [jvm.dll+0×87079]
    V [jvm.dll+0×86dd6]
    V [jvm.dll+0xa1a14]
    V [jvm.dll+0×110aa6]
    V [jvm.dll+0×110a74]
    C [MSVCRT.dll+0×2a3b0]
    C [kernel32.dll+0xb50b]

    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    j com.sun.jna.Function.invokeDouble(I[Ljava/lang/Object;)D+0
    j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;+465
    j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+197
    j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+303
    j $Proxy0.LePeso1()D+9
    j br.com.stk.yara.balanca.conBalanca.SaturnoControl.LePeso(Ljava/lang/String;)D+13
    j br.com.stk.yara.balanca.conBalanca.SaturnoControl.SaturnoInit(Ljava/lang/String;)Ljava/lang/String;+86
    j br.com.stk.yara.balanca.conBalanca.ControlBalanca.ControlInit()Ljava/lang/String;+36
    j br.com.stk.yara.balanca.conSap.Server.handleRequest(Lcom/sap/mw/jco/JCO$Function;)V+222
    j com.sap.mw.jco.JCO$Server.dispatchRequest(Lcom/sap/mw/jco/JCO$Function;)V+614
    v ~StubRoutines::call_stub
    j com.sap.mw.jco.rfc.MiddlewareRFC$Server.nativeListen(Lcom/sap/mw/jco/JCO$Server;Ljava/lang/String;)V+0
    j com.sap.mw.jco.rfc.MiddlewareRFC$Server.listen(Lcom/sap/mw/jco/JCO$Server;Ljava/lang/String;)V+3
    j com.sap.mw.jco.JCO$Server.listen()V+45
    j com.sap.mw.jco.JCO$Server.run()V+70
    j java.lang.Thread.run()V+11
    v ~StubRoutines::call_stub

    ————— P R O C E S S —————

    Java Threads: ( => current thread )
    0×02cace80 JavaThread “AWT-Windows” daemon [_thread_in_native, id=488]
    0×00354088 JavaThread “DestroyJavaVM” [_thread_blocked, id=1588]
    =>0×02c77650 JavaThread “JCO.ServerThread-1″ [_thread_in_native, id=1196]
    0×00a0b8c0 JavaThread “Low Memory Detector” daemon [_thread_blocked, id=1956]
    0×00a0a4a0 JavaThread “CompilerThread0″ daemon [_thread_blocked, id=1948]
    0×00a097c0 JavaThread “Signal Dispatcher” daemon [_thread_blocked, id=1568]
    0×00a046e0 JavaThread “Finalizer” daemon [_thread_blocked, id=1924]
    0×00a03260 JavaThread “Reference Handler” daemon [_thread_blocked, id=1056]

    Other Threads:
    0×00a008a8 VMThread [id=1888]
    0×00a0cb18 WatcherThread [id=1968]

    VM state:not at safepoint (normal execution)

    VM Mutex/Monitor currently owned by a thread: None

    Heap
    def new generation total 576K, used 310K [0×22a50000, 0×22af0000, 0×22f30000)
    eden space 512K, 49% used [0×22a50000, 0×22a8f748, 0×22ad0000)
    from space 64K, 89% used [0×22ae0000, 0×22aee490, 0×22af0000)
    to space 64K, 0% used [0×22ad0000, 0×22ad0000, 0×22ae0000)
    tenured generation total 1408K, used 304K [0×22f30000, 0×23090000, 0×26a50000)
    the space 1408K, 21% used [0×22f30000, 0×22f7c2d0, 0×22f7c400, 0×23090000)
    compacting perm gen total 8192K, used 815K [0×26a50000, 0×27250000, 0×2aa50000)
    the space 8192K, 9% used [0×26a50000, 0×26b1bc18, 0×26b1be00, 0×27250000)
    ro space 8192K, 63% used [0×2aa50000, 0×2af5f230, 0×2af5f400, 0×2b250000)
    rw space 12288K, 46% used [0×2b250000, 0×2b7f1670, 0×2b7f1800, 0×2be50000)

    Dynamic libraries:
    0×00400000 - 0×0040d000 C:\Program Files\Java\jre1.5.0_11\bin\javaw.exe
    0×7c900000 - 0×7c9b0000 C:\WINDOWS\system32\ntdll.dll
    0×7c800000 - 0×7c8f4000 C:\WINDOWS\system32\kernel32.dll
    0×77dd0000 - 0×77e6b000 C:\WINDOWS\system32\ADVAPI32.dll
    0×77e70000 - 0×77f01000 C:\WINDOWS\system32\RPCRT4.dll
    0×77d40000 - 0×77dd0000 C:\WINDOWS\system32\USER32.dll
    0×77f10000 - 0×77f56000 C:\WINDOWS\system32\GDI32.dll
    0×77c10000 - 0×77c68000 C:\WINDOWS\system32\MSVCRT.dll
    0×6d640000 - 0×6d7dd000 C:\Program Files\Java\jre1.5.0_11\bin\client\jvm.dll
    0×76b40000 - 0×76b6d000 C:\WINDOWS\system32\WINMM.dll
    0×6d290000 - 0×6d298000 C:\Program Files\Java\jre1.5.0_11\bin\hpi.dll
    0×76bf0000 - 0×76bfb000 C:\WINDOWS\system32\PSAPI.DLL
    0×6d610000 - 0×6d61c000 C:\Program Files\Java\jre1.5.0_11\bin\verify.dll
    0×6d310000 - 0×6d32d000 C:\Program Files\Java\jre1.5.0_11\bin\java.dll
    0×6d630000 - 0×6d63f000 C:\Program Files\Java\jre1.5.0_11\bin\zip.dll
    0×10000000 - 0×1038d000 C:\WINDOWS\system32\sapjcorfc.dll
    0×02e40000 - 0×03413000 C:\WINDOWS\system32\LIBRFC32.dll
    0×774e0000 - 0×7761c000 C:\WINDOWS\system32\ole32.dll
    0×77120000 - 0×771ac000 C:\WINDOWS\system32\OLEAUT32.dll
    0×77c00000 - 0×77c08000 C:\WINDOWS\system32\VERSION.dll
    0×7c340000 - 0×7c396000 C:\WINDOWS\system32\MSVCR71.dll
    0×77f60000 - 0×77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
    0×7c3a0000 - 0×7c41b000 C:\WINDOWS\system32\MSVCP71.dll
    0×71ab0000 - 0×71ac7000 C:\WINDOWS\system32\WS2_32.dll
    0×71aa0000 - 0×71aa8000 C:\WINDOWS\system32\WS2HELP.dll
    0×7c9c0000 - 0×7d1d4000 C:\WINDOWS\system32\SHELL32.dll
    0×59a60000 - 0×59b01000 C:\WINDOWS\system32\dbghelp.dll
    0×5b860000 - 0×5b8b4000 C:\WINDOWS\system32\NETAPI32.dll
    0×773d0000 - 0×774d2000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
    0×5d090000 - 0×5d127000 C:\WINDOWS\system32\comctl32.dll
    0×71a50000 - 0×71a8f000 C:\WINDOWS\System32\mswsock.dll
    0×76f20000 - 0×76f47000 C:\WINDOWS\system32\DNSAPI.dll
    0×76fb0000 - 0×76fb8000 C:\WINDOWS\System32\winrnr.dll
    0×76f60000 - 0×76f8c000 C:\WINDOWS\system32\WLDAP32.dll
    0×76fc0000 - 0×76fc6000 C:\WINDOWS\system32\rasadhlp.dll
    0×662b0000 - 0×66308000 C:\WINDOWS\system32\hnetcfg.dll
    0×71a90000 - 0×71a98000 C:\WINDOWS\System32\wshtcpip.dll
    0×6d000000 - 0×6d16a000 C:\Program Files\Java\jre1.5.0_11\bin\awt.dll
    0×73000000 - 0×73026000 C:\WINDOWS\system32\WINSPOOL.DRV
    0×76390000 - 0×763ad000 C:\WINDOWS\system32\IMM32.dll
    0×5ad70000 - 0×5ada8000 C:\WINDOWS\system32\uxtheme.dll
    0×73760000 - 0×737a9000 C:\WINDOWS\system32\ddraw.dll
    0×73bc0000 - 0×73bc6000 C:\WINDOWS\system32\DCIMAN32.dll
    0×6d370000 - 0×6d376000 C:\Program Files\Java\jre1.5.0_11\bin\jawt.dll
    0×03db0000 - 0×03dc5000 C:\Documents and Settings\Administrator\Local Settings\Temp\jna24926.tmp
    0×6d380000 - 0×6d38d000 C:\Program Files\Java\jre1.5.0_11\bin\JdbcOdbc.dll
    0×74320000 - 0×7435d000 C:\WINDOWS\system32\ODBC32.dll
    0×763b0000 - 0×763f9000 C:\WINDOWS\system32\comdlg32.dll
    0×20000000 - 0×20017000 C:\WINDOWS\system32\odbcint.dll
    0×03d30000 - 0×03d62000 C:\appbalanca\PesoSaturno_v11.dll

    VM Arguments:
    java_command: C:\appbalanca\appbalanca.jar server
    Launcher Type: SUN_STANDARD

    Environment Variables:
    PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
    USERNAME=Administrator
    OS=Windows_NT
    PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 1, GenuineIntel

    ————— S Y S T E M —————

    OS: Windows XP Build 2600 Service Pack 2

    CPU:total 1 (cores per cpu 1, threads per core 2) family 15 model 4 stepping 1, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ht

    Memory: 4k page, physical 514120k(269492k free), swap 1256852k(1012908k free)

    vm_info: Java HotSpot(TM) Client VM (1.5.0_11-b03) for windows-x86, built on Dec 15 2006 01:16:12 by “java_re” with MS VC++ 6.0

    Podes me ajudar???

  50. em 12 Jan 2008 as 7:47 am 50.Rafael Quines disse …

    Puts, desculpe amigo, mas nao sei lhe ajudar. Notei q no meu software, de vez em qnd, acontecia isso. nunca consegui resolver isso…

    Flw

  51. em 17 Jan 2008 as 5:29 am 51.Vander disse …

    Problema com UserPort.

    É o seguinte, fiz um programa que comunica o computador com o osciloscópio, utilizando matlab e linguagem C. Enfim, No windows 98, roda perfeitamente. No xp, em alguns computadores funciona, mas, só utilizando o UserPort. Entretanto, alguns computadores não aceitam nem o UserPort. Quando aperto Update elé reinicia sozinho. O que eu faço?
    Em alguns computadores com xp o userport funciona perfeitamente, mas, em outros não, basta dar um update no userport que o computador reinicia e, sem o userport, o pc não aceita os comandos da serial.
    Sabe de algo? Por favor, quem puder me ajudar, meu e-mail é vander@mail.com.
    Desde já, muito obrigado.
    Vander.

  52. em 10 Feb 2008 as 1:35 pm 52.daniel disse …

    rafael sou leigo nesse negocio de diretorio mas zipei o useport e gostaria que vc me ensinasse como eu faço para instalar ele pois toda a vez q eu coloco os endereços 0×378,,, etc …. e dou start aparece uma mensagem em inglês dizendo q não tem os drives..
    tem como vc mostrar passo a passo pois acho q estou fazendo errado..
    desculpa minha ingnorancia ae!!!!

  53. em 13 Feb 2008 as 4:00 pm 53.Diogo disse …

    Olá Amigo, vc saber me informar se é parport aceita acesso de interrupções através de dispositivos conectados à porta paralela?

  54. em 14 Feb 2008 as 2:58 am 54.Rafael Quines disse …

    Amigo, infelizmente não sei não… Acho que teria que usar uma linguagem de mais baixo nível para lidar com interrupções… Flw

  55. em 28 Feb 2008 as 10:25 am 55.Marcelo Cabral disse …

    Rafael, primeiramente parabéns por abordar este assunto e pelo seu venerável conhecimento do assunto.

    Bom vamos lá.

    Eu preciso imprimir dados em uma nota fiscal, por impressora matricial, que estará conectada na porta paralela.

    Devo utilizar estes caminhos descritos aqui?

    Infelizmente não tenho idéia de onde começar.

    Já postei em vários fóruns mas não obtive reposta.

    Agradeço desde já pela atenção.

  56. em 28 Feb 2008 as 11:22 am 56.Rafael Quines disse …

    E ae kra. Seguinte, nunca mexi com uma impressora matricial. Não sei se vc tem q mandar byte a byte. Ou se manda imprimir normalmete.. Teria q dar uma pesquisada pra ver como fazer. Mas dá uma olhada na API Comm pra porta serial. Se não me engano, lá vc consegue mandar os bytes pra porta paralela. Dá uma olhada nesse link, q fala da Serial, mas lá tb tem a Porta paralela.. Tenta ae. flwww

    Kra, vc é de Porto Alegre?

  57. em 28 Feb 2008 as 11:30 am 57.Marcelo Cabral disse …

    Valeu Rafael…

    vou dar uma olhada…

    de Porto Alegre? Nao sou nao porque?

  58. em 04 Mar 2008 as 11:46 am 58.Ricardo Martins disse …

    Segue :

    package text;

    /**
    *
    * @author @
    */
    import gnu.io.CommPortIdentifier;
    import gnu.io.SerialPort;
    import gnu.io.SerialPortEvent;
    import gnu.io.SerialPortEventListener;
    import java.io.*;
    import java.lang.Runnable.*;
    //classe Principal
    public class SComm implements SerialPortEventListener, Runnable {
    //propriedades
    private String Porta;
    public String Dadoslidos;
    public int nodeBytes;
    private int baudrate;
    private int timeout;
    private CommPortIdentifier cp;
    private SerialPort porta;
    private OutputStream saida;
    private InputStream entrada;
    private Thread threadLeitura;
    //indicadores
    private boolean IDPortaOK; //true porta EXISTE
    private boolean PortaOK;// true porta aberta
    private boolean Leitura;
    private boolean Escrita;
    //construtor default paridade : par
    //baudrate: 9600 bps stopbits: 2 COM 1

    public SComm() {
    Porta = “COM4″;
    baudrate = 9600;
    timeout = 1000;

    };
    //um Objeto ComObj é passado ao construtor
    //com detalhes de qual porta abrir
    //e informações sobre configurações
    public SComm( String p , int b , int t ){
    this.Porta = p;
    this.baudrate = b;
    this.timeout = t;

    }
    //habilita escrita de dados
    public void HabilitarEscrita(){
    Escrita = true;
    Leitura = false;
    System.out.println(”HabilitarEscrita”);
    }
    //habilita leitura de dados
    public void HabilitarLeitura(){
    Escrita = false;
    Leitura = true;
    }
    //Obtém o ID da PORTA
    public void ObterIdDaPorta(){
    try {
    cp = CommPortIdentifier.getPortIdentifier(Porta);
    if ( cp == null ) {
    System.out.println(”A ” + Porta + ” nao existe!” );
    System.out.println(”ERRO!Abortando…” );

    IDPortaOK = false;
    System.exit(1);
    }
    IDPortaOK = true;
    } catch (Exception e) {
    System.out.println(”Erro durante o procedimento. STATUS” + e );
    IDPortaOK = false;
    System.exit(1);
    }
    }
    //Abre a comunicação da porta
    public void AbrirPorta(){
    try {
    porta = (SerialPort)cp.open(”COM4″,timeout);
    PortaOK = true;
    System.out.println(”Porta aberta com sucesso!”);
    //configurar parâmetros
    porta.setSerialPortParams(baudrate,porta.DATABITS_8,porta.STOPBITS_2,porta.PARITY_NONE);

    } catch (Exception e) {
    PortaOK = false;
    System.out.println(”Erro ao abrir a porta! STATUS: ” + e );
    System.exit(1);
    }
    }
    //função que envie um bit para a porta serial
    public void EnviarUmaString(String msg){
    if (Escrita==true) {
    try {
    saida = porta.getOutputStream();
    System.out.println(”FLUXO OK!”);
    } catch (Exception e) {
    System.out.println(”Erro.STATUS: ” + e );
    }
    try {
    System.out.println(”Enviando um byte para ” + Porta );
    System.out.println(”Enviando : ” + msg );
    saida.write(msg.getBytes());
    Thread.sleep(100);
    saida.flush();
    } catch (Exception e) {
    System.out.println(”Houve um erro durante o envio. “);
    System.out.println(”STATUS: ” + e );
    System.exit(1);
    }
    } else {
    System.exit(1);
    }
    }
    //leitura de dados na serial
    public void LerDados(){
    if (Escrita == false){
    try {
    entrada = porta.getInputStream();
    System.out.println(”FLUXO OK!”);
    } catch (Exception e) {
    System.out.println(”Erro.STATUS: ” + e );
    System.exit(1);
    }
    try {
    porta.addEventListener(this);
    System.out.println(”SUCESSO. Porta aguardando…”);
    } catch (Exception e) {
    System.out.println(”Erro ao criar listener: “);
    System.out.println(”STATUS: ” + e);
    System.exit(1);
    }
    porta.notifyOnDataAvailable(true);
    try {
    threadLeitura = new Thread(this);
    threadLeitura.start();
    } catch (Exception e) {
    System.out.println(”Erro ao iniciar leitura: ” + e );
    }
    }
    }
    //método RUN da thread de leitura
    public void run(){
    try {
    Thread.sleep(timeout);
    } catch (Exception e) {
    System.out.println(”Erro. Status = ” + e );
    }
    }
    //gerenciador de eventos de leitura na serial
    public void serialEvent(SerialPortEvent ev){
    switch (ev.getEventType()) {
    case SerialPortEvent.BI:
    case SerialPortEvent.OE:
    case SerialPortEvent.FE:
    case SerialPortEvent.PE:
    case SerialPortEvent. CD:
    case SerialPortEvent.CTS:
    case SerialPortEvent.DSR:
    case SerialPortEvent.RI:
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
    break;
    case SerialPortEvent.DATA_AVAILABLE:
    byte[] bufferLeitura = new byte[20];
    try {
    while ( entrada.available() > 0 ) {
    nodeBytes = entrada.read(bufferLeitura);
    }
    String Dadoslidos = new String(bufferLeitura);
    if (bufferLeitura.length == 0) {
    System.out.println(”Nada lido!”);
    } else if (bufferLeitura.length == 1 ){
    System.out.println(”Apenas um byte foi lido!”);
    } else {
    System.out.println(Dadoslidos);
    }
    } catch (Exception e) {
    System.out.println(”Erro durante a leitura: ” + e );
    }
    System.out.println(”n.o de bytes lidos : ” + nodeBytes );
    break;
    }
    }
    //função que fecha a conexão
    public void FecharCom(){
    try {
    porta.close();
    System.out.println(”CONEXAO FECHADA>>FIM..”);
    } catch (Exception e) {
    System.out.println(”ERRO AO FECHAR. STATUS: ” + e );
    System.exit(0);
    }
    }
    //Acessores
    public String obterPorta(){
    return Porta;
    }
    public int obterBaudrate(){
    return baudrate;
    }
    }

    //fim da classe

    package text;
    //package SrCom;
    import gnu.io.CommPortIdentifier;
    //import javax.comm.*;
    import java.io.*;
    import java.util.*;
    /**
    *
    * @author @
    */
    public class Srcom {

    /*
    * SerialCom.java
    *
    * Created on September 27, 2007, 7:34 AM
    *
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    */

    public class SerialCom {
    //*********************************
    //Variáveis
    //*********************************
    //variáveis para identificar portas
    protected String[] portas;
    protected Enumeration listaDePortas;
    //construtor
    public SerialCom(){
    listaDePortas = CommPortIdentifier.getPortIdentifiers();
    }
    //retorna as portas disponíveis
    public String[] ObterPortas(){
    return portas;
    }
    //Copia portas para um Array
    protected void ListarPortas(){
    int i = 0;
    portas = new String[10];
    while (listaDePortas.hasMoreElements()) {
    CommPortIdentifier ips =
    (CommPortIdentifier)listaDePortas.nextElement();
    portas[i] = ips.getName();
    i++;
    }
    }
    //pesquisa se a Porta existe
    public boolean PortaExiste(String COMp){
    String temp;
    boolean e = false;
    while (listaDePortas.hasMoreElements()) {
    CommPortIdentifier ips =
    (CommPortIdentifier)listaDePortas.nextElement();
    temp = ips.getName();
    if (temp.equals(COMp)== true) {
    e = true;
    }
    }
    return e;
    }
    //imprime as portas disponíveis
    protected void ImprimePortas(){
    for (int i = 0 ; i

  59. em 04 Mar 2008 as 12:38 pm 59.Rafael Quines disse …

    Kra, o que vc me colou ai foi o Copy e Paste do tutorial do GUJ. Onde está seu código onde trata os dados que vem da serial??? Vc não precisa desse código todo. Tem mtos métodos ai, q é de listagem de portas, outra pra abrir, isso vc já pode fazer de imediato no início do teu programa. E não precisa criar uma thread especifica para leitura. A classe q implementar o SerialPortEventListener, e chamando os metodos addEventListener e notifyOnDataAvaibles, o método serialEvent será chamado sempre que a porta serial receber dados…

  60. em 06 Mar 2008 as 3:59 am 60.George Maia disse …

    Olá Rafael. Estou tentando utilizar o parport no linux, e, no eclipse.

    Sei que não é erro da biblioteca e sim do eclipse, mas como posso corrigir?

    Exception in thread “main” java.lang.UnsatisfiedLinkError: no parport in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1030)
    at parport.ParallelPort.(ParallelPort.java:75)
    at SrComm.TesteApplication.main(TesteApplication.java:9)

  61. em 06 Mar 2008 as 9:16 am 61.Rafael Quines disse …

    Não é erro do eclipse. O JRE q o eclipse está utilizando para rodar seu progrma não está encontrando a DLL. A dll precisa estar no diretorio bin da JRE q o Eclipse está usando. Agora no linux, não sei se existe uma parport.so…

    Flw

  62. em 20 May 2008 as 9:08 am 62.carlos disse …

    ola,vc fez essa classe ai para escrever agora, se eu quiser ler um bit da porta paralela eu troco 378 por 379 certo? e mais o que se puder me ajudar eu agradeço de mais, ha e parabens pela implementação.

  63. em 02 Jun 2008 as 4:11 am 63.carlos disse …

    cosegui faze tudo e ler tb, so que quando eu ponho os led eles ja aparecem ligados, e nao consigo desliga-los, a nao ser quando desligo pelo programa relais time dai sim depois fica deboa ligo e desligo, mais como faço pra nao precisar desse programa… ?

  64. em 02 Jun 2008 as 5:59 am 64.Rafael Quines disse …

    Amigo, não sei como te ajudar.

  65. em 03 Jun 2008 as 2:11 pm 65.Antônio Alves - ES disse …

    Olá Rafael,
    Passo aqui pra deixar meus agradecimentos pelo post, está sendo de grande ajuda.
    Abraço

  66. em 03 Jun 2008 as 2:50 pm 66.Rafael Quines disse …

    Certo, qualquer dúvida estarei a disposição.

    Valeu

  67. em 28 Jun 2008 as 6:33 am 67.Rabi da Silva disse …

    Amigo eu não posso utilizar a portwin32.zip eu já baixei na net, porém o meu professor que que eu utilize a JAVAX.COMM, sendo que estou com uma dificuldade tremenda de imprimir um bit na porta.

    Teria como adptar esse código para JAVAX.COMM?

  68. em 28 Jun 2008 as 4:06 pm 68.Rafael Quines disse …

    Amigo, nunca fiz com a javax.comm pra escrever na porta paralela.

    Já usei a javax.comm para escrever na serial, e escrevi um artigo nesse link: http://www.rafaelquines.com/blog/2007/01/escrevendo-na-porta-serial-com-java/ só teria q adaptar o código para a porta paralela…

    Boa sorte…

  69. em 11 Jul 2008 as 7:16 am 69.Bruno Pimentel disse …

    Rafael, eu acho que já coloque o dll no diretório bin da JRE do eclipse: C:\Arquivos de programas\Java\jre1.6.0_01\bin (bin do JRE). Mas o eclipse ainda continua dando erro UnsatisfiedLinkError.
    Eu também coloquei o dll em C:\Documents and Settings\Bruno\Meus documentos\eclipse\plugins\org.apache.ant_1.6.5\bin
    (bin do JDK)
    Eu sei que foram inumeras explicações sobre isso,mas tem como me ajudar?

  70. em 11 Jul 2008 as 7:31 am 70.Rafael Quines disse …

    Amigo, o seu eclipse pode estar usando uma outra JRE instalada na sua máquina. E não esqueça que existe uma JRE dentro do dir /jre, ae a DLL deve tb ser copiada no dire /jre/bin.

    Na dúivda, coloca a DLL em todos os diretórios BIN de todas as tuas JRE, e além disso, também dentro do BIN das JRES dentro do JDK.

    Flw

  71. em 29 Jul 2008 as 6:30 pm 71.Celso Jr disse …

    Rafael,
    Já copiei a Dll para todos os locais que vc informou, mas continuo tomando o erro: “UnsatisfiedLinkError: writeOneByte” …

  72. em 09 Aug 2008 as 5:18 am 72.Celso Jr disse …

    Já tentei de tudo… não fuciona mesmo!!!

  73. em 09 Aug 2008 as 9:54 am 73.Rafael Quines disse …

    Amigo, que IDE está usando? ou está compilando as classes java na mão?!

  74. em 09 Aug 2008 as 9:54 am 74.Rafael Quines disse …

    Qual o sistema operacional?!

  75. em 26 Sep 2008 as 5:52 am 75.Fernando disse …

    Ola pessoal, estou achando muito interessante esse assunto de programação, pena que isso não entra na minha cabeça.trabalho com manutenção de eletronicae tenho umas duvidas que vcs podem me ajudar
    1-teria como criar um programa num notebook MOBO que não tem HD p/ ele receber sinais de sensores e executar atuadores como,potenciometro,sonda lambda,temperatura, bico injetor de combustivel? Estou pensando em colocar um PC p/ controlar um motor dessa forma usando somente os sensores mais indispensaveis, que se der certo fica melhor que um carburador.
    Na pratica a posição do potenciometro alteraria a fraquencia de injeção nos bicos, com o sinal da sonda tambem comtrolaria o tempo de sinal no solenoide(bico).
    pode ser loucura mas se não for incomodar vcs me respondam, Obrigado

  76. em 09 Oct 2008 as 5:08 am 76.Marcelo disse …

    Fala Cara

    Tenho uma aplicação em C que acessa a porta paralela (usando o user port) no winxp sem problemas, mas quando tento executar o programa em java, acontece o erro:

    #
    # An unexpected error has been detected by Java Runtime Environment:
    #
    # EXCEPTION_PRIV_INSTRUCTION (0xc0000096) at pc=0×0371107b, pid=3796, tid=1088
    #
    # Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
    # Problematic frame:
    # C [parport.dll+0×107b]
    #
    # An error report file with more information is saved as hs_err_pid3796.log
    #
    # If you would like to submit a bug report, please visit:
    # http://java.sun.com/webapps/bugreport/crash.jsp

    Acredito que o user port esteja funcionando corretamente, pois em C tudo funciona perfeitamente.

    o interessante é que o erro não ocorre sempre. Algumas vezes o programa roda até o fim, outras não.

    Alguma sugestão ?

    Abraço

  77. em 09 Oct 2008 as 5:14 am 77.Rafael Quines disse …

    Bah amigo, outros amigos aí do fórum tiveram o mesmo problema, mas não cheguei a acompanhar se tiveram sucesso ou não, poderia dar uma lida nos comentários aí… já tive esse problema antes de conhecer o UserPort. Foi depois deste problema que fui atras do desbloqueio da porta paralela. Ve se tá certo o arquivo UserPort.sys lá no diretorio Drivers dentro de system32. Te liga, tem que dar a permissão da 0×378 nas duas janelas do programinha.. Qq problema só falar ae.. t+

  78. em 09 Oct 2008 as 5:46 am 78.Marcelo disse …

    Dei uma olhada nos comentários e realmente ninguem postou uma solução final para esse problema.

    O userport está correto, acabei de conferir.

    O mais interessante é que as vezes o programa roda bem, e em seguida, ao executar novamente, não roda.

    Vc conhece alguma alternativa ao ParPort ?

    Abraço

  79. em 09 Oct 2008 as 5:55 am 79.Rafael Quines disse …

    Kra, dá uma pesquisada sobre essa DLL: jnpout32.dll parece q esta nem exige o UserPort.

    Flw

  80. em 09 Oct 2008 as 6:01 am 80.Tom disse …

    Marcelo,
    Estava tendo o mesmo problema que você( tem alguns posts meus ai para cima em que postei a solução).
    Consegui resolver este mesmo problema pela DLL que o Rafael lhe indicou segue o Link, para download: http://www.hytherion.com/beattidp/comput/pport.htm

    Espero ter somado.
    Cordialmente.

  81. em 09 Oct 2008 as 7:33 am 81.Marcelo disse …

    Fala cara !
    Usei a jnpout32pkg.dll e funcionou tudo perfeitamente. Quem estiver com problemas ao utilizar o ParPort, pode usar esse pacote que funciona bem. Os métodos são um pouco diferentes do ParPort, mas nada que seja muito dificil de adaptar.

    Obrigado pela ajuda !

    Abração !

    P.S. Esse pacote pode ser obtido em

    http://www.hytherion.com/beattidp/comput/pport/Jnpout32pkg_v10.zip

  82. em 09 Oct 2008 as 8:32 am 82.Rafael Quines disse …

    Blz Marcelo, muito obrigado pelo feedback aí.

    Mais tarde posto um update flndo sobre essa dll.. Vou testar um pouco e tal.

    Valeu. T+

  83. em 14 Oct 2008 as 1:58 pm 83.Henrique disse …

    E aew pessoal, to precisando de uma ajudinha urgente.
    Meu projeto tem que ligar e desligar os LEDs quando a porta paralela enviar um sinal, mas nao to conseguindo.Usando o Java.
    Quando eu ligo o Relay Card(que interligará a porta paralela aos leds) os leds ficam acesos continuamente, eu só quero que acenda quando enviar um sinal para ligar/desligar.

  84. em 14 Oct 2008 as 2:02 pm 84.Henrique disse …

    se quiserem que eu envie os códigos.
    É só pedir

  85. em 01 Dec 2008 as 11:01 am 85.João Deyvid disse …

    Criei um novo pacote(parport) e deu certo, assim como o Thiago descreveu. Valew e parabéns Rafael, pelo Blog de ótimas iniciativas. Vc pode passar o seu msn? Quem quiser o meu jdeyvid@hotmail.com

  86. em 01 Dec 2008 as 11:33 am 86.Rafael Quines disse …

    Blz. Estou a disposição p/ quaisquer dúvidas. Obrigado Thiago pela ajuda…

  87. em 02 Dec 2008 as 7:13 pm 87.João Deyvid disse …

    boa noite, Rafael. Ontem fiz o programa rodar blz. hj fiz um esquema aqui com um led e uma resistencia, para fazer o teste da porta paralela. não funcionou amigo, apenas uma saida da porta ficou ativa, mas o tempo todo o restante não deu nenhum sinal. Até aumentei o tempo (Thread.sleep)

  88. em 02 Dec 2008 as 7:34 pm 88.João Deyvid disse …

    Boa noite Rafael, eu estou de volta. Mas agora radiante, estive olhando melhor outros comentarios sobre a porta e resolvi ver no setup e vi que ela de estava desabilitada, foi só habilitala no endereço 378 e pronto funcionou que uma blza. Abraços João

  89. em 03 Dec 2008 as 3:21 am 89.Rafael Quines disse …

    blz, é mto bom reportar qnd consegue pois o seu problema pode ter sido o mesmo de mtos outros colegas..

    Abraço

Trackback This Post | Inscreva-se no RSS Feed dos comentátios

Responda