aggiornamento dati da seriale AIUTO!!!

salve a tutti, oggi stavo provando a scrivere un semplicissimo programmino per rilevare la percentuale di luce nell’ambiente e trasferirla via seriale.Volevo un risultato nel moritor statico tipo questo:
–quantità di luce(%)–
7
—fine—
e lo avuto…
inoltre volevo aggiornarlo ogni qual volta che gli inviavo un valore 1…come faccio senza che me lo ripeta all’infinito?
questo è il programma

void setup(){
Serial.begin(9600);
int luce = analogRead(A0);
const int k=100;
Serial.println("----inizializzo la sonda-----");
delay(1000);
if(luce <= 0){
Serial.println("---- sonda non trovata----");
}

else{
Serial.println("----sonda trovata----");
delay(1000);
Serial.println(“percentuale di luce(%)”);
Serial.println(luce/k);
}

}

void loop(){

}

Sposti la stampa del sensore da setup() a loop() e poi quella porzione di codice la incapsuli all'interno di un controllo sui caratteri in arrivo dalla seriale, di modo che la stampa del valore del sensore sia fatta solo se sulla seriale arriva il carattere che hai scelto tu:

In "quasi" codice:

void loop() {
  if (Serial.available()) {
    if (Serial.read()==COD.CARATTERE) {
      ...
    }
  }
}

provo come dici tu ma sembra non rispondere all'invio del carattere....

Posta il codice.

void setup(){
Serial.begin(9600);
int luce = analogRead(A0);
const int k=100;
Serial.println("----inizializzo la sonda-----");
delay(1000);
if(luce <= 0){
Serial.println("---- sonda non trovata----");
}
else{
Serial.println("----sonda trovata----");
delay(1000);
Serial.println(“percentuale di luce(%)”);
Serial.println(luce/k);

}

}

void loop() {
int luce = analogRead(A0);
const int k=100;
if (Serial.available()) {
if (Serial.read()==32) {
Serial.println("----sto aggiornando----");
delay(1000);
Serial.println(“percentuale di luce(%)”);
Serial.println(luce/k);

}
}
}

La cosa è un po' complessa perché va capito come lavora la seriale. La seriale spedisce singoli byte. Quindi tu assegni il carattere in ricezione ad un byte e poi lo tratti con il suo codice ASCII. Nel tuo sketch, 32 è il codice ASCII dello spazio, per cui se premi lo spazio e poi premi invio il seguente codice ti funzionerà:

void setup(){
    Serial.begin(9600);
    delay(2000);
    Serial.println("Ciao");
    delay(1000);
    Serial.println("Invia 'spazio' se vuoi che ti risponda");
}

void loop() {
    byte temp;
    if (Serial.available()) {
        temp=Serial.read();
        Serial.flush();
        if (temp==32) {
            Serial.println("Cucu'....");
            delay(1000);
       }
    }
}

Per farlo funzionare con "1", devi usare 49, che è il codice ASCII di 1.

grazie mille!!! funziona perfettamente!

comunque piuttosto che scrvere il valore ascii del carattere, puoi usare il carattere tra apici singoli, ad esempio ‘1’ o ’ '(spazio) o ‘a’.

ovviamente NON funziona per le stringhe, che vanno elaborate a mano!