Pessoal, segui este tutorial desse link:
Minha duvida é como faço para pegar o resultado da serial e jogar em uma string?
Pessoal, segui este tutorial desse link:
Minha duvida é como faço para pegar o resultado da serial e jogar em uma string?
Você pode pegar o InputStream da sua conexão com a porta Serial, a RXTX deve ter algum método para isso, ler um determinado número de bytes e criar uma String a partir desse bytes lidos:
InputStream in = Conexao.getInputStream();//Deve ter algum método assim na RXTX
byte[] buffer = new byte[10];// Um buffer para armazenar 10 bytes, mas você pode aumentar o tamanho dele
in.read(buffer);//Aqui são lidos 10 bytes e armazenados no buffer anteriormente criado e alocado(observe, no entanto, que talvez não hajam 10 bytes para serem lidos, o método read retorna um int que indica quantos bytes foram lidos, você pode usá-lo para verificações)
String str = new String(buffer, "ISO-8859-1");
Observe agora um outro detalhe. Na hora de construir a String, você deve especificar o array de bytes que contém os bytes lidos pela porta Serial e também deve específicar o Encoding da String, eu coloquei “ISO-8859-1”, mas você deve se certificar de usar o Encoding correto para não ter problemas com a criação da String.
Cara,
Desculpa por minha ignorância mas nw consegui achar o substituto de Conexão neste exemplo que postei.
Poderia me ajudar a achar qual é!?
O main está assim:
public static void main(String[] args) {
//Iniciando leitura serial
SerialComLeitura leitura = new SerialComLeitura("COM2", 57600, 0);
leitura.HabilitarLeitura();
leitura.ObterIdDaPorta();
leitura.AbrirPorta();
leitura.LerDados();
//Controle de tempo da leitura aberta na serial
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println("Erro na Thread: " + ex);
}
leitura.FecharCom();
}
}
Cara,Desculpa por minha ignorância mas nw consegui achar o substituto de Conexão neste exemplo que postei.
Poderia me ajudar a achar qual é!?
Use a classe SerialPort.
Vixi Matheus,
Agora me perdi mesmo, não estou conseguindo importar de jeito nenhum o SerialPort nem a variável porta que chama essa função.
A classe que tem o SerialPort está assim:
public class SerialComLeitura implements Runnable, SerialPortEventListener {
/* public class SerialComLeitura implements Runnable, SerialPortEventListener {
}*/
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;
private boolean IDPortaOK;
private boolean PortaOK;
private boolean Leitura;
private boolean Escrita;
private String Porta;
protected String peso;
public void setPeso(String peso) {
this.peso = peso;
}
public String getPeso() {
return peso;
}
public SerialComLeitura(String p, int b, int t) {
this.Porta = p;
this.baudrate = b;
this.timeout = t;
}
public void HabilitarEscrita() {
Escrita = true;
Leitura = false;
}
public void HabilitarLeitura() {
Escrita = false;
Leitura = true;
}
public void ObterIdDaPorta() {
try {
cp = CommPortIdentifier.getPortIdentifier(Porta);
if (cp == null) {
System.out.println("Erro na porta");
IDPortaOK = false;
System.exit(1);
}
IDPortaOK = true;
} catch (Exception e) {
System.out.println("Erro obtendo ID da porta: " + e);
IDPortaOK = false;
System.exit(1);
}
}
public void AbrirPorta() {
try {
porta = (SerialPort) cp.open("SerialComLeitura", timeout);
PortaOK = true;
//configurar parâmetros
porta.setSerialPortParams(baudrate,
SerialPort.DATABITS_8,
porta.STOPBITS_1,
porta.PARITY_NONE);
porta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
} catch (Exception e) {
PortaOK = false;
System.out.println("Erro abrindo comunicação: " + e);
System.exit(1);
}
}
public void LerDados() {
if (Escrita == false) {
try {
entrada = porta.getInputStream();
} catch (Exception e) {
System.out.println("Erro de stream: " + e);
System.exit(1);
}
try {
porta.addEventListener(this);
} catch (Exception e) {
System.out.println("Erro de listener: " + e);
System.exit(1);
}
porta.notifyOnDataAvailable(true);
try {
threadLeitura = new Thread(this);
threadLeitura.start();
run();
} catch (Exception e) {
System.out.println("Erro de Thred: " + e);
}
}
}
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);
}
}
public void run() {
try {
Thread.sleep(5);
} catch (Exception e) {
System.out.println("Erro de Thred: " + e);
}
}
public void serialEvent(SerialPortEvent ev) {
StringBuffer bufferLeitura = new StringBuffer();
int novoDado = 0;
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:
//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 (IOException ioe) {
System.out.println("Erro de leitura serial: " + ioe);
}
}
setPeso(new String(bufferLeitura));
System.out.println(getPeso());
break;
}
}
public void FecharCom() {
try {
porta.close();
} catch (Exception e) {
System.out.println("Erro fechando porta: " + e);
System.exit(0);
}
}
public String obterPorta() {
return Porta;
}
public int obterBaudrate() {
return baudrate;
}
}
Importe o pacote gnu.io.SerialPort.
Matheus cara to dando trabalho eu sei.
Mas mesmo com o import o erro continua. quando coloco o SeriaPort. ele não tem a função getInputStream();
Alguma sugestão do que posso fazer para conseguir essa string?
Matheus cara to dando trabalho eu sei.Mas mesmo com o import o erro continua. quando coloco o SeriaPort. ele não tem a função getInputStream();
Alguma sugestão do que posso fazer para conseguir essa string?
Você configurou corretamente a RXTX na sua máquina, adicionou o Jar no seu projeto, fez tudo corretamente?
No JavaDoc da classe SerialPort diz possuir esse método, herdado da classe CommPort.
Estranho.
Fiz sim cara.
Tanto que consigo mostrar a leitura no netbeans.
Postei o código completo para vc dar uma olhada. Pq não sei mais o que mexer nisso!
Pessoal,
Alguma sugestão? Pq já mexi tanto neste código que não sei mais o que fazer para pegar essa string.
Pessoal,Alguma sugestão? Pq já mexi tanto neste código que não sei mais o que fazer para pegar essa string.
E por que não fazer o que eu disse? A única forma é cria um array de bytes, ler os bytes da conexão, jogar nesse array e converter o array em uma String, atentando ao fato de usar o encoding correto. Eu olhei seu código, você pode alterar o método ler dados:
public void LerDados() {
if (Escrita == false) {
try {
entrada = porta.getInputStream();
entrada.read(buffer);
dados = new String(buffer, "UTF-8");
} catch (Exception e) {
System.out.println("Erro de stream: " + e);
System.exit(1);
}
try {
porta.addEventListener(this);
} catch (Exception e) {
System.out.println("Erro de listener: " + e);
System.exit(1);
}
porta.notifyOnDataAvailable(true);
try {
threadLeitura = new Thread(this);
threadLeitura.start();
run();
} catch (Exception e) {
System.out.println("Erro de Thred: " + e);
}
}
}
E lá nas declarações das variáveis da classe você coloca:
private String dados;
private byte[] buffer = new byte[10];
Você pode coloca um buffer de tamanho maior, coloquei 10, mas podia ser outro valor.
Cara desculpa a demora em responder. To passando por um problema de saúde serio e to afastado do trabalho. Assim que voltar a ativa vou testar o software e ver se tá funfando!
mas desde já agradeço a ajuda!!!
Cara desculpa a demora em responder. To passando por um problema de saúde serio e to afastado do trabalho. Assim que voltar a ativa vou testar o software e ver se tá funfando!
mas desde já agradeço a ajuda!!!
Que é isso cara, sem problemas. Melhoras!