comunicazione pc-arduino

Salve,
devo svolgere un progetto con arduino in cui devo far comunicare arduino con un pc (con il cavo) e devo mandare al pc dei pacchetti, il pc deve aprire questi pacchetti leggere le informazioni e inviarle ad arduino per fargli fare qualcosa.

Le mie domande sono le seguenti :

come faccio a far comunicare arduino col pc ?
come faccio a dire ad arduino di fare ciò che il pc gli dice (in risposta al msg ricevuto) ?

Grazie in anticipo :slight_smile:

  1. con la seriale.
  2. scrivendo un prpgramma che in base ai messaggi ricevuti (che devono essere conosciuti prima, non i messaggi in ordine, ma le possibilità) attivi funzioni diverse chw fanno quello che serve

che intendi con "(che devono essere conosciuti prima, non i messaggi in ordine, ma le possibilità) "?

Vi faccio un esempio concreto, ho un sensore di temperatura e ogni tot secondi invio un mes al pc con la temperatura ecc
Sul pc una volta ricevuto il messaggio voglio spedire ad arduino un messaggio dal pc (magari su arduino faccio una chiamata bloccante(?) ) ovviamente predefinito, tipo accendi una lampadina per quella temperatura ecc.

non so come fare una chiamata bloccante per aspettare il msg(non sono esperto del software di arduino) e una chiamata per leggere il msg ricevuto <---------- qualcuno conosce qualche funzione ?

direi che la cosa pi√Ļ immediata sia creare su arduino il programma che invia i messaggi e anche che a seconda delle risposte esegua determinate operazioni

poi sul pc devi fare un altro programma a questo punto direi in pyton o con processing che riceva i messaggi da arduino e risponda in determinato modo

(potrebbe essere pi√Ļ semplice se facesse tutto arduino sia la rilevazione dei sensori che la decisione da intraprendere a seconda dei valori ottenuti :wink: )

Non devi bloccare il programma.

Da computer invii un comando, scriverai un programma per PC col linguaggio che conosci, il comando può essere un semplice carattere, ad ogni carattere ricevuto richiami una funzione specifica che fa una determinata cosa. Al posto di un carattere, puoi inviare una stringa "una parola", e in questo caso farai il confronto con le parole-stringhe.

Non c'è bisogno che blocchi il programma, arduino per gestire la seriale dispone del metodo
Serial.available(), che dice se sulla seriale ci sono caratteri da leggere.

Quindi nel loop(), metterai un controllo,

se sulla seriale ci sono caratteri, leggi il comando

se il comando è uguale a xxxx esegui questa funzione

void loop(){
    
       if(Serial.available()){ // Solo se ci sono caratteri sulla seriale
       
            char comando=Serial.read(); // Legge il carattere di comando
           
            switch(comando){
                 case 'a':
                      funzione1();
                      break;
                  case 'b':
                       funzione2();
                       break;
                  case 'c':
                        funzione3();
                        break;

            }
       }


}

void funzione1(){

  // codice da eseguire col comando 'a'
}

void funzione2(){
  //codice da eseguire col comando 'b'

}


void funzione3(){
  
  //codice da eseguire col comando 'c'

}

Se invece il comando √® una stringa procederai in un modo un po pi√Ļ complicato, cio√® prima un ciclo che legga tutta la stringa, e poi il confronto delle stringhe tramite funzione strcmp(), se le stringhe sono in stile C. Se la stringa √® un oggetto string si procede in un modo ancora diverso, ma √® meglio usare stringhe in stile C cio√® array di char.