Skocz do zawartości

Kilka świeczek LED naraz


Pomocna odpowiedź

Napisano

Witajcie!

Mam problem z dziwnym zachowaniem programu. Chciałbym stworzyć kilka (dajmy na to 4) "świeczek LED", czyli zwykłych diod, które świecą z różną intensywnością, w zależności od nadanego losowego prądu, a przez losowe jego dobieranie powstaje efekt palącego się ognia. O ile nie miałem problemów z jedną świeczką, to przy czterech pojawiają się schody - czwarta świeczka (i tylko ta), jeśli już świeci, zachowuje się dość niespodziewanie.

Czytałem trochę o zastosowaniu "blink without delay" i próbowałem wykorzystać to w swoim programie. Niestety - trzy świeczki wyglądają w porządku (różne wartości prądu dają ładny, płynny efekt), ale czwarta mruga w zasadzie jedynie między stanem "0" a "1", w zmiennych odstępach czasowych, co daje efekt dość szarpany. Dlaczego tak się dzieje, co zrobiłem źle?

  bool sw1stan=1;
 const int sw1=9;
 bool sw2stan=1;
 const int sw2=10;
 bool sw3stan=1;
 const int sw3=11;
 bool sw4stan=1;
 const int sw4=12;

unsigned long previousMillis = 0;  
unsigned long currentMillis;
const long interval = 5;

void zapalenie(int swieczka){

 currentMillis = millis();
 if (currentMillis - previousMillis >= interval){
   previousMillis = currentMillis;
   analogWrite(swieczka,random(200));
 }
}

void wygaszanie(int swieczka){
 digitalWrite(swieczka, LOW);
}

void setup() {
 pinMode(sw1, OUTPUT);
 pinMode(sw2, OUTPUT);
 pinMode(sw3, OUTPUT);
 pinMode(sw4, OUTPUT);

}

void loop() {

   if(sw1stan==1) zapalenie(sw1);
   if(sw2stan==1) zapalenie(sw2);
   if(sw3stan==1) zapalenie(sw3);
   if(sw4stan==1) zapalenie(sw4);
   }

To raczej zaskakujące, że program działa dla trzech diod. W funkcji zapalenie robisz jakąś dziwną sztuczkę z czasem - niezależnie od intencji, masz jeden licznik "previousMillis" na wszystkie "świeczki". Więc to raczej zaskakujące, że program działa dla więcej niż jednej diody niż że nie działa dla czterech.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...