// #include <LowPower.h> XXXXXXXXXXXXXXXXXXXX
#include <avr/power.h> //Bibliothek fuer die Abschaltung der Peripherie
const int ledPin = 3; // Der Pin, an dem die LED angeschlossen ist
const int buzzerPin = 4;
unsigned long currentMillis; // aktueller Zeitpunkt
unsigned long previousMillisLED; // will store last time LED was updated
unsigned long previousMillisBUZZER; // will store last time BUZZER was updated
unsigned long startTime; // Die Zeit, zu der das Arduino eingeschaltet wurde
// Zeiten für Pause
int minPause = 30; // in Minuten;
int maxPause = 50; // in Minuten;
unsigned long Pause; // zufällige Pausenzeiten innerhalb minPause und maxPause
// Zeiten für Run
int minRun = 60; // in Sekunden
int maxRun = 180; // in Sekunden
unsigned long Run; // zufällige Runzeit innerhalb minRUn und MaxRun
// Frequenzen für LEDs
int minBlinkFrequenz = 10; // in ms f = 1/T
int maxBlinkFrequenz = 300; // in ms f = 1/T
int BlinkFrequenz = random(minBlinkFrequenz, maxBlinkFrequenz);
int cyclesLED = random(1, 5); // anzahl von wiederholungen der gleichen blinkfrequenz bevor eine neue gewählt wird
int cyclesBUZZER = random(1, 5); // anzahl von wiederholungen der gleichen Buzzerfrequenz bevor eine neue gewählt wird
//Frequenzen für Buzzer
int minBuzzerFrequenz = 1000; // in Hz
int maxBuzzerFrequenz = 5000; // in Hz
int BuzzerFrequenz = random(minBuzzerFrequenz, maxBuzzerFrequenz);
int minBuzzerlaenge = 100; // ms
int maxBuzzerlaenge = 1000; // ms
int Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
int k = 0;
int b = 0;
int FlipFlop = 0;
int randomBuzzerPause = random (1,10);
int randomLEDPause = random (1,10);
void setup() {
// Initialisierung der Pins
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
startTime = millis();
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
Serial.begin(9600); //DEBUG MODUS XXXXXXXXXXXXXXX
// kurzer Start Buzzer 1x signalisiert POWER ON und den ersten Modus
delay(200);
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 1000, 200);
delay(200);
digitalWrite(ledPin, LOW);
delay(100); // wartezeit 10s um am Anfang neu zu flashen bevor er in den sleep mode geht. XXXXXXXXXXX
// Blinken und Ton zweimal um zu zeigen dass der Betrieb startet
for (int i = 0; i <= 1 ; i++) {
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 2400, 200);
delay(200);
digitalWrite(ledPin, LOW);
if (i < 2) {
delay(200);
}
}
previousMillisLED = millis();
previousMillisBUZZER = millis();
}
void loop() {
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
Pause = random(minPause*60, maxPause*60)/8;
Run = random(minRun, maxRun);
Serial.print("Pausenzeit: ");
Serial.println(Pause);
Serial.print("Runzeit: ");
Serial.println(Run);
// Pausenzeit (im Power Down mode) für 8s im Schlafmodus
// for (int t = 0; t <= Pause; t++) { XXXXXXXXXXXXXXX
// LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); XXXXXXXXXXXXXXXx
// } XXXXXXXXXXXXXX
// Run
startTime = millis();
while (millis() - startTime <= Run*1000) { // Läuft durch solange die Zeit kleiner als die RunZeit ist
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
currentMillis = millis();
// LEDs blinken lassen
if (currentMillis - previousMillisLED >= BlinkFrequenz) {
randomLEDPause = random (1,10); // mit randomLEDPause werden sporadisch einzelne Blinken abgeschaltet
// save the last time you blinked the LED
previousMillisLED = currentMillis;
// if the LED is off turn it on and vice-versa:
if (digitalRead(ledPin) == LOW && randomLEDPause < 6) { // wenn randonLEDPause größer = 6 ist erfolgt keine Ansteuerung auf High und es wird ausgesetzt
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
k++;
if (k > cyclesLED) {
k=0;
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
cyclesLED = random(1, 5); // neue zufällige Anzahl an gleichen Wiederholungen
BlinkFrequenz = random(minBlinkFrequenz, maxBlinkFrequenz); // neue Blinkfrequenz
}
}
}
//Buzzer ansteuern
if (currentMillis - previousMillisBUZZER >= Buzzerlaenge) {
randomBuzzerPause = random (1,10);
switch (FlipFlop) {
case 0:
if (randomBuzzerPause > 8) {
noTone(buzzerPin);
FlipFlop = 1;
b++;
goto next;
}
tone(buzzerPin, BuzzerFrequenz);
FlipFlop = 1;
b++;
goto next;
case 1:
noTone(buzzerPin);
FlipFlop = 0;
if (b > cyclesBUZZER) {
b=0;
FlipFlop = 0;
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
BuzzerFrequenz = random(minBuzzerFrequenz, maxBuzzerFrequenz);
cyclesBUZZER = random(1, 5);
}
goto next;
}
next:
previousMillisBUZZER = currentMillis;
Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
}
}
// Buzzer und LEDs abschalten wenn Laufzeit abgelaufen
// nach der While Schleife (wenn Run beendet ist) Buzzer und LED ausschalten, falls diese noch an wären.
noTone(buzzerPin);
digitalWrite(ledPin, LOW);
}