Arduino Alarmanlage

Hallo miteinander,
ich bastle gerade an einer Arduino Alarmanlage.
Scope: wenn der Photoresistor kein Licht empfängt
alles an:

  • LED leuchtet
  • Buzzer piepst
  • Strobolight leuchtet
    wenn der Photoresistor Licht empfängt
  • alles aus
    Abfrageinterval via Delay(50)

Problem:
alles an - soll beliebig lange laufen bsp. 30sekunden.
Erst dann soll die Abschaltung erfolgen, egal wie der Status des Photoresistors in der Zeit war.

ich kriege die Verzögerung einfach nicht gebacken. (und nur Delay zu vergrössern hilft nicht)
Vielen Dank im voraus.

Sketch:

//Constants
const int photoResistor = A0; // Photoresistor at Arduino analog pin A0
const int buzzerPin = 8;
const int ledPin = 9;       
const int flash = 10;
//Variables
int value;  //  value from photoresistor (0-1023)

void setup(){
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);  
pinMode(photoResistor, INPUT);
pinMode(flash, OUTPUT);
}

void loop(){
 value = analogRead(photoResistor);

 if (value < 300){
       digitalWrite(flash, HIGH);
       digitalWrite(ledPin, HIGH);  //Turn led on
       digitalWrite(buzzerPin, HIGH);
       delay(50);
       digitalWrite(ledPin, LOW);
       digitalWrite(buzzerPin, LOW);
       delay(50);      
 }
     else{
       digitalWrite(ledPin, LOW); //Turn led off
       digitalWrite(buzzerPin, LOW);
       digitalWrite(flash, LOW);
 }
 delay(50);
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Dir stehen Deine delay im Wege. Schau Dir das Beispiel BlinkWithoutDelay und die Nachtwächtererklärung an.

Gruß Tommy

Hallo,

mit delay wird das nichts werden, Du willst meherer Dinge gleichzeitig machen. Den Buzzer blinken lassen, Licht abfragen und eine Zeit als Verzögerung laufen lassen. Schau dir den Nachtwächter an und verwende millis(). Du brauchst einen Zustandsmerker der auf true geht wenn das Licht an geht , damit die Verzögerung und es blinkt der Buzzer. Wenn die Zeit abgelaufen ist wird der Zustandsmerker auf false gesetzt.
Delay() macht eine Pause dabei passiert sonst fast nichts mehr, der Ablauf bleibt da stehen.

Heinz

danke für die Hinweise.
Bin noch ein echter Newbie.
Habe das mit BlinkWithoutDelay / millis() leider auch schon vergeblich versucht.
...ist ja noch ein langes Wochenende....

Das musst Du verstehen. Das brauchst Du laufend.

Gruß Tommy

Hallo,

darf ich Dir noch mein Geschreibsel vorschlagen

wo das Wochenende lang ist :slight_smile:

Heinz