//#include <LowPower.h>
#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 = 50; // 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 = 200; // ms
int maxBuzzerlaenge = 750; // 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();
Serial.begin(9600); //DEBUG MODUS
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
// 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 um am Anfang neu zu flashen bevor er in den sleep mode geht.
// 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);
// Pausenzeit (im Power Down mode)
//for (int t = 0; t <= 1; t++) { // for (int t = 0; t <= Pause; t++) {
// LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); //zum testen 1s - später wieder auf 8s stellen
// }
// 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);
// 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) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
k++;
if (k > cyclesLED) {
k=0;
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
cyclesLED = random(1, 5);
BlinkFrequenz = random(minBlinkFrequenz, maxBlinkFrequenz);
}
}
}
//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 = 2;
randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
BuzzerFrequenz = random(minBuzzerFrequenz, maxBuzzerFrequenz);
cyclesBUZZER = random(1, 5);
}
goto next;
case 2:
FlipFlop = 0;
}
next:
previousMillisBUZZER = currentMillis;
Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
}
}
}