14-06-2019, 09:18
Kurs na Forbot jednak to coś więcej, miganie led jest użyte dlatego, by nie wprowadzać niepotrzebnie innych terminów komplikujących zadanie. Oczywiście jeśli zaczniesz go przerabiać od ostatniej lekcji, tej z millis, to jej możesz nie zrozumieć. Trzeba trochę nad tym posiedzieć by zmienić sposób myślenia.
Jak uważasz kogoś za trola to go nie karm.
Millis można wykorzystać do odmierzania czasu. W przykładzie w blinkWithoutDelay wystarczy wyrzucić zmiany stanu led i wprowadzić swoją zmienną sekundy++. Ponieważ w ciągu 1s pętla loop powinna się wykonać tysiące razy dodać tu trzeba również flagę, by to co ma się wykonać co sekundę wykonało się tylko raz, tylko w tym konkretnym loop, w którym nastąpiła zmiana sekund. W innym miejscu loop należy jej przypisać zero. Ja używam swoich liczników sekund, minut i flag do nich by zarządzać czasem, wtedy w loop tylko raz odwołuję się do millis, a potem do swoich zmiennych i flag operujących na małych liczbach, porównania są wtedy bardzo szybkie. Każde wywołanie millis trwa kilka us. Ale i tak musiałbyś je wywołać w pętli wiele tysięcy razy by dorównać jednemu delay(1000);. Z pompą nie
Użycie dodatkowego timera sprzętowego wg mnie nie ma sensu do tak prostej czynności, skoro i tak już działa timer0 by napędzać micros/millis/delay.
Jak uważasz kogoś za trola to go nie karm.
Millis można wykorzystać do odmierzania czasu. W przykładzie w blinkWithoutDelay wystarczy wyrzucić zmiany stanu led i wprowadzić swoją zmienną sekundy++. Ponieważ w ciągu 1s pętla loop powinna się wykonać tysiące razy dodać tu trzeba również flagę, by to co ma się wykonać co sekundę wykonało się tylko raz, tylko w tym konkretnym loop, w którym nastąpiła zmiana sekund. W innym miejscu loop należy jej przypisać zero. Ja używam swoich liczników sekund, minut i flag do nich by zarządzać czasem, wtedy w loop tylko raz odwołuję się do millis, a potem do swoich zmiennych i flag operujących na małych liczbach, porównania są wtedy bardzo szybkie. Każde wywołanie millis trwa kilka us. Ale i tak musiałbyś je wywołać w pętli wiele tysięcy razy by dorównać jednemu delay(1000);. Z pompą nie
Kod:
//zalaczenie pompy
if (przycisk==0 and ! pompaWlaczona)
{pompaWlaczona=1;
digitalWrite(pompa,1);
znacznikCzasuWlaczeniaPompy=millis();
}
//wylaczenie pompy
if(pompaWlaczona)
{
znacznikCzasuAktualny=millis();
if((uint32_t)(znacznikCzasuAktualny-znacznikCzasuWlaczeniaPompy)>=zadanyCzasPracyPompy)
{
digitalWrite(pompa,0);
pompaWlaczona=0;
}
}
Użycie dodatkowego timera sprzętowego wg mnie nie ma sensu do tak prostej czynności, skoro i tak już działa timer0 by napędzać micros/millis/delay.
Miło być decenianym https://buycoffee.to/kaczakat