Mais javax.comm

E ai galera, ainda estou me matando e não chegando a lugar nenhum, já montei o hardware mas o meu software não envia nada para a porta paralela fazendo com que o led se acenda na verdade o software na hora que chega no .write() fica em standy até eu dar um CTRL+C para para o processo, alguém pode me ajudar ?

Segue o código q estou usando atualmente.

import javax.comm.*; 
import java.io.*; 
import java.util.*;
import java.util.Enumeration; 

public class SerialCom { 
	public Enumeration listaDePortas; 
    public ParallelPort	      parallelPort;
    public CommPortIdentifier ips;
    static OutputStream       outputStream;
	static DataOutputStream DOSone;

	public SerialCom(){ 
		listaDePortas = CommPortIdentifier.getPortIdentifiers(); 
	} 
	
	public boolean PortaExiste(String COMp){ 
		String temp; 
		boolean e = false; 
		
		while (listaDePortas.hasMoreElements()) { 
			ips = (CommPortIdentifier)listaDePortas.nextElement(); 
			temp = ips.getName(); 
			if (temp.equals(COMp)== true) { 
				e = true; 
				break;
			} 
		} 
		return e; 
	} 

	public void enviarDados(String po, String mensagem, int valor)	{
		if (PortaExiste(po))	{
			try	{
				parallelPort = (ParallelPort) ips.open("SerialCom", 3000);
		    } catch (PortInUseException e) {
				System.out.println("Porta em uso.");
		    } 
			
		    try {
				outputStream = parallelPort.getOutputStream();
		    } catch (IOException e) {
			
			}

			try	{
				parallelPort.setMode(1);
			}catch(UnsupportedCommOperationException e)	{
				System.out.println("Unsupported byte mode.");
			}		
			
			System.out.println("Mensagem: "+mensagem+" na porta "+parallelPort.getName());
			
		    try {
				outputStream.write(mensagem.getBytes());
		    } catch (IOException e) {
				System.exit(1);
			}
			
		    try {
		       Thread.sleep(2000); 
		    } catch (Exception e) {
			
			}
		    parallelPort.close();
		}
	}
	
   public static void main(String args[]){ 
		SerialCom s = new SerialCom();
		s.enviarDados("LPT1", "1", 0);
	}

}

[]s

estou exatamente com o mesmo problema:
http://www.guj.com.br/forum/viewtopic.php?t=17234

Bom, como eu tinha falado em um dos posts, o problema da porta paralela para você controlar leds é que você deve deixar uma das entradas de controle, não de dados, em um determinado nível lógico (não sei se é em 0) para que a porta possa receber bytes (simulando uma impressora on-line e pronta para receber comandos). Para deixar nesse nível lógico você precisa fazer uma pequena ligação no cabo - mas infelizmente não lembro mais qual é o tal sinal, portanto passo esta questão aos universitários.

deu certo!!!

cara, é exatamente isso que o thingol falou… a javacomm joga pro driver do windows… e o windows espera um sinal da porta indicando que a “impressora esta online”
exatamente como o thingol disse…
o unico trabalho foi descobrir que pino era… e descobrimos que é o pino 11 (o BUSY), foi só mudar o nivel dele (pra 0) que ele parou de travar no write…

vou fazer mais testes aqui, mas parece que agora esta ok

valeuuuuu a todos!!

Estou com quase o mesmo problema
Estou rodando a plaquinha no linux ubuntu.

Em um programinha do windows que baixei pronto, tudo funciona direitinho.

Quando mando o programa java que eu fiz rodar, os leds ficam acesos nesta sequencia: 01010101, apesar de eu ter mando 00000000 (0 em decimal int).

Na sequência que já estava, o programa fica la no write e depois dispara este erro:

“java.io.IOException: write to parallel port failed”

Só depois da exception lançada, que o que eu realmente mandei acontece: os leds se apagam ou acendem, de acordo com o que enviei no momento.

Alguém pode me ajudar?

Meu código para consulta.

	//AFTER THE PORT OPENED, THE PROGRAM IS READY FOR SEND MESSAGES
	private void sendMsg(int msg)
	{
		try
		{
			out = parallelPort.getOutputStream();
		}//end of try
		catch(Exception e)
		{
			System.out.println("ERROR: PORT DOESN'T READY FOR MESSAGE SENDING.\nABORT: sendMsg() method\nSTATUS: " + e);
			System.exit(1);//System crash 
		}//end of catch()
			
		//PROCESS THE MESSAGE SENDING 
		try
		{
			out.write(msg);
			Thread.sleep(100);
			out.flush();
		}
		catch( Exception e )
		{
			System.out.println("ERROR: ERROR WHILE THE SENDING.\nABORT: sendMsg() method\nSTATUS: " + e);
			System.exit(1);//System crash 
	
		}

	}		

Para fins de pesquisa e se alguém conseguir resolver esse problema, Por favor escreva aqui.

Pesquisei por alguns dias seguidos sobre a possibilidade de obter comunicação da porta paralela com java com alguns leds conectados diretamente aos pinos do 2 ao 8, como mostra alguns tutoriais na internet, mas especificamente no site do Gabriel Torres, ou do RogerCom.

De nenhuma maneira eu consegui êxito utilizando a api javax.comm sobre o linux para esta comunicação.

Baixei recentemente um programinha windows, feito em delphi, e de acordo com os bits que envio para cada pino da paralela, os leds se acendem e se apagam conforme a minha requisição. O que descarta as soldagens e montagem dos leds no cabo paralelo, tenham feitos de forma errada.

Só que no linux, utilizando a javax.comm, não deu certo ainda.

Pesquisei diversos tutoriais, mandei rodar os exemplos que vem na própria pasta da javacomm api e acontecem o mesmo problema que a minha aplicação feita do 0, usando as apis:

A aplicação começa a ser bem executada, mas quando chega no comando write, da classe OutPutStream, verificando no Debug, percebi que este método é segurado e o comando fica por lá até aproximadamente 1.5 minuto. Quando a aplicação começa a rodar aí, os leds se acendam nesta ordem: 01010101, apesar de eu ter mando 11111111(255) ou 00000000 (0 binário).

após 1 minuto e meio, ainda no método WRITE, uma exception é disparada com os seguintes dizeres:

java.io.IOException: write to parallel port failed

e depois que a exception é mostrada, os bits que realmente mandei para a paralelea são enviados: ou todos os leds se apagam, ou se acendem, conforme o meu comando.

Estive pesquisando estes dias e vi que estes erros perseguem muitos programadores ao redor do mundo, que tentam interfacear este esquema de leds no linux ou no windows com esta api.

Logo acima, parece que o nosso colega conseguiu a solução do problema. Mas pesquisando aqui no fórum do guj, vi que ele logo depois, em outro tópico, avisa que não deu certo e que precisava fazer mais testes.

Enfim, se alguém puder me ajudar a desenvolver esta solução em java puro, no caso, eu optei por utilizar o javax.comm, que se adquire no próprio site da sun, estou aberto a sugestões.

Abraço a todos.

Deixarei esta mensagem para fins de pesquisa.
Espero que seja útil no futuro e que poupe tempo de alguém quando for pesquisar sobre javax.comm.

Sobre o controle de envio de bits para a porta paralela, mais especificamente a brincadeira de testar o acender e apagar de leds, conectados diretamente aos pinos do 2 ao 8, com a API do java, dá certo sim.

Depois de dias pesquisando e depois de muita raiva, desisti do Java Comm, fui para o rxtx e depois para o Parport, soluções que saem da visão da Sun ou utilizam códigos feitos em C em um nível mais baixo… Coisa que eu não estava querendo, mas apelando para isso dar certo. Eu gostaria de desenvolver este projeto em java puro, e agora consegui.

Depois de testar sem nenhum êxito, a solução foi soldar os fios correspondentes aos pinos 11 ao 25. Explicando: O pino 11 corresponde ao sinal “BUSY” da porta paralela. Então quando a minha aplicação iniciava, tudo aquela sequência de bits acendia indicando que o dispositivo estava ocupado. Então o que eu fiz, foi deixar o BUSY = 0, soldando algum fio nele que corresponda ao terra. Fiz com o pino 25, mas poderia ser qualquer um do 18 ao 25.

Com o Busy no terra, fio possível o total envio de bits para o dispositivo que montei, com os leds.

Obrigado pela dica. Vai pra minha coleção de “Favoritos”.

Bom dia FightSurf George Maia, se tiver como vc enviar os comando ai em java q vc finalizou a comunicaçao com os leds em java ficarei grato.
ricardogueds@hotmail.com