Patryk9111 Napisano 19 września Udostępnij Napisano 19 września Witam, robię kurs Arduino poziom 1. W trakcie kursu jest zadanie, żeby zapalić płynnie diodę wykorzystując PWM. Moje pytanie to jak zmodyfikować kod tak, żeby móc ją płynnie zgasić potem znowu zapalić i tak w kółko. Link do komentarza Share on other sites More sharing options...
_LM_ 19 września Udostępnij 19 września Skorzystaj z korekcji gamma, pozwala to dostosowanie jasności LEDa do właściwości widzenia ludzkiego oka Link do komentarza Share on other sites More sharing options...
_LM_ 19 września Udostępnij 19 września 18 minut temu, Patryk9111 napisał: Moje pytanie to jak zmodyfikować kod tak, żeby móc ją płynnie zgasić potem znowu zapalić i tak w kółko. Aa sorki tobie chodzi o to żeby w ogóle w takim cyklu się to działo. No skoro jest kurs to dobrze by było pogłówkować nad tym samemu. Ja widzę pewien potencjał w zmiennej "zmiana". hmm a co gdyby miała minusową wartość.. 1 Link do komentarza Share on other sites More sharing options...
farmaceuta 19 września Udostępnij 19 września 31 minut temu, Patryk9111 napisał: Moje pytanie to jak zmodyfikować kod tak, żeby móc ją płynnie zgasić potem znowu zapalić i tak w kółko. Do tego celu idealnie nadaje się pętla for()...w pierwszej pętli rozjasniasz Leda, wychodzisz i wchodzisz w drugą pętlę która ma za zadanie ściemniać Leda...rozwiązanie dobre lecz trochę blokujące pozostały kod, ale na początku tak kombinuj żeby zrozumieć pętle... 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
_LM_ 19 września Udostępnij 19 września No nie wiem, skoro można to jednym warunkiem rozwiązać Link do komentarza Share on other sites More sharing options...
Patryk9111 19 września Autor tematu Udostępnij 19 września Zrobiłem. Link do komentarza Share on other sites More sharing options...
KatzePL 19 września Udostępnij 19 września (edytowany) A moim zdaniem, najlepiej nadaje się pętla while(). Nie trzeba więcej zmiennych. 🤗😛 //Nr. pinu LED const uint8_t LEDpin = 10; //Stan początkowy uint8_t LEDPWM = 0; void setup() { pinMode(LEDpin, OUTPUT); } void loop() { //Wykonuj, dopóki zmienna będzie mniejsza od 255 while (LEDPWM < 255) { analogWrite(LEDpin, LEDPWM++); delay(50); } //Wykonuj, dopóki zmienna będzie większa od 0 while (LEDPWM > 0) { analogWrite(LEDpin, LEDPWM--); delay(50); } } Wersja z krokiem zmiany: //Nr. pinu LED const uint8_t LEDpin = 10; //Stan początkowy uint8_t LEDPWM = 0; //Krok zmiany const uint8_t PWMstep = 5; void setup() { pinMode(LEDpin, OUTPUT); } void loop() { //Wykonuj, dopóki zmienna będzie mniejsza od 255 while (LEDPWM < 255) { analogWrite(LEDpin, LEDPWM+=PWMstep); delay(50); } //Wykonuj, dopóki zmienna będzie większa od 0 while (LEDPWM > 0) { analogWrite(LEDpin, LEDPWM-=PWMstep); delay(50); } } Edytowano 19 września przez KatzePL Dodano wersję z krokiem zmiany. Link do komentarza Share on other sites More sharing options...
_LM_ 19 września Udostępnij 19 września No to jeśli jedziemy z gotowcami 😉 int8_t skladnik = 1; int licznik = 1; while(1) { licznik+=skladnik; if(licznik >= 255){ skladnik=-5; }else if(0 == licznik)skladnik = 5; } Link do komentarza Share on other sites More sharing options...
KatzePL 19 września Udostępnij 19 września 6 minut temu, _LM_ napisał: No to jeśli jedziemy z gotowcami 😉 Niech będzie. Ja tylko poprawię. 🤭😺 int8_t skladnik = 5; uint8_t licznik = 0; while(1) { licznik+=skladnik; if(licznik >= 255) skladnik=-5; else if(licznik <= 0) skladnik = 5; } 1 Link do komentarza Share on other sites More sharing options...
_LM_ 19 września Udostępnij 19 września (edytowany) jak już poprawiasz to miałeś dać if(licznik > 254) skladnik=-5; lub if(licznik == 255) skladnik=-5; 🙂 Tak samo licznik < 0 też jest błędne w tym kontekście Edytowano 19 września przez _LM_ Link do komentarza Share on other sites More sharing options...
_LM_ 19 września Udostępnij 19 września A i nie bez przypadku w pierwszym podejściu licznik był typu int. To też ma znaczenie Link do komentarza Share on other sites More sharing options...
KatzePL 19 września Udostępnij 19 września (edytowany) 6 minut temu, _LM_ napisał: jak już poprawiasz to miałeś dać if(licznik >= 254) skladnik=-5; A czemu? 🙂 unsigned int 8 bitowy ma 256 wartości. Od 0 do 255. Drugie jest bardziej przekonujące. 🙂 6 minut temu, _LM_ napisał: if(licznik == 255) skladnik=-5; int8_t skladnik = 5; uint8_t licznik = 0; while(1) { licznik+=skladnik; ustawpwm(licznik); if(licznik == 255) skladnik=-5; else if(licznik == 0) skladnik = 5; } Edytowano 19 września przez KatzePL Link do komentarza Share on other sites More sharing options...
_LM_ 19 września Udostępnij 19 września 1 minutę temu, KatzePL napisał: A czemu? 🙂 Tak, zrobiłem edycję bo tam faktycznie machnąłem się z zakresem Link do komentarza Share on other sites More sharing options...
_LM_ 19 września Udostępnij 19 września 2 minuty temu, KatzePL napisał: Drugie jest bardziej przekonujące. 🙂 ale nadal podatne na błędy, co jak składnik będzie miał więcej niż 5? Link do komentarza Share on other sites More sharing options...
KatzePL 19 września Udostępnij 19 września 1 minutę temu, _LM_ napisał: ale nadal podatne na błędy, co jak składnik będzie miał więcej niż 5? Oj, przekręci się! 😺 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »