Blink continuo led per un periodo voluto

Ciao a tutti, vi chiedo un cortese aiuto su un progettino che ho iniziato.
Nello sketch allegato voglio far lampeggiare un led per la stessa durata del buzzer (2 secondi) o per un periodo a piacimento. Il problema si presenta quando collegando un sensore, in questo caso una fotoresistenza, il led lampeggia solamente per la durata del dell'evento determinato. Io vorrei che continuasse a lampeggiare anche per un periodo sucessivo per poi smettere.
SGoogolando ho provato millis ed altro, l'unica soluzione che sto adottando è una cifra di HIGH e LOW tra delay (prova3-nello sketch).
Nello sketch ci sono le tre prove che sto adottando (prova1/prova2/prova3).
Grazie per eventuali commenti e consigli.
Scusate i miei strafalcioni che troverete nel listato.
Ah.. Auguri a tutti!!!

Cristiano

[code]
int sensorPin = A0; // fotoresistenza

const byte ledallarme = 10;
byte ledState = 0;
byte i=0;
int stato=0;
int sensorValue = 0;
int buzzer = 11;
unsigned long previousMillis = 0;
unsigned long interval = 100;
unsigned int counter = 0;

void setup() {

  pinMode(ledallarme, OUTPUT);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  sensore();
}

void sensore() {
  sensorValue = analogRead(sensorPin);

  Serial.println(sensorValue, DEC);
  if (sensorValue > 300)
  { 
    stato=1;
    tone(buzzer, 1000, 2000);


   // prova1();
   // prova2();
      prova3();
 
  } else {
    digitalWrite(ledallarme, LOW);
  }
}

void prova1() {
  if (stato == 1) { 
    digitalWrite(ledallarme, HIGH);
    delay(200);
    digitalWrite(ledallarme, LOW);
    delay(200);
    i+=1;  //incremento i
    if(i==30){stato=0;i=0;} // dopo 30 cicli on-off smette di lampeggiare || azzero i
  }               
}


 
    
void prova2(){
  if (millis() - previousMillis > interval) {
    previousMillis = millis();
    ledState ^= 1;
    digitalWrite(ledallarme, ledState);
  }
}




void prova3(){
   digitalWrite(ledallarme, HIGH);
   delay(200);
   digitalWrite(ledallarme,LOW);
   delay(200);
   digitalWrite(ledallarme, HIGH);
   delay(200);
   digitalWrite(ledallarme,LOW);
   delay(200);
   digitalWrite(ledallarme, HIGH);
   delay(200);
   digitalWrite(ledallarme,LOW);
   delay(200);
   digitalWrite(ledallarme, HIGH);
   delay(200);
   digitalWrite(ledallarme,LOW);
   delay(200);
   digitalWrite(ledallarme, HIGH);
   delay(200);
   digitalWrite(ledallarme,LOW);
   delay(200);
   digitalWrite(ledallarme, HIGH);
   delay(200);
   digitalWrite(ledallarme,LOW);
   delay(200);
}

[/code]

Il problema è che chiami le funzioni ‘prova’ solo quando sensorValue>300, per cui quando è <=300 non vengono più eseguite.

L’idea abbozzata in prova1, cioè di una variabile stato per controllarne il funzionamento è la giusta strada, come pure l’uso di millis nella seconda (che è corretto). La terza invece la dimenticherei :wink:

Pensa quindi a una funzione di lampeggio che viene chiamata sempre dal loop (non solo quando sensorValue>300), avviata con la variabile stato, e funzionante internamente con millis.

Grazie Claudio, ottimo consiglio. Bastava spostare l'IF sulla void loop utilizzando la variabile stato.
Thank's!!