Go Down

Topic: Comunicazione Seriale (Read 146 times) previous topic - next topic

RootPoi

Buon pomeriggio a tutti, vorrei esporvi qualche problema/dubbi in cui sto incombendo in un progetto personale, niente di particolarmente complesso o eclatante:
sto tentando di far comunicare il mio PC(Windows 10 x64) con una scheda Arduino Mega usando il protocollo seriale, in cui trasmetto e ricevo dati usando un codice java (uso NetBeans 8.1), adesso cercando sulla rete e leggendo un pò, ho inizialmente utilizzato una libreria chiamata JSSC, molto facile tutto sommato da utilizzare in cui sono riuscito a comunicare con la scheda, che riceve correttamente tutte le informazioni che mando tramite questo codice, il problema usando questa libreria si presenta quando tento di ricevere informazioni, utilizzando la Serial.Write() invio i dati, se tento di inviare una stringa, questa arriva al pc ma accadono cose strane  :) , ovvero nel seguente codice di ricezione (Listener):
Code: [Select]
import java.util.logging.Level;
import java.util.logging.Logger;
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;

/**
 *
 * @author GAle
 */
public class PortListener implements SerialPortEventListener {
   
    private SerialPort com;
    private byte[] bytes;
    public PortListener(SerialPort com) {
        this.com = com;
    }
    @Override
    public void serialEvent(SerialPortEvent ev) {
        if (ev.getEventValue() > 0){
            try {
                bytes = com.readBytes();
                System.out.println(new String(bytes));
            } catch (SerialPortException ex) {
                Logger.getLogger(PortListener.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

che poi sarebbe quello di esempio fornito dalla libreria, accade che vengono creati multipli array di differenti dimensioni che poi vengono stampati diversamente, un esempio, se mando "ciao" in uscita da java potrei avere "ciao" come potrei avere "ci" "a" "o" e tutte le possibili combinazioni immaginabili, alla fine non sono riuscito a sistemarlo e ho tentato di cambiare libreria usando la RXTX, copiando da qui:

https://playground.arduino.cc/Interfacing/Java

(prima ho tentato di fare da solo ma quando avviavo la sequenza di apertura:
Code: [Select]
commPort = portIdentifier.open("Comunicazione 1", 2000);
accade che la scheda arduino si riavvia e basta allora ho pensato di copiare il codice originale)

il codice e provandolo, ma mi da lo stesso identico risultato del codice che ho tentato di scrivere io, ovvero alla seguente riga:
Code: [Select]
serialPort = (SerialPort) portId.open(this.getClass().getName(),TIME_OUT);
la scheda si riavvia e basta...

non so se le informazioni siano sufficienti ad aiutarmi, però non volevo nemmeno scrivere un poema più lungo di quanto già non sia questo!

Sapreste indicarmi qualche consiglio su cosa sbaglio o sul perché mi dia questi errori?

Etemenanki

Ciao ... prima che passi un mod a sgridarti, potresti cortesemente presentarti, come da regolamento (punto 13) nell'apposito thread, spiegando quali conoscenze hai di elettronica e di programmazione, e possibilmente evitando di scrivere solo una riga di saluto, e leggere, appunto, il regolamento del forum ... grazie.
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

RootPoi

grazie dell'avviso, mi sono presentato, comunque sono riuscito a risolvere spulciando ancora un po sulla RXTX, anche se continuo a non capire perché ogni volta che apro la connessione la scheda si riavvia.

gpb01

#3
Aug 13, 2017, 09:00 pm Last Edit: Aug 13, 2017, 10:08 pm by gpb01
... anche se continuo a non capire perché ogni volta che apro la connessione la scheda si riavvia.
... perché è così che funziona Arduino. Ogni volta che si apre la seriale viene effettuato un reset ed il bootloader verifica se c'è del codice da caricare, alitrimenti passa il controllo al tuo programma.

C'è qualche trucco per disattivare la cosa (... che però blocca il caricamento dei nuove versioni del programma fino a quando non si riattiva), se fai un po' di ricerche con Google trovi tutto.

Guglielmo
Search is Your friend ... or I am Your enemy !

RootPoi

... perché è così che funziona Arduino. Ogni volta che si apre la seriale viene effettuato un reset ed il bootloader vedrifica se c'è del codice da caricare, alitrimenti passa il controllo al tuo programma.
mi è chiaro, ma questo mi capita solo se uso RXTX, se utilizzo la JSSC (tralasciando il problema in ingresso) ogni volta che lo collego non si resetta la scheda, ne tanto meno se utilizzo il monitor seriale di VisualMicro per Visual Studio che ha il tastino di connessione, probabilmente fanno cose differenti.
Grazie mille per la risposta.

Go Up