// Nastavenie pinov pre LED, buzzer a tlačidlo
const int firstGroupLeds[] = {2, 3, 4, 5, 6};
const int secondGroupLeds[] = {7, 8, 9, 10, 11};
const int buzzer = 12;
const int button = 13;
// Počet bliknutí a interval
const int blinksPerCycle = 4; // Počet bliknutí za cyklus
const int cycleTime = 800; // Celkový čas cyklu v milisekundách
const int blinkInterval = cycleTime / (blinksPerCycle * 2); // Interval medzi ON a OFF v milisekundách
// Siréna
unsigned long sirenInterval = 200; // Počiatočný interval medzi tónmi sirény v milisekundách
unsigned long lastSirenChange = 0;
bool sirenHigh = false;
// Tlačidlo
int buttonState = 0;
int lastButtonState = 0;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50; // Pre filtrovanie rušenia
int sirenSpeedIndex = 0; // Index aktuálnej rýchlosti sirény
const unsigned long sirenSpeeds[] = {200, 100, 300}; // Tri rôzne rýchlosti sirény
void setup() {
// Inicializácia pinov ako výstupy a vstupy
for (int i = 0; i < 5; i++) {
pinMode(firstGroupLeds[i], OUTPUT);
pinMode(secondGroupLeds[i], OUTPUT);
}
pinMode(buzzer, OUTPUT);
pinMode(button, INPUT_PULLUP); // Použitie vstupu s interným pull-up odporom
}
void loop() {
// Blikanie LED
blinkLeds();
// Prehrávanie sirény
playSiren();
// Kontrola tlačidla na zmenu rýchlosti
checkButton();
}
// Funkcia na blikanie LED
void blinkLeds() {
// Prvá skupina LED blikne 4x za cyklus
for (int i = 0; i < blinksPerCycle; i++) {
setLeds(firstGroupLeds, HIGH); // Zapni prvú skupinu LED
delay(blinkInterval);
setLeds(firstGroupLeds, LOW); // Zhasni prvú skupinu LED
delay(blinkInterval);
}
// Druhá skupina LED blikne 4x za cyklus
for (int i = 0; i < blinksPerCycle; i++) {
setLeds(secondGroupLeds, HIGH); // Zapni druhú skupinu LED
delay(blinkInterval);
setLeds(secondGroupLeds, LOW); // Zhasni druhú skupinu LED
delay(blinkInterval);
}
}
// Funkcia na zapnutie alebo vypnutie celej skupiny LED
void setLeds(const int leds[], int state) {
for (int i = 0; i < 5; i++) {
digitalWrite(leds[i], state);
}
}
// Funkcia na prehrávanie sirény
void playSiren() {
unsigned long currentTime = millis();
// Prepínanie tónov podľa sirenInterval
if (currentTime - lastSirenChange >= sirenInterval) {
lastSirenChange = currentTime;
sirenHigh = !sirenHigh;
if (sirenHigh) {
tone(buzzer, 800); // Vysoký tón
} else {
tone(buzzer, 500); // Nízky tón
}
}
}
// Funkcia na kontrolu tlačidla a zmenu rýchlosti sirény
void checkButton() {
int reading = digitalRead(button);
// Kontrola rušenia (debounce)
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// Ak sa stav tlačidla zmenil
if (reading == LOW && buttonState == HIGH) {
// Zmena rýchlosti sirény
sirenSpeedIndex = (sirenSpeedIndex + 1) % 3; // Cykluje medzi 0, 1, 2
sirenInterval = sirenSpeeds[sirenSpeedIndex];
}
buttonState = reading;
}
lastButtonState = reading;
}