• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Odliczanie diodami ws2812b
#7
Forum nie służy do wyjaśniania czym różni się if , do  i else. To jest w kursie, każdy może go przeczytać, a Ty chcesz indywidualną lekcję? Na forum się pomaga, a nie robi coś za kogoś, od tego jest dział zlecenia. Nie zabieramy pracy programistom, to nie fair. Proszę, masz przykład użycia millis:
Kod:
#define przycisk 2
uint32_t czasTeraz,czasPoprzedni,tik=10; //tik musi byc mniejszy niz 1000 i dzilic 1000ms na rowne czesci
uint8_t nTik,sekundy,minuty,godziny,dni; //liczniki tikow, sekund, itd.
bool fnTik,fsekundy,fminuty,fgodziny,fdni; //flagi zdarzen nowy tik, nowa sekunda,minuta, godzina, dzien
char napis[10];
uint8_t czasprzyspieszenia=10, czaszawieszenia=15,predkosc=100,przyspieszony, zablokuj;

void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
pinMode(LED_BUILTIN,OUTPUT);
pinMode(przycisk,INPUT_PULLUP);

}
//oczywiscie serialprinty i ledy sa do wyrzucenia
void loop() {
  // put your main code here, to run repeatedly:
   

//odczyt przycisku w kazdej petli

czas();
fprzycisk();
//wykorzystanie wartosci "predkosc" co 2 sekundy
if (fsekundy && sekundy%2==0) Serial.println(predkosc);





}


void fprzycisk()
{
if(!digitalRead(przycisk)&& ! zablokuj && !przyspieszony) //wcisniety przycisk==0 i zablokuj==0, mozna jeszcze +/- by trzymanie przycisku (nie) przedluzalo
{

  przyspieszony=czasprzyspieszenia;
  Serial.println("Aktywacja przyspieszenia");
}


if(fsekundy) //tylko gdy nowa sekunda, odliczanie
{
  if (przyspieszony)
  {
    digitalWrite(LED_BUILTIN,1);
    przyspieszony--;
    predkosc=200;
    if(! przyspieszony) zablokuj=  czaszawieszenia; //jak dojdzie do 0 aktywacja zawieszenia
    Serial.print("Do konca przyspieszenia zostalo: ");
    Serial.println( przyspieszony);
  }
  else
  {
    predkosc=100;
   if(zablokuj)
   {
    Serial.print("Do konca blokady zostalo: ");
    Serial.println( --zablokuj);//zmniejszaj czas blokady az do 0
    digitalWrite(LED_BUILTIN,0);
   }
  }
 
}
}


void czas()
{
  czasTeraz=millis();
fnTik=fsekundy=fminuty=fgodziny=fdni=0;
if((uint32_t)(czasTeraz-czasPoprzedni)>=tik) //tak napisany warunek jest odporny na "klątwe 50 dni millis()"
{
  czasPoprzedni=czasTeraz;
  fnTik=1;
  nTik++;
  if(nTik>=(1000/tik))
  {
    nTik=0;
    sekundy++;
    fsekundy=1;
     if (sekundy>=60)
    {
      sekundy=0;
      minuty++;
      fminuty=1;
      if (minuty>=60)
      {
        minuty=0;
        godziny++;
        fgodziny=1;
        if (godziny>=24)
        {
          godziny=0;
          fdni=1;
          dni++;
   
        }
      }
    }
  }
}
}

Rozumiesz coś bez znajomości alfabetu?
Równie dobrze mogę Ci wrzucić przykładowe wypracowanie po francusku, bez znajomości podstaw języka nie będziesz wiedział gdzie się podpisać. Zajrzyj do kursu, on kończy się na pierwszym użyciu millis, a to dopiero miejsce gdzie należy podjąć decyzję czy faktycznie chcesz się uczyć programowania. A wtedy czekają darmowe książki tu: https://pl.wikibooks.org/wiki/C , a wiele innych jest w linkach tu na forum.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Wiadomości w tym wątku
Odliczanie diodami ws2812b - przez Taktisz - 19-03-2020, 19:41
RE: Odliczanie diodami ws2812b - przez Robson Kerman - 20-03-2020, 09:09
RE: Odliczanie diodami ws2812b - przez Taktisz - 20-03-2020, 18:08
RE: Odliczanie diodami ws2812b - przez kaczakat - 20-03-2020, 20:39
RE: Odliczanie diodami ws2812b - przez Taktisz - 21-03-2020, 00:44
RE: Odliczanie diodami ws2812b - przez Taktisz - 21-03-2020, 00:48
RE: Odliczanie diodami ws2812b - przez kaczakat - 21-03-2020, 01:42
RE: Odliczanie diodami ws2812b - przez frbabos - 12-08-2020, 16:49

Skocz do:


Przeglądający: 1 gości