Witam
Mam pytanie jak ustawić w tym szkicu, żeby zmiana efektu przyciskiem odbywała się bez opóźnienia. Ledy chce tak ustawić, żeby zapalały się co sekundę, ale kiedy ustawie co sekundę to po przyciśnięciu przycisku zmiana następuje po 28s, ponieważ pasek ma 30 diod a program liczy cały ten czas od wcisnięcia przycisku. Czy da się to ustawić, żeby pasek szedł rosnąco co sekundę do końca, a potem przycisk i od razu wraca malejąco co sekundę.
Mam pytanie jak ustawić w tym szkicu, żeby zmiana efektu przyciskiem odbywała się bez opóźnienia. Ledy chce tak ustawić, żeby zapalały się co sekundę, ale kiedy ustawie co sekundę to po przyciśnięciu przycisku zmiana następuje po 28s, ponieważ pasek ma 30 diod a program liczy cały ten czas od wcisnięcia przycisku. Czy da się to ustawić, żeby pasek szedł rosnąco co sekundę do końca, a potem przycisk i od razu wraca malejąco co sekundę.
Kod:
#include <Adafruit_NeoPixel.h> // Biblioteka do sterowania diodami
#define PIN 6 // Pin do sterowania diodami ws2812
#define NUMPIXELS 30 // Ilość diod ws2812
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int licznik = 1;
void przycisk()
{
delay(200);
if (digitalRead(2)== LOW)
{
licznik++;
if (licznik > 2)
{
licznik=1;
}
}
}
void efekt_1()
{
Serial.println("Efekt 1");
for(int i=0;i <NUMPIXELS ;i++) // Zapalenie stopniowo całego paska na zielono
{
strip.setPixelColor(i, 0, 70, 200);
strip.show();
delay(1000);
}
}
void efekt_2() // Zapalanie rosnąco
{
Serial.println("Efekt 2");
for(int i=NUMPIXELS;i >0 ;i--) // Gaszenie stopniowo całego paska na zielono
{
strip.setPixelColor(i, 0, 0, 0);
strip.show();
delay(1000);
}
}
void setup()
{
Serial.begin(9600);
strip.begin(); // Uruchomienie działania biblioteki Adafruit_NeoPixel
pinMode(2, INPUT);
attachInterrupt(0, przycisk, FALLING);
}
void loop()
{
switch (licznik)
{
case 1:
efekt_1();
break;
case 2:
efekt_2();
break;
}
}