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!
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) {
}
}
}
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:
[IMG]http://img530.imageshack.us/img530/9076/oquedeveriaser.th.jpg[/IMG]
Uploaded with ImageShack.us
O que eu estou lendo é isso:
[IMG]http://img716.imageshack.us/img716/8371/oqueestoulendo.th.jpg[/IMG]
Uploaded with ImageShack.us
Teria como alguem me da uma ajuda? Estou meio desesperado pois sou leigo no assunto :|

