comandare avvio/sospensione loop

Ciao a tutti!

Sto cercando di inviare da java dei caratteri per comunicare con arduino... a che scopo?

Mi serviranno dopo che è stato caricato su arduino il codice tramite usb.
Infatti, una volta caricato il codice, la comunicazione con il pc avverrà tramite ethernet e come sapete bene il codice del loop (a differenza del setup), continuerà ad essere eseguito all'infinito.

I caratteri che devo inviare dal pc, sempre tramite ethernet sono i seguenti:

  • 'b' per avviare arduino, far partire il codice nel loop (o eventualmente, se era già stato interrotto, per far ripartire nuovamente l'esecuzione)
  • 'c' per fermare l'esecuzione del programma

Ovviamente bisogna sfruttare qualche condizione particolare su una o più variabile ad esempio.

La cosa non è difficilissima, ma è da un pò che ci sono su...

Qualcuno di voi ha 5 minuti da dedicarmi? Secondo me a qualcuno basta un'occhiata rapida per capire come fare.

Ho già fatto alcune prove, ma senza risultato soddisfacente.
La maggior parte delle volte succede che al click del bottone AVVIA, con conseguente invio verso arduino del carattere 'b', arduino esegue il loop una volta sola, mentre vorrei cercare di farlo continuare all'infinito, o finchè non viene interrotta l'esecuzione cliccando STOP, con conseguente invio verso arduino del carattere 'c'.

Questo è il pezzo di codice:

int stato; //variabile che vorrei usare per determinare se ripetere il loop o meno

void setup(){
  Ethernet.begin(mac, ip); 
  Serial.begin(9600);      
  
  stato=0; //inizializzazione a 0. Solo in fase di setup
  
  if (client.connect()){
      Serial.println("Connessione riuscita");
  }
  else{
      Serial.println("Connessione fallita");             
  }
}



void loop(){
  if(client.connected()){
         
     stato=ricezioneComandoStartStop();
     if(stato==1){ //start-> vorrei eseguire le seguenti funzioni finchè da java non viene inviato 'c'
        rilevazioneSegnaliAnalogici(); //funzione 1
        rilevazioneSegnaliDigitali();   //funzione 2
     }
  }  
  else
    Serial.println("Non sei più connesso");
}

int ricezioneComandoStartStop(){
    
    char carattereDaJava=ricezioneEventualiDatiDaJava();
    if (carattereDaJava=='b') 
         return 1;
    if (carattereDaJava=='c') 
         return 2;
}  
       
char ricezioneEventualiDatiDaJava(){
            
    if (client.available() > 0) {
      char inByte = client.read(); //lettura carattere
      switch (inByte) {
          case 'a': //reset contatori    
          //...
          break;

        case 'b': //start arduino    
              return 'b';
          break;

        case 'c': //stop arduino    
             return 'c';
      }
    }
}

Forse ho trovato cosa non andava...
Nella funzione ricezioneEventualiDatiDaJava() ritornavo un intero anzichè un carattere.

So che la soluzione adottata non è il massimo, vedrò di migliorarla, comunque i vostri consigli sono ben accetti! :slight_smile:

Grazie

Francesco

Risolto utilizzando un controllo nell'if su una variabile booleana.

Con l'intero non funzionava, molto strana questa cosa, però ho risolto :slight_smile: