#include <Adafruit_NeoPixel.h>
#include <EEPROM.h>
Adafruit_NeoPixel neo(20, 2, NEO_GRB + NEO_KHZ800);
volatile int poradie = 1;
void setup() {
// Načítaj hodnotu z EEPROM
EEPROM.get(0, poradie);
// Ak je hodnota mimo platný rozsah, nastavíme predvolenú hodnotu
if (poradie < 1 || poradie > 3) {
poradie = 1;
EEPROM.put(0, poradie);
}
neo.begin();
randomSeed(analogRead(A0)); // Pre lepšiu generáciu náhodných čísel
pinMode(3, INPUT_PULLUP);
Serial.begin(9600);
Serial.println(poradie);
// Nastav prerušenie pre tlačidlo
attachInterrupt(digitalPinToInterrupt(3), button, FALLING);
}
void loop() {
// Ovládaj NeoPixel podľa aktuálnej hodnoty poradie
switch (poradie) {
case 1:
neo.clear();
behanie();
break;
case 2:
neo.clear();
majak();
break;
}
Serial.println(poradie);
}
void behanie() {
for (int i = 0; i < 20; i++) {
int x = random(0, 3);
if (x == 0) {
neo.setPixelColor(i, neo.Color(255, 0, 0));
} else if (x == 1) {
neo.setPixelColor(i, neo.Color(0, 255, 0));
} else if (x == 2) {
neo.setPixelColor(i, neo.Color(0, 0, 255));
}
neo.show();
delay(50);
}
for (int i = neo.numPixels() - 1; i >= 0; i--) {
neo.setPixelColor(i, neo.Color(0, 0, 0));
neo.show();
delay(100);
}
neo.show();
}
void majak() {
neo.clear();
for (int i = 0; i < neo.numPixels(); i++) {
if (i % 2 == 0) {
neo.setPixelColor(i, neo.Color(255, 0, 0));
} else {
neo.setPixelColor(i, neo.Color(0, 0, 255));
}
}
neo.show();
delay(500);
for (int i = 0; i < neo.numPixels(); i++) {
if (i % 2 == 0) {
neo.setPixelColor(i, neo.Color(0, 0, 255));
} else {
neo.setPixelColor(i, neo.Color(255, 0, 0));
}
}
neo.show();
delay(500);
}
// Funkcia na spracovanie tlačidla
void button() {
// Zvýšenie hodnoty a reset na 1 pri prekročení rozsahu
poradie++;
if (poradie > 3) {
poradie = 1;
}
// Zápis novej hodnoty do EEPROM
EEPROM.put(0, poradie);
}