Wpis z mikrobloga

Ereg 18 godz. temu 0
Witajcie ostatnio bawię się arduino i kilka razy napotykam na problem z używaniem w szkicu kilkukrotnie funkcji z różnymi parametrami gdy muszą one przechowywać poprzednie wartości. Np gdy funkcje mają powodować mruganie różnych diod z różnymi długościami i przerwami. Przykładowy szkic nie działa bo kolejne wywołanie funkcji kasuje parametry poprzednich.
Na razie sobie radośnie obchodzę problem po prostu zmieniając nazwy kolejnych funkcji i wklejając kolejne ich powtórzenia pod pętlę loop.
Chciał bym zrobić to tak żeby funkcję wpisać raz i móc ją potem wielokrotnie wykorzystywać.

To moje pierwsze ever podejście do programowania a w kursach i poradnikach takiego przykładu nie znalazłem.
Poradźcie jakieś rozwiązanie, albo miejsce gdzie można znaleźć odpowiedź.
Pozdrawiam.

kod
unsigned long czas;

void loop()
{
miganie(2, 1000, 400); // parametry to nr wyjscia, czas swiecenia, czas przerwy
miganie(3, 100, 100);
miganie(4, 400, 600);
miganie(5, 700, 300);
czas = millis();
}

void miganie( int led, unsigned long dlugosc, unsigned long przerwa)
{
static unsigned long czasZapalenia;
static unsigned long czasZgaszenia;
if(czas == czasZapalenia)
{
czasZgaszenia = czas + dlugosc;
}
if(czas >= czasZapalenia && czas <= czasZgaszenia )
{
digitalWrite (led, HIGH);
}
if(czas == czasZgaszenia)
{
czasZapalenia = czas + przerwa;
}
if(czas >= czasZgaszenia && czas <= czasZapalenia)
{
digitalWrite(led, LOW);
}
}
kod

#arduino #15k
  • 5
@Ereg: Zostaw sobie te klamerki, trzymaj się ich i stosuj wcięcia, zwłaszcza, że początkujesz.
Robisz błąd logiczny w programie, tak na pierwszy rzut oka. Konfigurujesz jedno wejście a za chwilę zmieniasz nastawienia. Musisz zrobić sobie klasę, w której będziesz przechowywał czas świecenia i czas przerwy oraz wyjście dla każdej diody. Wtedy ustawisz sobie zdarzenie/przerwanie co 1ms i będziesz sprawdzał w pętli, czy i jeśli tak to stan którego wyjścia zmienić.
To