Buenas a todos, ya escribí en los foros ingleses pero no han sabido respondeme aún (por lo menos a el problema completo), entonces a ver si por aquí podeis ayudarme.
Resulta que estoy intentando realizar una comunicación serial entre una aplicación java y arduino, para que arduino responda con un mensaje u otro en función de lo que envie la aplicación java (algo así como una conversación). El problema está en que tengo que enviar varios datos desde el puerto serie desde java para obtener una respuesta por parte de arduino, es decir, si quiero que al enviar "REQ;" desde java, arduino me responda "REQ;OK" lo hace a la segunda vez que envie (con REQ;REQ; recibo un solo REQ;OK) y no se muy bien donde está el error, he estado buscando en distintos sitios pero no he encontrado a nadie que le pase lo mismo. Os dejo aquí el código por si veis algún error o alguien ha tenido el mismo problema:
----conversacion----
String mensaje="REQ;";
boolean entrado=false;
do{
port.write(mensaje);
System.out.println("sent");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!port.getLastValue().equals("")){
System.out.println(port.getLastValue());
entrado=true;
}
}while(!entrado);
El sleep lo pongo porque si no enviaría 15-20 envios por el puerto serie antes de recibir la primera respuesta, y yo quiero recibir una respuesta por cada envio.
---escritura puerto serie---
public synchronized boolean write(String text){
try{
outputStream.write(text.getBytes());
outputStream.flush();
}catch(IOException e){
return false;
}
return true;
}
-----lectura---
@Override
public synchronized void serialEvent(SerialPortEvent oEvent) {
String value="";
byte[] buffer = new byte[20];
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
int numbytes=0;
while(inputStream.available()>0){
numbytes = inputStream.read(buffer);
}
for(int i=0; i < numbytes;i++){
lastValue+=(char)buffer*;*
- }*
- } catch (Exception e) {*
- System.err.println(e.toString());*
- }*
- }*
- }*
--------ARDUINO----------
char inChar;
boolean entrado=false;
String cadena="";
void setup()
{ - Serial.begin(115200);*
}
void loop() { - while(Serial.available()>0){*
- inChar = (char)Serial.read();*
- cadena+=inChar;*
- if(inChar==';')*
- entrado=true;*
- }*
- if(entrado){*
- cadena+="OK";*
- Serial.print(cadena);*
- entrado=false;*
- cadena="";*
- }*
}
----------
Muchas gracias de antemano y saludos!! =)