Liczba postów: 656
Liczba wątków: 3
Dołączył: Apr 2017
Reputacja:
51
Z tym millis, to nie jest trudne. Jest nawet powiedziałbym proste.
Jedyną rzeczą jaką trzeba zrobić, to zrozumieć jaki mechanizm włącza nasz mózg, gdy na przykład pieczemy ciasto, czy gotujemy jajka.
Wkładasz ciacho do piekarnika na 45 minut, więc tuż po włożeniu sprawdzasz, która jest godzina i od czasu do czasu sprawdzasz czy minęło już 45 minut. Polega to na sprawdzeniu aktualnej godziny i odjęciu od niej godziny sprawdzonej podczas wkładania ciasta do piekarnika. Jeśli nie minęło, to robisz to co robiłeś dalej, a jeśli minęło, to przerywasz robotę i zajmujesz się wyciąganie żarełka z piekarnika.
W kodowaniu będziesz miał podobnie.
Start timera polega na sprawdzeniu która godzina, czyli ile millis upłynęło od włączenia systemu i zapisujesz to do zmiennej.
Program robi sobie cośtam w pętli, ale za każdym zapętleniem sprawdza czy minęło już tyle millisów ile sobie założyłeś.
Polega to na tym, że pobierasz aktualne millisy i odejmujesz od nich te, które zapisałeś do zmiennej.
I to w zasadzie tyle.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.
Liczba postów: 356
Liczba wątków: 5
Dołączył: Aug 2019
Reputacja:
28
02-05-2020, 09:00
(Ten post był ostatnio modyfikowany: 02-05-2020, 09:03 przez Agregacik.)
@Polak63 skoro zapragnąłeś coś zrobić, to jest to dobry czas na naukę. Trzeba zrozumieć jak się robi "wielozadaniowość" przy użyciu millis. Tak jak pisał Robson Kerman to nie jest trudne, zwłaszcza przy takim projekcie jak Twój.
Jak sam rozkmicisz jak to zrobić, będzie to procentować na przyszłość. Tu możemy podpowiadać, doradzać, ale trzeba też włączyć swoją chęć rozwiązania problemu.
Podpowiem podstawowy wzór, jak mi się wydaje, użycia millis.
if (millis() - zapCzasPoczatku >= ZadanyCzas)
{
zapCzasPoczatku = millis();
//Tu wstawiasz co ma się zrobić co "ZadanyCzas"
}
Trzeba jeszcze zadeklarować zmienne
unsigned long zapCzasPoczatku ;
unsigned long ZadanyCzas = 20000; // tu wpisany czas co jaki ma się wykonać operacja w if
Zadany czas może być zmienną lub wartością wpisaną z palca np 20000UL czyli w tym przypadku 20 sekund. UL na końcu oznacza liczbę unsigned long.
Mam nadzieję, że nie namieszałem, jak tak to proszę ekspertów o korektę.
Liczba postów: 5
Liczba wątków: 2
Dołączył: May 2020
Reputacja:
0
Robson Kerman
Ślicznie dziękuje za odpowiedz nie sądziłem że ktokolwiek odpowie. Ze mną jest jeden problem, kiedyś próbowałem naprawić mój stary samochód wiec kupiłem książkę do naprawy jego. Po przeczytaniu od dechy do dechy nawet 3 krotnie, wiedziałem wszytko ale tylko teoretycznie ale jak przyszło do naprawy, to dalej nic nie wiedziałem, wyjaśniał mi dopiero sąsiad, krok po kroku i to na przykładach (był to gaźnik) jak, co i gdzie. Naprawa mi się udała ale zasługa była sąsiada, następnym razem już wiedziałem gdzie przyłożyć klucz, śrubokręt lub młotek. Zauważyłem że jestem bardziej wzrokowcem. Chodziło mi bardziej o przykłady niż teoretyzowanie. Ale i tak i tak serdecznie dziękuje za szybka odpowiedz.
Z poważaniem Irek
Liczba postów: 5
Liczba wątków: 2
Dołączył: May 2020
Reputacja:
0
Agregacik
Serdecznie dziękuje za przykład, DZIAŁA !!!! przydał się, analizuje go, staram się odwracać funkcje ale nie za bardzo mi wychodzi, obecny sketch po wpisaniu do Arduino po 5 sek. zapala LED i jest jakiś sukces. Jak to zrobić teraz aby po wpisaniu czy podłączeniu zasilania LED zaczęła od razu świecić a po zadanym czasie zgasła a najlepiej zaczęła mrugać przez jakiś zadany czas i trochę informacji dlaczego tak i tak a nie tak i tak. Z góry dziękuję.
int LEDblue = 12;
int LEDred = 11;
unsigned long zapCzasPoczatku ;
unsigned long ZadanyCzas = 5000;
void setup() {
pinMode(LEDblue, OUTPUT);
pinMode(LEDred, OUTPUT);
}
void loop() {
if (millis() - zapCzasPoczatku >= ZadanyCzas)
{
zapCzasPoczatku = millis();
digitalWrite(LEDred, HIGH);
}
}
Liczba postów: 5
Liczba wątków: 2
Dołączył: May 2020
Reputacja:
0
Ślicznie Ci dziękuje za sketch ale w tym momencie nie mogę go sprawdzić ze względu to że mój Arduino Mega zwariował i jego "wariacje" były już od początku jego egzystencji. Kazdy sketch wpisany lub zastartowany, czyli po podłączeniu zasilania, albo się nie wykonywał albo robił to z opóźnieniem 10-15 sekund, nawet po wpisaniu sketchu Blink z biblioteki tak się działo, co mnie zdziwiło. Wiec postanowiłem zakupić nowe Arduino bo myślę że z obecnym jest coś nie tak. Zamówiłem jeszcze raz Mega, ale jak już szaleć to szaleć to dodałem Uno i Nano i Mikro, a co. Przesyłka będzie gdzieś pod koniec Maja. No i najciekawsze teraz, dlaczego taki pomysł z tym Timerem, hym, jestem hobbystą chemikiem :-) Szukam "tego kamienia filozoficznego" i sprawia mi to przyjemność :-). Posiadam laboratorium garażowe :-) Gdzie mam rożne chemikalia i potrzebuje rożne elementy zanurzać w rożnych kąpielach o rożnych czasach. Do tego potrzebne są mi Timery, kupowałem je na allegro albo na eBay z Chin ale ich jakość i warunki w jakich muszą pracować nie dają im szans na długie życie. Mam ich około 70 z czego 8 jeszcze funkcjonuje. To efekt pracy w rękawicach, nie zawsze "czystych". Zimą nie bawię się tym, wiec zacząłem się bawić programowaniem, widać początki, są jako takie :-) Chodzi mi o to żeby mieć pod dostatkiem Timerow, do moich potrzeb no i myślałem że będzie to można zrobić na na jednym Arduino. Myśl była jedna, Teimer który informuje, 5 sek przed końcem zadanego czasu, że nastąpi "jego koniec" no i po skończeniu zadanego czasu informuje ostrymi mrugnięciami i sygnałem dźwiękowym że proces kąpieli dobiegł końca. Czyli szybko !!! bo się spitoli :-) Pozdrawiam i proszę o wyrozumiałość :-)
Z poważaniem Irek
Liczba postów: 356
Liczba wątków: 5
Dołączył: Aug 2019
Reputacja:
28
No to do programu trzeba dodać jeszcze czas właściwy bez 5 sekund.