Olá galerinha, estou com um grande problema e gostaria de uma ajuda dos senhores…
Estou fazendo um projeto para o TCC e gostaria de manipular os dados atraves de uma porta serial usando o java. O problema no entanto é que toda as vezes que eu faço a leitura da porta serial, ele lê esses dados picotados! O baud rating do java e o do Arduino que estou usando estão ambos setados em 9600…
Era para ser uma simples tarefa de leitura, mas a parte do java esta complicada! ;\
Parte do codigo eu peguei do blog do prototipo!
[code]package serial;
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;
/**
*
-
@author prototipo
*/
public class SerialComm implements SerialPortEventListener {String total = new String();
InputStream inputStream;
public void execute() {
String portName = getPortNameByOS(); CommPortIdentifier portId = getPortIdentifier(portName); if(portId != null) { try { SerialPort serialPort = (SerialPort) portId.open(this.getClass().getName(), 2000); inputStream = serialPort.getInputStream(); serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (PortInUseException e) {} catch (IOException e) {} catch (UnsupportedCommOperationException e) { e.printStackTrace(); } catch (TooManyListenersException e) {} } else { System.out.println("Porta Serial não disponível"); }
}
/**
-
Get The port name
**/
private String getPortNameByOS() {String osname = System.getProperty(“os.name”,"").toLowerCase();
if ( osname.startsWith(“windows”) ) {
// windows
return “COM4”;
} else if (osname.startsWith(“linux”)) {
// linux
return “/dev/ttyS0”;
} else if ( osname.startsWith(“mac”) ) {
// mac
return “???”;
} else {
System.out.println(“Sorry, your operating system is not supported”);
System.exit(1);
return null;
}
}
/**
*Get the Port Identifier
**/
private CommPortIdentifier getPortIdentifier(String portName) {
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
Boolean portFound = false;
while (portList.hasMoreElements()) {
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
System.out.println("Available port: " + portId.getName());
if (portId.getName().equals(portName)) {
System.out.println("Found port: "+portName);
portFound = true;
return portId;
}
}} return null;
}
public void serialEvent(SerialPortEvent event) {
switch (event.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: total =""; readSerial(); System.out.println(total); break; }
}
/**
- Buffer to hold the reading
*/
private byte[] readBuffer = new byte[400];
private void readSerial() {
try {
int availableBytes = inputStream.available();
if (availableBytes > 0) {
// Read the serial port
inputStream.read(readBuffer, 0, availableBytes);// Print it out //System.out.println( //new String(readBuffer, 0, availableBytes)); total = total+new String(readBuffer, 0, availableBytes); } } catch (IOException e) { }
}
-
}
[/code]
O simplório codigo em C:
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(1);
delay(150);
int sensorValue2 = analogRead(0);
delay(150);
int sensorValue3 = analogRead(2);
delay(150);
sensorValue = (sensorValue*1.3012)
sensorValue2 = (sensorValue2*1.3012);
sensorValue3 = (sensorValue3*1.3012);
String sv = String (sensorValue,DEC);
String sv2 = String (sensorValue2,DEC);
String sv3 = String (sensorValue3,DEC);
String porta =(sv+" "+sv2+" "+sv3);
Serial.println(porta);
delay(250);
}
O que eu leio com o programa da Rogercom ou o simulador de porta serial do Arduino é isso, ou seja que eu desejo ler na porta serial pelo java:
Uploaded with ImageShack.us
O que eu estou lendo é isso:
Uploaded with ImageShack.us
Teria como alguem me da uma ajuda? Estou meio desesperado pois sou leigo no assunto