Pages: [1]   Go Down
Author Topic: problema con RXTX e Java(Eclipse)  (Read 665 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Code:

CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("/dev/ttyUSB2");
// open serial port, and use class name for the 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 the streams
input = serialPort.getInputStream();
output = serialPort.getOutputStream();
//Send the 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 a leggere ciò che mi manda l'arduino, che però appena ha ricevuto i miei dati da PC comunque si resetta(si accende il led L).
Avete avuto anche voi problemi simili? come avete risolto?
Logged

Milan, Italy
Online Online
Sr. Member
****
Karma: 0
Posts: 329
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 i 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
« Last Edit: April 05, 2012, 08:51:23 am by bigjohnson » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

uhm...ho capito che procedimento è spiegato..infatti è lo stesso utilizzato per utilizzare l'arduino come programmatore...
un jumper sarebbe l'ideale comunque...smiley-grin
Anche l'Arduino IDE se si apre il serial monitor da lo stesso problema?neanche loro ci hanno pensato?

aspettando 5-6 secondi si risolve tutto e l'arduino non i resetta finchè lo chiudo.
comunque con l'RXTX sembra non esserci soluzione(software) o ho letto male?
Logged

Milan, Italy
Online Online
Sr. Member
****
Karma: 0
Posts: 329
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Con il serial monitor di arduino non ci sono problemi, non dovrebbe resettare l'arduino, prova a cambiare lo stato del dtr prima di inviare i caratteri, deve funzionare, per esempio il serial monitor di arduino quando apri la porta seriale non lo resetta, ho provato anche altri emulatori di terminale e non ho mai avuto problemi.
Se aspetti e non invii caratteri il boot loader non parte e si avvia l'applicazione, ma questo non è corretto l'arduino non si deve resettare.
Hai letto questo?
http://arduino.cc/playground/Interfacing/Java
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boh...con il mio arduino noto che premendo su "Tools" dell'IDE si resetta l'Arduino e per un paio di secondi non risponde(aprendo velocemente il serial monitor)
con rxtx ho trovato il parametro setDTR e ho risolto parzialmente, riducendo a 1,5-2 secondi il tempo di risposta dell'arduino, ma non sono riuscito a non farlo resettare(anche nella guida per interfacciarlo parla di un tempo di sleep del thread di almeno 1500 ms)
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21656
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Con il serial monitor di arduino non ci sono problemi, non dovrebbe resettare l'arduino
L'apertura del serial monito di Arduino resetta la scheda eccome.

Boh...con il mio arduino noto che premendo su "Tools" dell'IDE si resetta l'Arduino
Anche questo è "normale", perché l'IDE fa una scansione delle porte per vedere se trova un Arduino collegato ad una di esse per cui l'apertura della comunicazione seriale, si sa, da il reset all'Arduino gli Arduino sono progettati per comportarsi così. Se volete togliere questo "difetto" dovete interrompere il jumper di stagno "RESET-EN" che c'è sulla schedina, ma poi non potete più programmare l'Arduino dall'IDE senza premere a mano il tastino reset.

Delle 2, l'una: scegliete quella che più vi piace.  smiley-wink
Reset all'apertura della seriale -> programmazione senza pressione del pulsante
Eliminazione del reset all'apertura della seriale -> programmazione con pressione del pulsante di reset
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,
premetto che ho una arduino uno in arrivo...
ma poiche sono intressato alla comunicazione seriale ho già letto alcuni post...
Guardate questo link:

http://electronics.stackexchange.com/questions/24743/arduino-resetting-while-reconnecting-the-serial-terminal

Connettre un condensatore da 22microF tra il Reset e GND per non far autoresettare la scheda..toglierlo per programmarla...

di certo soluzione molto più comoda che permette di mantenere la garanzia.
Fate sapere se funziona...
Logged

Pages: [1]   Go Up
Jump to: