Sensori infrarossi Sharp

ciao a tutti sto usando dei sensori infrarossi ma vorrei che il programma non leggesse continuamente i valori ma leggesse solo un valore singolo nel momento in cui un ostacolo interrompe il flusso in modo da evitare che rimanendo sopra con la mano vengano visualizzati tutti i valori che scorrono.
Come è possibile farlo?

ho provato in questo modo ma non funziona moltissimo

boolean run = false;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(250000);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue1 = analogRead(A0);
int longletter = 1;
Serial.println(sensorValue1);
if (sensorValue1 > 350 && run == false ) {
  Serial.print(longletter);
  Serial.print (' ');
  Serial.println(sensorValue1);
 run = true;  //don't need to declare again
  } // end of if

if (sensorValue1 < 350) {
 run = false;
} //end of if

} // end of loop

Crea un'altra variabile (read) che indichi la lettura effettuata:

boolean read = false;
 ...
int sensorValue1 = analogRead(A0);

  if (sensorValue1 > 350) run = true;
  else {
    run = false;
    read = false;
  }

  if (run == true && read = false) {
    Serial.println(sensorValue1);
    read = true;
  }

**@carolina19: **ti ricordo che in conformità al regolamento, punto 7, devi editare (in basso a destra del post, bottone More → Modify) il tuo post e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

Grazie per l'aiuto ho provato ad aggiungere il tuo codice ma funziona per i primi secondi e poi mi appere una lista di valori continua magari c'è qualcosa di sbagliato allego il codice..

boolean run = false;
boolean read = false;
// the setup routine runs once when you press reset:
void setup() {
 // initialize serial communication at 9600 bits per second:
 Serial.begin(250000);
}

// the loop routine runs over and over again forever:
void loop() {
 // read the input on analog pin 0:
 
int sensorValue1 = analogRead(A0);

  if (sensorValue1 > 350)  {
  run = true;
  }
  else {
    run = false;
    read = true;
  }
  if (run == true && read == false) {
    Serial.println(sensorValue1);
    read = false;
  }
}

Hai invertito read = false con read = true: confronta con il listato che ti ho inviato.

Anche la Serial.begin(250000) mi sembra troppo elevata!

@carolina19: Prima di tutto, non avendolo tu ancora fatto, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ...

... poi, in conformità al suddetto regolamento, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai già posto la stessa domanda QUI.

Non solo, in quel thread ti hanno già risposto e ti stanno ancora rispondendo (l'ultima risposta è di ieri alle 16:44) ... ed è veramente poco cortese abbandonare una discussione e chi ti stava aiutando, per venire di qua a porre la stessa domanda come a significare ... "mica mi fido tanto, ora vado a verificare da un'altra parte". ::slight_smile:

Pertanto, in conformità al regolamento, questo thread viene chiuso e cortesemente continua nell'altro thread dove hai già parecchie risposte.

Guglielmo