lettura sensore continuativa

Buonasera,

usando un sensore di rumore ho creato uno sketch che mi permette di accendere un led quando i valori superano quelli di una determinata soglia; come secondo step vorrei fare in modo che il led si accenda solo dopo che la soglia è stata superata per un tot di tempo definito a priori. (L'idea è quella di accendere il led come monito al silenzio in un'aula studio ma vorrei per esempio evitare che un semplice e breve starnuto attivasse il sensore).

Ho fatto varie ricerche purtroppo a vuoto, qualcuno ha un'idea da propormi?

Grazie

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

ciao
posta lo sketch, come primo suggerimento devi studiarti il millis()

Ciao! Il problema è il tipo di dato che vuoi rilevare... il sensore in questione infatti non ti dà per tot secondi un segnale alto se qualcuno fa rumore, ma te lo darà a tratti!
La cosa migliore è quindi innescare un "timer" tramite la funzione millis() al rilevamento di un primo suono alto, se entro la fine di questo timer si rileverà un secondo suono alto allora si accende il led, altrimenti alla fine del timer il conto si azzera.
Se hai problemi con il codice (ma solo dopo che ci avrai provato e riprovato da solo!) chiedi pure!

Grazie anzitutto per le risposte, ho alcuni concetti base di programmazione ma non troppo. vi posto il codice che ho elaborato (sto usando arduino Yun collegato a Blynk), la mia idea era quella di far leggere x volte il valore del segnale (di qui il ciclo for e l'array) e farne una media da confrontare con il valore di soglia. Il problema è che, usando l'esempio di test del sensore fornito da Makeblock ho dei valori differenti rispetto alla media che ottendo (che praticamente non varia anche se urlo nel sensore per 10s).
Ho letto la funzione millis(), ma non saprei come impiegarla al posto del for o del delay. come noterete io voglio far accendere il segnale sull'app e anche un led fisico al pin 13.

#include <Makeblock.h>
#include <Bridge.h>
#include <BlynkSimpleYun.h>
#include <SimpleTimer.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#define BLYNK_PRINT Serial

char auth[] = "27a337d5df5d408dacf01f063f3a2dd2";

 SimpleTimer timer;
int noise = 0;
const int soglia = 400;
int sound;
const int numReadings = 10;
int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average
WidgetLCD lcd(3);

MeSoundSensor mySound(A0);
void setup()
{
    Serial.begin(9600);
    Blynk.begin(auth);
    pinMode(13, OUTPUT);
    Blynk.virtualWrite(noise,LOW);
    // initialize all the readings to 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
    lcd.clear(); 
  }
}

void sendUptime()
{
  sound = mySound.strength(); //legge il segnale audio
  Blynk.virtualWrite(5, A0);
}


void loop(){

  Blynk.run(); // and the magic begin
   timer.run(); // Initiates SimpleTimer
 //  Blynk.virtualWrite(5, average);
   total = 0;
   sound = mySound.strength();
  if(sound > soglia){
    for(readIndex = 0; readIndex < numReadings; readIndex++){
    // read from the sensor:
  readings[readIndex] = mySound.strength();
  // add the reading to the total:
  total += readings[readIndex];
   Blynk.virtualWrite(noise, HIGH);
    digitalWrite(13,HIGH);
    }
    
   }
   if (sound<soglia) {
    Blynk.virtualWrite(noise, LOW);
     digitalWrite(13,LOW);
   }
  // calculate the average:
  average = total / numReadings;
lcd.print(4,0,average);

   
 
}

Perchè non provi a fare ciò che ti ho descritto?
Prova a scrivere un codice in cui appena rilevi un suono oltre la soglia che vuoi "inizia una timer", questo timer si fa appunto con la funzione millis(), inserendo il valore millis() in una variabile saprai il tuo "tempo iniziale" (quando c'è stato il primo suono) quindi con un if controlli che questo suono sopra la soglia non venga ripetuto, se viene rilevato di nuovo il suono scatta "l'allarme", se invece il timer "finisce" cioè quando i tuoi [millis() - "tempo iniziale"] raggiunge un certo valore allora il programma ritorna in "allerta": cioè riaspetta che qualcuno rifaccia rumore. Se riviene fatto un rumore riparte il timer e rinizia il tutto.

Grazie mille! seguendo il vostro suggerimento rigurado al "millis" sono riuscita a fare quello che volevo e ho risorto anche altri problemi