Delay ? na swoje plusy, ale ... wcześniej czy później trzeba się go pozbyć. Najlepszym sposobem w przypadku Arduino jest MILLIS. To licznik czasu, po upływie którego wykonywane jest określone zadanie - wywoływana funkcja lub instrukcje zawarte w warunku.
KOD -> DOWNLOAD <- KOD
Do czego więc delay ? a jednak ma sens, przy tworzeniu aplikacji i tylko wtedy w sumie. Bo... warto w setup wstawić tą instrukcję z nawet dość dużym parametrem, np. delay(10000); Teraz pytanie po co ? No niestety, nie jeden z początkujących spotkał się z problemem ... wgrałem szkic, coś poszło nie tak, teraz nie mogę ? co się popsuło... nic, tylko tyle, że ARDUINO IDE jest tak toporne i powolne, za nim nawiąże połączenie z płytką ta wykonuje już źle napisane instrukcje i nie pozwala na to. Zaczynasz kodować ? obowiązkowo w setup na sam początek delay(10000) - uwierz mi, pomoże Ci :-) Jak program przetestowany, nic się nie dzieje - wywalamy.
Teraz jeszcze jedno ... do czego służy to :
#define TERMINAL 1
#define USB_SPEED 9600
A do oszczędności :) Po przestawieniu TERMINAL na 0 znikają komunikaty na monitorze SERIAL, kod zawarty w makrach # nie istnieje! Sprawdź ilość wolnej pamięci RAM po skompilowaniu szkicu z parametrem 1 a potem z parametrem 0 - tak należy to robić. Miałeś kiedyś informację po dołączeniu jakiś tam bibliotek że szkic jest za duży - wykorzystuj MAKRA !!! programuj z głową. MYŚL jak komputer, nie wklejaj kodów cudzych bezmyślnie - skąd gwarancja, że napisał go ktoś kto się zna na rzeczy ?
KOD -> DOWNLOAD <- KOD
Do czego więc delay ? a jednak ma sens, przy tworzeniu aplikacji i tylko wtedy w sumie. Bo... warto w setup wstawić tą instrukcję z nawet dość dużym parametrem, np. delay(10000); Teraz pytanie po co ? No niestety, nie jeden z początkujących spotkał się z problemem ... wgrałem szkic, coś poszło nie tak, teraz nie mogę ? co się popsuło... nic, tylko tyle, że ARDUINO IDE jest tak toporne i powolne, za nim nawiąże połączenie z płytką ta wykonuje już źle napisane instrukcje i nie pozwala na to. Zaczynasz kodować ? obowiązkowo w setup na sam początek delay(10000) - uwierz mi, pomoże Ci :-) Jak program przetestowany, nic się nie dzieje - wywalamy.
Teraz jeszcze jedno ... do czego służy to :
#define TERMINAL 1
#define USB_SPEED 9600
A do oszczędności :) Po przestawieniu TERMINAL na 0 znikają komunikaty na monitorze SERIAL, kod zawarty w makrach # nie istnieje! Sprawdź ilość wolnej pamięci RAM po skompilowaniu szkicu z parametrem 1 a potem z parametrem 0 - tak należy to robić. Miałeś kiedyś informację po dołączeniu jakiś tam bibliotek że szkic jest za duży - wykorzystuj MAKRA !!! programuj z głową. MYŚL jak komputer, nie wklejaj kodów cudzych bezmyślnie - skąd gwarancja, że napisał go ktoś kto się zna na rzeczy ?
- #define TERMINAL 1
- #define USB_SPEED 9600
- unsigned long czasZERO = 0; // --- czas ZERO dla funkcji MILLIS()
- unsigned long czas01mt = 0; // --- czas01m dla sprawdzania co 1 minutę
- unsigned long timeout1 = 0; // --- timeout dla czas01mt
- unsigned long czas10mt = 0; // --- czas10m dla sprawdzania co 10 minut
- unsigned long timeout2 = 0; // --- timeout dla czas10mt
- unsigned long czas01ht = 0; // --- czas01ht dla sprawdzania co 60 minut
- unsigned long timeout3 = 0; // --- timeout dla czas60mt
- unsigned long czas06ht = 0; // --- czas06ht dla sprawdzania co 06 godzin
- unsigned long timeout4 = 0; // --- timeout dla czas06ht
- void setup()
- {
- #if TERMINAL
- Serial.begin(USB_SPEED);
- #endif
- }
- void loop()
- {
- czasZERO = millis();
- czas01mt = czasZERO - timeout1;
- czas10mt = czasZERO - timeout2;
- czas01ht = czasZERO - timeout3;
- czas06ht = czasZERO - timeout4;
- if(czas01mt >= 60000UL)
- {
- Demo_1m();
- timeout1 = czasZERO;
- }
- if(czas10mt >= 600000UL)
- {
- Demo_10m();
- timeout2 = czasZERO;
- }
- if(czas01ht >= 3600000UL)
- {
- Demo_1h();
- timeout3 = czasZERO;
- }
- if(czas06ht >= 21600000UL)
- {
- Demo_6h();
- timeout4 = czasZERO;
- }
- }
- void Demo_1m()
- {
- #if TERMINAL
- Serial.println("Jestem w Demo_1m, ta funkcja wywołuje się co 60 sekund.");
- #endif
- }
- void Demo_10m()
- {
- #if TERMINAL
- Serial.println("Jestem w Demo_10m, ta funkcja wywołuje się co 10 minut.");
- #endif
- }
- void Demo_1h()
- {
- #if TERMINAL
- Serial.println("Jestem w Demo_1h, ta funkcja wywołuje się co 1 godzinę.");
- #endif
- }
- void Demo_6h()
- {
- #if TERMINAL
- Serial.println("Jestem w Demo_6h, ta funkcja wywołuje się co 6 godzin.");
- #endif
- }
Brak komentarzy:
Prześlij komentarz