Timer kuchenny bez delay! - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Timer kuchenny bez delay! (/watek-timer-kuchenny-bez-delay--3547) |
Timer kuchenny bez delay! - Polak63 - 01-05-2020 Zapragnąłem zbudować Timer kuchenny, który sygnałem świetlnym i dźwiękowym oznajmi mi zakończony czas. Tych Timerow ma być dużo, z góry zaprogramowanych(załóżmy więcej jak 5) i maja pracować bez "delay" tylko "równolegle". Pierwszy ma się włączać tuz po włączeniu zasilania, pozostałe maja być wyzwalane z przycisku. Sketch z "delay" sobie napisałem ale to mnie nie satysfakcjonuje a z "millis" czy innymi formatami jest jednak za trudne dla mnie jak na początek. Jak mi się uda to wpisze ten sketch tylko proszę się nie śmiać !!! Jak by był ktoś miły i mi go, "po ludzku" przepisał żeby miało to "ręce i nogi", będę bardzo dźwięczny . RE: Timer kuchenny bez delay! - Robson Kerman - 01-05-2020 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. RE: Timer kuchenny bez delay! - Agregacik - 02-05-2020 @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ę. RE: Timer kuchenny bez delay! - Polak63 - 02-05-2020 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 RE: Timer kuchenny bez delay! - Polak63 - 02-05-2020 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); } } RE: Timer kuchenny bez delay! - Agregacik - 02-05-2020 Tu masz przykład migania dwoma diodami niezależnie. Nie sprawdzałem ale powinien działać Kod: int LEDblue = 12; RE: Timer kuchenny bez delay! - Agregacik - 04-05-2020 Nudząc się wymyśliłem coś takiego. Zaznaczam, że jest to jedna z możliwości realizacji Twojego projektu i nie jest to wersja najlepsza. Zapewne można ją zrealizować w bardziej elegancki i bardziej optymalny sposób. Nie sprawdzałem czy działa. Dodatkowe opisy w kodzie. Kod: int LEDblau = 12; EDIT Sprawdziłem i działa. RE: Timer kuchenny bez delay! - Polak63 - 06-05-2020 Ś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 RE: Timer kuchenny bez delay! - Agregacik - 06-05-2020 No to do programu trzeba dodać jeszcze czas właściwy bez 5 sekund. |