problema con RXTX e Java(Eclipse)
ho un piccolo programma sull'arduino che mi legge dei caratteri dalla seriale, li elabora e pi me li rispedisce al pc.
dal pc ho un applicazione java che utilizza rxtx per comunicare con l'arduino.
questo è più o meno il codice dell'applicazione java(scusate la formattazione orribile)
l'ultima parte fa solo cose accessorie.
comunque appena viene chiamato questo metodo accade che per un attimo il led rx si accende(e qui tutto ok) ma subito dopo si accende anche il l(che contraddistingue il fatto che l'arduino si resetti) e quindi il programma mi va in timeout.
dove sta l'errore? c'è qualcosa che mi sono dimenticato?
ho letto in un altro topic di aggiungere un delay elevato prima di fare serial.begin() per fare in modo che il programma stia in ascolto, ma allora come funziona il serial monitor? devo stare costantemente in ascolto?
una cosa che ho notato: se nel mio codice metto che ad ogni ciclo scrivo qualcosa sulla seriale allora il codice funziona parzialmente nel senso che riesco leggere ciò che mi manda l'arduino, che però appena ha ricevuto miei dati da pc comunque si resetta(si accende il led l).
avete avuto anche voi problemi simili? come avete risolto?
dal pc ho un applicazione java che utilizza rxtx per comunicare con l'arduino.
questo è più o meno il codice dell'applicazione java(scusate la formattazione orribile)
code: [select]
commportidentifier portid = commportidentifier.getportidentifier("/dev/ttyusb2");
// open serial port, , use class name appname.
serialport = (serialport) portid.open("prova",time_out);
// set port parameters
serialport.setserialportparams(data_rate,
serialport.databits_8,
serialport.stopbits_1,
serialport.parity_none);
// open streams
input = serialport.getinputstream();
output = serialport.getoutputstream();
//send sync string
byte[] asd= {0x5a,0x31,(byte) (0x5a+0x31)};
output.write(asd);
output.close();
string str =new string("");
boolean read=false;
long time = system.currenttimemillis();
while(!read ){
if(system.currenttimemillis()-time>=5000){
read=true;
joptionpane.showmessagedialog(frame.form, "response timeout");
}
character c;
if(input.available()>0){
c = (char)input.read();
if(c.charvalue()!=13&&c.charvalue()!=10)
{
if(c!=-1&&c<255){
str=str.concat(c.tostring());
}
}
else{
read=true;
joptionpane.showmessagedialog(frame.form, "this:"+str);
if(firsttime){
frame.form.add(frame.scrollpane);
frame.form.validate();
firsttime=false;
}
for(int i=0;i<frame.table.getrowcount();i++){
frame.table.removerow(i);
}
string[] values = str.split("\\|");
for(int i=0;i<values.length;i++){
joptionpane.showmessagedialog(frame.form, values[i]);
}
//frame.table.addrow(new object[]{"b","b","b","b"});
frame.table.firetablerowsinserted(0, 2);
}
}
}
input.close();
serialport.close();l'ultima parte fa solo cose accessorie.
comunque appena viene chiamato questo metodo accade che per un attimo il led rx si accende(e qui tutto ok) ma subito dopo si accende anche il l(che contraddistingue il fatto che l'arduino si resetti) e quindi il programma mi va in timeout.
dove sta l'errore? c'è qualcosa che mi sono dimenticato?
ho letto in un altro topic di aggiungere un delay elevato prima di fare serial.begin() per fare in modo che il programma stia in ascolto, ma allora come funziona il serial monitor? devo stare costantemente in ascolto?
una cosa che ho notato: se nel mio codice metto che ad ogni ciclo scrivo qualcosa sulla seriale allora il codice funziona parzialmente nel senso che riesco leggere ciò che mi manda l'arduino, che però appena ha ricevuto miei dati da pc comunque si resetta(si accende il led l).
avete avuto anche voi problemi simili? come avete risolto?
nel tuo codice non vedo la gestione del segnale dtr della seriale, se trasmetti sulla seriale e non lo gestisci correttamente l'arduino si resetta, per info leggi qui
http://www.arduino.cc/playground/learning/autoresetretrofit
ma forse è meglio qui
http://arduino.cc/playground/main/disablingautoresetonserialconnection
con terminali classici, hiperterm, putty, teraterm non ci sono problemi perché il segnale lo gestiscono loro, se ti scrivi il programma lo devi impostare tu.
alberto
http://www.arduino.cc/playground/learning/autoresetretrofit
ma forse è meglio qui
http://arduino.cc/playground/main/disablingautoresetonserialconnection
con terminali classici, hiperterm, putty, teraterm non ci sono problemi perché il segnale lo gestiscono loro, se ti scrivi il programma lo devi impostare tu.
alberto
Arduino Forum > International > Italiano > Generale (Moderator: leo72) > problema con RXTX e Java(Eclipse)
arduino
Comments
Post a Comment