E ae galera…tudo bem com vocês??
Queria saber se alguém conhece algum tutorial ou possui um source-code de exemplo para fazer polling na porta paralela ou USB…
A unica coisa que consegui foi comunicação com a porta serial, mais não consigo retirar nenhum status dela (I/O). To usando a biblioteca RXTX.
Se alguém conhecer alguma biblioteca “mais melhor de bom” para utilizar da um comment aki…
Esse é meu source-code que desenvolvi seguindo um tutorial na internet:
Classe: SerialCom
importgnu.io.CommPortIdentifier;importjava.util.Enumeration;/** * * @author Luan */publicclassSerialCom{protectedString[]portas;protectedEnumerationlistaDePortas;publicSerialCom(){listaDePortas=CommPortIdentifier.getPortIdentifiers();}//retorna as portas disponíveispublicString[]ObterPortas(){returnportas;}//armazenar uma lista das portas seriais disponíveisprotectedvoidListarPortas(){inti=0;portas=newString[10];while(listaDePortas.hasMoreElements()){CommPortIdentifierips=(CommPortIdentifier)listaDePortas.nextElement();portas[i]=ips.getName();i++;}}//verifica se a porta selecionada existe e se esta tudo em funcionamento com elapublicbooleanPortaExiste(StringCOMp){Stringtemp;booleane=false;while(listaDePortas.hasMoreElements()){CommPortIdentifierips=(CommPortIdentifier)listaDePortas.nextElement();temp=ips.getName();if(temp.equals(COMp)==true){e=true;}}returne;}}
Classe: SerialComLeitura
importgnu.io.CommPortIdentifier;importgnu.io.SerialPort;importgnu.io.SerialPortEvent;importgnu.io.SerialPortEventListener;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.Iterator;/** * * @author Luan */publicclassSerialComLeituraimplementsRunnable,SerialPortEventListener{publicStringDadoslidos;publicintnodeBytes;privateintbaudrate;privateinttimeout;privateCommPortIdentifiercp;privateSerialPortporta;privateInputStreamentrada;privateOutputStreamsaida;privateThreadthreadLeitura;privatebooleanIDPortaOK;privatebooleanPortaOK;privatebooleanLeitura;privatebooleanEscrita;privateStringPorta;protectedStringpeso;publicvoidsetPeso(Stringpeso){this.peso=peso;}publicStringgetPeso(){returnpeso;}publicSerialComLeitura(Stringp,intb,intt){this.Porta=p;this.baudrate=b;this.timeout=t;}publicvoidHabilitarLeitura(){Escrita=false;Leitura=true;}publicvoidObterIdDaPorta(){try{cp=CommPortIdentifier.getPortIdentifier(Porta);if(cp==null){System.out.println("Erro na porta!");IDPortaOK=false;System.exit(1);}else{System.out.println("ID da porta: "+cp);}IDPortaOK=true;}catch(Exceptione){System.out.println("Erro obtendo ID da porta: "+e);IDPortaOK=false;System.exit(1);}}publicvoidAbrirPorta(){try{porta=(SerialPort)cp.open("SerialComLeitura",timeout);PortaOK=true;porta.setSerialPortParams(baudrate,porta.DATABITS_8,porta.STOPBITS_1,porta.PARITY_NONE);porta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);}catch(Exceptione){PortaOK=false;System.out.println("Erro abrindo comunicação: "+e);System.exit(1);}}publicvoidLerDados(){if(Escrita==false){try{entrada=porta.getInputStream();}catch(Exceptione){System.out.println("Erro de stream:"+e);System.exit(1);}try{porta.addEventListener(this);}catch(Exceptione){System.out.println("Erro de listener: "+e);System.exit(1);}porta.notifyOnDataAvailable(true);try{threadLeitura=newThread(this);threadLeitura.start();run();}catch(Exceptione){System.out.println("Erro de Thred: "+e);}}}publicvoidEnviarUmaString(Stringmsg){if(Escrita==true){try{saida=porta.getOutputStream();System.out.println("FLUXO OK!");}catch(Exceptione){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(Exceptione){System.out.println("Houve um erro durante o envio. ");System.out.println("STATUS: "+e);System.exit(1);}}else{System.exit(1);}}publicvoidrun(){try{Thread.sleep(5);}catch(Exceptione){System.out.println("Erro de Thred:"+e);}}publicvoidserialEvent(SerialPortEventev){StringBufferbufferLeitura=newStringBuffer();intnovoDado=0;switch(ev.getEventType()){caseSerialPortEvent.BI:caseSerialPortEvent.OE:caseSerialPortEvent.FE:caseSerialPortEvent.PE:caseSerialPortEvent.CD:caseSerialPortEvent.CTS:caseSerialPortEvent.DSR:caseSerialPortEvent.RI:caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:break;caseSerialPortEvent.DATA_AVAILABLE://Novo algoritmo de leitura.while(novoDado!=-1){try{novoDado=entrada.read();if(novoDado==-1){break;}if('\r'==(char)novoDado){bufferLeitura.append('\n');}else{bufferLeitura.append((char)novoDado);}}catch(IOExceptionioe){System.out.println("Erro de leitura serial: "+ioe);}}setPeso(newString(bufferLeitura));System.out.println(getPeso());break;}}publicvoidFecharCom(){try{porta.close();}catch(Exceptione){System.out.println("Erro fechando porta: "+e);System.exit(0);}}publicStringobterPorta(){returnPorta;}publicintobterBaudrate(){returnbaudrate;}}
Classe: Principal (Main)
importSerial.SerialCom;importSerial.SerialComLeitura;importjava.util.Timer;importjava.util.TimerTask;/** * * @author Luan */publicclassPrincipalextendsSerialCom{publicstaticvoidmain(String[]args){//Iniciando leitura serialfinalSerialComLeituraleitura=newSerialComLeitura("COM1",9600,0);intdelay=5000;// delay de 5 sec.intperiod=1000;// repete o codigo a cada 1 sec.Timertimer=newTimer();timer.scheduleAtFixedRate(newTimerTask(){publicvoidrun(){leitura.HabilitarLeitura();leitura.ObterIdDaPorta();leitura.AbrirPorta();leitura.LerDados();leitura.FecharCom();//Controle de tempo da leitura aberta na serialtry{Thread.sleep(1000);}catch(InterruptedExceptionex){System.out.println("Erro na Thread: "+ex);}}},delay,period);}}