Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kilka świeczek LED naraz

Autor Wiadomość
Ciamek007 



Posty: 5
Wysłany: 11-01-2017, 21:46   Kilka świeczek LED naraz

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?


Kod programu: Zaznacz cały
  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);
    }

Polecany artykuł z FORBOT.PL:
Pułapki języka C

W poprzednim artykule postawiłem tezę, że dobry programista powinien wiedzieć jakie aspekty języka są niebezpi... Czytaj całość

Ostatnio popularny » Kto chce zacząć przygodę z drukiem 3D?


Postaw piwo autorowi tego posta
 
 
Elvis 



Posty: 1188
Pomógł: 83 razy
Otrzymał 217 piw(a)
Skąd: wawa
Programuję w:
C, asm

Wysłany: 12-01-2017, 08:57   

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.

Postaw piwo autorowi tego posta
 
 
deshipu 




Posty: 1846
Pomógł: 96 razy
Otrzymał 161 piw(a)
Programuję w:
Python, C, Lua
Należę do:
Nigmalabs
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 12-01-2017, 09:00   

Na Arduino UNO AnalogWrite działać będzie tylko na pinach 3, 5, 6, 9, 10 i 11, bo tylko te piny mają PWM -- dlatego są oznaczone na płytce falką.

Postaw piwo autorowi tego posta
 
 
Ciamek007 



Posty: 5
Wysłany: 12-01-2017, 18:21   

Faktycznie, nie zwróciłem na to uwagi, teraz analogWrite działa, jak należy. Co do zabawy z czasem jeszcze będę musiał podłubać ;)

Warto przeczytać » Ponad 9 tysięcy książek taniej nawet o 95%!


Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Arduino, problem z o... Arduino i programowa... Przysyłanie/Odbieran... [C] Arduino LCD 4x16...
lub przeszukaj forum po wybranych tagach: kilka, led, miganie, mruganie, swieczka


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki