piątek, 26 lutego 2021

ARDUINO : prosty sposób na HARMONOGRAM

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 ?

  1. #define TERMINAL 1
  2. #define USB_SPEED 9600
  3.  

  4. unsigned long czasZERO = 0;                 // --- czas ZERO dla funkcji MILLIS()
  5. unsigned long czas01mt = 0;                 // --- czas01m dla sprawdzania co 1 minutę
  6. unsigned long timeout1 = 0;                 // --- timeout dla czas01mt
  7. unsigned long czas10mt = 0;                 // --- czas10m dla sprawdzania co 10 minut
  8. unsigned long timeout2 = 0;                 // --- timeout dla czas10mt
  9. unsigned long czas01ht = 0;                 // --- czas01ht dla sprawdzania co 60 minut
  10. unsigned long timeout3 = 0;                 // --- timeout dla czas60mt
  11. unsigned long czas06ht = 0;                 // --- czas06ht dla sprawdzania co 06 godzin
  12. unsigned long timeout4 = 0;                 // --- timeout dla czas06ht

  13. void setup()                                                                                    
  14. {                                                                                                    
  15.     #if TERMINAL                                                                              
  16.         Serial.begin(USB_SPEED);
  17.     #endif                                                                                          
  18. }                                                                                                    

  19. void loop()
  20. {               
  21.     czasZERO = millis();
  22.     czas01mt = czasZERO - timeout1;
  23.     czas10mt = czasZERO - timeout2;
  24.     czas01ht = czasZERO - timeout3;
  25.     czas06ht = czasZERO - timeout4;
  26.    
  27. if(czas01mt >= 60000UL)                                                                  
  28.     {                                                                                        
  29.     Demo_1m();
  30.         timeout1 = czasZERO;    
  31.     }
  32.    
  33. if(czas10mt >= 600000UL)                                                                  
  34.     {                                                                                        
  35.         Demo_10m();
  36.         timeout2 = czasZERO;
  37.     }
  38.    
  39.     if(czas01ht >= 3600000UL)                                                              
  40.     {            
  41.         Demo_1h();
  42.         timeout3 = czasZERO;
  43.     }  
  44.    
  45.     if(czas06ht >= 21600000UL)
  46.     {                        
  47.     Demo_6h();
  48.         timeout4 = czasZERO;  
  49.     }                                                                                  
  50. }      
  51.  
  52.  
  53. void Demo_1m()
  54. {
  55.   #if TERMINAL  
  56.       Serial.println("Jestem w Demo_1m, ta funkcja wywołuje się co 60 sekund.");
  57.   #endif
  58. }
  59.  
  60. void Demo_10m()
  61. {
  62.   #if TERMINAL  
  63.       Serial.println("Jestem w Demo_10m, ta funkcja wywołuje się co 10 minut.");
  64.   #endif
  65. }
  66.  
  67. void Demo_1h()
  68. {
  69.   #if TERMINAL  
  70.       Serial.println("Jestem w Demo_1h, ta funkcja wywołuje się co 1 godzinę.");
  71.   #endif
  72. }
  73.  
  74. void Demo_6h()
  75. {
  76.   #if TERMINAL  
  77.       Serial.println("Jestem w Demo_6h, ta funkcja wywołuje się co 6 godzin.");
  78.   #endif
  79. }

Brak komentarzy:

Prześlij komentarz

BME280 - Sensor temperatury, wilgotności i ciśnienia

  BME280 (ESP32/ESP2866) BME280 to prosty w użyciu czujnik temperatury, wilgotności oraz ciśnienia atmosferycznego. Zasilany jest napię...