{"id":3158,"date":"2019-09-30T23:04:55","date_gmt":"2019-09-30T21:04:55","guid":{"rendered":"http:\/\/arduino.net.pl\/?p=3158"},"modified":"2019-11-16T00:42:15","modified_gmt":"2019-11-15T23:42:15","slug":"biblioteka-timers-h","status":"publish","type":"post","link":"https:\/\/arduino.net.pl\/index.php\/biblioteka-timers-h\/","title":{"rendered":"Biblioteka Timers.h"},"content":{"rendered":"\n<p>Biblioteki typu <strong>Timer<\/strong> s\u0105 wykorzystywane we wszelkich programach w kt\u00f3rych chcemy wywo\u0142ywa\u0107 cykliczne dzia\u0142ania, bez u\u017cywania niezwykle popularnej, ale bardzo nieprzydatnej z powodu stopowania procesora funkcji <strong>delay()<\/strong>. Oto jedna z nich.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">\u0179R\u00d3D\u0141O:<\/h5>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/100-x-arduino.blogspot.com\/2016\/11\/bibioteki-cd-czyli-o-przewadze-zmywarki.html\">\u015awietny opis wykorzystania biblioteki Timers.h<\/a><\/li><li><a href=\"http:\/\/forum.arduinopolska.pl\">http:\/\/forum.arduinopolska.pl<\/a><\/li><li><a href=\"http:\/\/forum.arduinopolska.pl\/watek-biblioteka-timers-koniec-z-uci\u0105\u017cliwym-delay\">Opis biblioteki napisany przez autora(?)<\/a><\/li><li><a href=\"https:\/\/majsterkowo.pl\/forum\/gotowiec-4-obsluga-watkow-koniec-z-uciazliwym-delay-t1974.html\">https:\/\/majsterkowo.pl\/forum\/gotowiec-4-obsluga-watkow-koniec-z-uciazliwym-delay-t1974.html<\/a><\/li><\/ul>\n\n\n\n<div class=\"wp-block-file\"><a href=\"http:\/\/arduino.net.pl\/wp-content\/uploads\/2019\/09\/Timers.zip\">Timers.h<\/a><a href=\"http:\/\/arduino.net.pl\/wp-content\/uploads\/2019\/09\/Timers.zip\" class=\"wp-block-file__button\" download>Pobierz<\/a><\/div>\n\n\n\n<p>Najprostsze u\u017cycie biblioteki, wywo\u0142anie funkcji co 1 sekund\u0119<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\n#include &lt;Timers.h&gt;\nTimers &lt;2&gt; akcja;\n\nvoid setup(){\n   akcja.attach(0, 1000, zrob_cos_co1sek);  \/\/ inicjalizacja procesu\n} \n void loop(){\n akcja.process();  \/\/pooling - cyklicznie wywolanie by sprawdzic czy juz czas dzialac\n} \nvoid zrob_cos_co1sek() {\n\/\/wlasny podprogram do wykonania co 1 sek \n}\n<\/pre><\/div>\n\n\n<p>Jednokrotne wywo\u0142anie funkcji po zadanym czasie. (\u0179r\u00f3d\u0142o <a href=\"http:\/\/100-x-arduino.blogspot.com\/search?q=Timers\">Arduino na dobry pocz\u0105tek<\/a>)<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\n#include &amp;lt;Timers.h&gt;\nTimers &amp;lt;2&gt; akcja; \n\nint i=1;\nvoid setup(){\n   akcja.attach(0, 0, zrob_cos_raz);  \/\/ inicjalizacja procesu\n}\n void loop(){\nakcja.process();  \/\/pooling - cyklicznie wywolanie by sprawdzic czy juz czas dzialac\n\nif (i) akcja.setInterval(0,5000); \/\/ zrob cos za 5 sek\n}\nvoid zrob_cos_raz()  {\nakcja.updateInterval(0,0); \/\/wylacz timer \ni=0;\n\/\/wlasny podprogram do wykonania jednokrotnie \n}\n<\/pre><\/div>\n\n\n<h5 class=\"wp-block-heading\">OPIS BIBLIOTEKI (skr\u00f3cony)<\/h5>\n\n\n\n<p> pobrany ze strony:<br><a href=\"http:\/\/forum.arduinopolska.pl\/watek-biblioteka-timers-koniec-z-uci\u0105\u017cliwym-delay?highlight=Timers.h\">http:\/\/forum.arduinopolska.pl\/watek-biblioteka-timers-koniec-z-uci\u0105\u017cliwym-delay?highlight=Timers.h<\/a><br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br>Czym biblioteka Timers r\u00f3\u017cni si\u0119 od biblioteki Timer, TimerOne czy TimerTree?&nbsp;<br>Przede wszystkim prostot\u0105 u\u017cycia jej w programie. Zasadniczo korzystamy z 4 wygodnych funkcji sk\u0142adowych klasy Timers:<\/p>\n\n\n\n<p>1) Konstruktor &#8211; inicjalizacja obiektu klasy Timers.&nbsp;<br>Przyk\u0142ad:<br>Timers &lt;8&gt; akcja; &#8211; Powo\u0142ujemy do \u017cycia obiekt klasy Timers o przyk\u0142adowej nazwie akcja, kt\u00f3ry mo\u017ce obs\u0142u\u017cy\u0107&nbsp;8 niezale\u017cnych w\u0105tk\u00f3w (zdarze\u0144)<\/p>\n\n\n\n<p>2) Funkcja attach(nr w\u0105tku, interwa\u0142 wywo\u0142ania, funkcja obs\u0142ugi), gdzie:<br>&#8211; numer w\u0105tku, to numer jednego z 8 wcze\u015bniej zdefiniowanych w konstruktorze w\u0105tk\u00f3w;<br>&#8211; interwa\u0142 &#8211; odst\u0119p czasu w ms. W tych odst\u0119pach b\u0119dzie wywo\u0142ywana funkcja obs\u0142ugi<br>&#8211; funkcja obs\u0142ugi &#8211; nazwa funkcji,  kt\u00f3ra ma by\u0107 wykonywana.<br>W tym zakresie funkcja attach jest \u0142udz\u0105co podobna do funkcji attachInterrupt.<br>Przyk\u0142ady:<br>akcja.attach(2,5000,pokazTemp); &#8211; co 5 sekund w\u0105tek 3 (liczymy od 0) wywo\u0142uje funkcj\u0119 pokazTemp()<br>akcja.attach(0, 1000, pokazCzas); &#8211; co 1 sekund\u0119 w\u0105tek pierwszy wywo\u0142uje funkcj\u0119 pokazCzas()<br>akcja.attach(1,0,flopKierunek); &#8211; definiujemy w\u0105tek nr 2, ale nie mamy na razie zamiaru z niego korzysta\u0107 &#8211; interwa\u0142 =0&nbsp;<\/p>\n\n\n\n<p>UWAGA!!!<br>Funkcja attach musi by\u0107 zainicjowana w funkcji setup() dla ka\u017cdego z w\u0105tk\u00f3w.<br>Je\u015bli nie mamy zamiaru od razu korzysta\u0107 z danego w\u0105tku, to w funkcji attach ustawiamy interwa\u0142 na 0<\/p>\n\n\n\n<p>3) Funkcja updateInterval(nr w\u0105tku, akt interwa\u0142), gdzie:<br>&#8211; nr w\u0105tku, to numer jednego z 8 wcze\u015bniej zdefiniowanych w konstruktorze w\u0105tk\u00f3w;<br>&#8211; akt interwa\u0142 &#8211; dynamiczna zmiana czasu wywo\u0142ywania funkcji, w szczeg\u00f3lnym przypadku dla interwa\u0142=0 wy\u0142\u0105czamy&nbsp;obs\u0142ug\u0119 w\u0105tku.<br>Przyk\u0142ady:<br>akcja.updateInterval(2,0); &#8211; zatrzymanie obs\u0142ugi w\u0105tku nr 3<br>akcja.updateInterval(4,189); &#8211; zmiana lub ustawienie dla w\u0105tku nr 5 czasu wywo\u0142ywania funkcji obs\u0142ugi na 189 ms.<\/p>\n\n\n\n<p>4) funkcja process() &#8211; wywo\u0142ywana w p\u0119tli loop, uruchamia globaln\u0105 obs\u0142ug\u0119 wszystkich zadeklarowanych<br>w konstruktorze w\u0105tk\u00f3w<br>Przyk\u0142ad:<br>akcja.process();<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Biblioteki typu Timer s\u0105 wykorzystywane we wszelkich programach w kt\u00f3rych chcemy wywo\u0142ywa\u0107 cykliczne dzia\u0142ania, bez u\u017cywania niezwykle popularnej, ale bardzo nieprzydatnej z powodu stopowania procesora funkcji delay(). Oto jedna z&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2],"tags":[98],"class_list":["post-3158","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-timer"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/comments?post=3158"}],"version-history":[{"count":7,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3158\/revisions"}],"predecessor-version":[{"id":3290,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/3158\/revisions\/3290"}],"wp:attachment":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/media?parent=3158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/categories?post=3158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/tags?post=3158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}