Skocz do zawartości

Płynne włączanie i wyłączanie diody


Patryk9111

Pomocna odpowiedź

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ść.. 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

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...

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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 przez KatzePL
Dodano wersję z krokiem zmiany.
Link do komentarza
Share on other sites

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

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;
}

 

  • Lubię! 1
Link do komentarza
Share on other sites

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 przez _LM_
Link do komentarza
Share on other sites

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 przez KatzePL
Link do komentarza
Share on other sites

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

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

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.