//#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;
// Zeiten für Run
int minRun = 60; // in Sekunden
int maxRun = 180; // in Sekunden
unsigned long Run;
// Frequenzen für LEDs
int minBlinkFrequenz = 50; // in ms f = 1/T
int maxBlinkFrequenz = 500; // 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 = 50; // ms
int maxBuzzerlaenge = 500; // ms
int Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
int k = 0;
int b = 0;
int FlipFlop = 0;
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.
for (int i = 0; i <= 1 ; i++) { // Blinken und Ton zweimal um zu zeigen dass der Betrieb startet
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 2400, 200);
delay(200);
digitalWrite(ledPin, LOW);
if (i < 2) {
delay(200);
}
}
previousMillisLED = millis();
previousMillisBUZZER = millis();
Serial.print("Buzzerlaenge: ");
Serial.println(Buzzerlaenge);
}
void loop() {
Serial.println("neuer Loop");
Serial.println("");
//randomSeed(analogRead(0)); // Initialisieren Sie den Zufallsgenerator
Pause = random(minPause*60, maxPause*60)/8;
Run = random(minRun, maxRun);
Serial.print("Pausenzeit (min): ");
Serial.println(Pause*8/60);
Serial.print("Laufzeit (Sekunden): ");
Serial.println(Run);
// 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
//BlinkFrequenz = random(minBlinkFrequenz, maxBlinkFrequenz);
//BuzzerFrequenz = random(minBuzzerFrequenz, maxBuzzerFrequenz);
//Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
// Serial.print("BuzzerFrequenz: ");
// Serial.println(BuzzerFrequenz);
//Serial.print("Buzzerlaenge: ");
//Serial.println(Buzzerlaenge);
currentMillis = millis();
//Serial.print("currentMillis: ");
//Serial.println(currentMillis);
// LEDs blinken lassen
if (currentMillis - previousMillisLED >= BlinkFrequenz) {
// 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) {
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);
}
}
}
//Serial.print("previousMillisBUZZER: ");
//Serial.println(previousMillisBUZZER);
if (currentMillis - previousMillisBUZZER >= Buzzerlaenge) {
switch (FlipFlop) {
case 0:
tone(buzzerPin, BuzzerFrequenz);
FlipFlop = 1;
b++;
Serial.println("case 0: ");
goto next;
case 1:
noTone(buzzerPin);
FlipFlop = 0;
Serial.println("case 1: ");
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:
Serial.println("case 2: ");
FlipFlop = 0;
}
next:
previousMillisBUZZER = currentMillis;
Buzzerlaenge = random(minBuzzerlaenge, maxBuzzerlaenge);
//BuzzerFrequenz = BuzzerFrequenz + random(-500, 500);
}
}
}