raspberry e arduino

ciao ragazzi mi trovo in difficoltà . Da premettere che mi funziona tutto e adesso vi spiego cosa vorrei fare.
Ho un arduino collegato a raspberry tramite porta usb .
in pratica arduino stampa valori di un sensore del vento sulla seriale e raspberry lo riceve.

 float diameter = 2.75;
 
 // read RPM
 int half_revolutions = 0;
 int rpm = 0;
 unsigned long lastmillis = 0;
 
 void setup(){
 Serial.begin(9600); 
 pinMode(2, INPUT_PULLUP); 
 attachInterrupt(0, rpm_fan, FALLING);
 }
 
 void loop(){
 if (millis() - lastmillis == 1000){
 detachInterrupt(0);
 rpm = half_revolutions * 30; 
 Serial.print("RPM =\t");
 Serial.print(rpm);
 Serial.print("\t Hz=\t"); 
 Serial.print(half_revolutions/2);
 half_revolutions = 0; 
 lastmillis = millis();
 attachInterrupt(0, rpm_fan, FALLING);
 mph = diameter / 12 * 3.14 * rpm * 60 / 5280;
 mph = mph * 3.5; 
 Serial.print("\t MPH=\t"); 
 Serial.println(mph);
  }
 }

 void rpm_fan(){
  half_revolutions++;
 }

funziona molto bene solo che il codice mi stampa sempre il valore del sensore .Si protrebbe fare che stampa il valore solo se riceve qualcosa sulla seriale?

Metti una istruzione tipo

if(Serial.available()) inviavalori();

nel loop.
Credi una funzione inviavalori, dove dentro metti i vari serial.print.
Inoltre potresti anche differenziare il valore inviato sulla base dei caratteri ricevuti via seriale. Fai un lettura con Serial.read e se corrisponde ad un dato carattere invii con il Serial.print il dato corrispondente.

mi puoi spiegare meglio.A me interessa solo che se scrivo qualcosa sulla seriale arduino risponde con i valori del sensore.

Esempio

if (Serial.available() > 0) {
    char incomingByte = Serial.read();
    if (incomingByte == "R")
        {
                Serial.println(rpm);
        }
 }

Teoricamente, e sempre se compila correttamente, se invii dal Rasp la lettera R l'Arduino risponde inviando i giri al minuto.
Puoi mettere più in in cascata per vari dati.

ho risolto grazie al tuo aiuto. Ci sto studiando un po sù. :wink: