Ricezione porta seriale(USB)

di il
4 risposte

Ricezione porta seriale(USB)

Buongiorno a tutti,

     Dopo tante prove, mi rivolgo a voi per un suggerimento.

Ho scritto un semplicissimo programma che mi permette di interfacciami con Arduino. Invia, ogni due secondi circa la temperatura e l'umidità.

Utilizzo la libreria  jserialcomm versione 2.9.2 , per comunicare.

Scrivo la classica routine di ricezione :

  @Override
  public void serialEvent(SerialPortEvent event) {


         int size = event.getSerialPort().bytesAvailable();
         byte[] buffer = new byte[size];
         for(byte b:buffer){
                     System.out.print((char)b);
                     ricevuto = ricevuto + (char)b;
          }//end for

    Come si può vedere , oltre a stampare nella console dell'IDE(tutto bene) memorizzo la stringa ricevuta in una variabile(ricevuto), per le elaborazioni successive.

Il problema è che non riuscendo a resettare il buffer di ricezione, la variabile, ricevuto, diventa sempre più capiente e di conseguenza non riesco a fare le elaborazioni come si deve.

Mi rivolgo al forum, per un suggerimento di come affrontare il problema.

Grazie

Nicholas

4 Risposte

  • Re: Ricezione porta seriale(USB)

    Devi controllare la presenza del carattere new line 

    Se lo ricevi, stampi e svuoti la variabile per la prossima ricezione

  • Re: Ricezione porta seriale(USB)

    Confermi che quel codice è stato scritto al volo qui sul forum e non è quello reale?

    Perchè a parte “stampare” (che non stampa nulla) e memorizzare una riga di zeri, altro non fa. :)

  • Re: Ricezione porta seriale(USB)

    24/07/2023 - SpiritoLibero ha scritto:


    Confermi che quel codice è stato scritto al volo qui sul forum e non è quello reale?

    Perchè a parte “stampare” (che non stampa nulla) e memorizzare una riga di zeri, altro non fa. :)

    Si certo è soltanto la parte di codice che mi interessa modificare

  • Re: Ricezione porta seriale(USB)

    Salve a tutti,

    ho risolto.

         spipolando su internet ho trovato un codice come desideravo.

    Ovviamente, lo posto così tutti possano utilizzarlo se vogliono.

    Pratiacamente si genera un THread :

    Thread thread1 = new Thread(){
                
                     @Override
                     public void run(){
                         Scanner Scan = new Scanner(activePort.getInputStream());
                         while (Scan.hasNextLine())
                         {
                             line = Scan.nextLine();
                             System.out.println(line);
     
                         }
    
    
                         Scan.close();
        
                     }
                     
                     
                
            };
           
    
           thread1.start();
           

    PS  Ovviamente, questo è la parte saliente del programma.

Devi accedere o registrarti per scrivere nel forum
4 risposte