21-03-2020, 01:42
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:
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.
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