.. vim: set expandtab fileencoding=utf-8 nomodified wrap textwidth=200 shiftwidth=2 ts=2 foldmethod=marker foldcolumn=4 ruler showcmd lcs=tab\:|- list: .. title: Arduino: lib.logging .. slug: 2019-03-04-Arduino-lib_logging .. date: 2019-03-04 19:25:09 CET .. tags: Arduino,libs .. category: Arduino .. link: .. description: Library for logging .. type: text .. author: Gilhad .. |logo| image:: /images/logo/gilhad.png Knihovna pro logovaní na Arduinu (i v jiných knihovnách, na různá média - zatím jen Serial, ale jde to rozšiřovat) .. TEASER_END Reakce na * https://www.arduino-forum.cz/viewtopic.php?f=40&t=1637 Jak v rámci knihovny použít funkce z jiné knihovny Tady jsou knihovny a example: * `výpis example.ino `_ a `zdroj example.ino `_ * `výpis example_lib.cpp `_ a `zdroj example_lib.cpp `_ * `výpis example_lib.h `_ a `zdroj example_lib.h `_ * `výpis logging.cpp `_ a `zdroj logging.cpp `_ * `výpis logging.h `_ a `zdroj logging.h `_ * `výpis logging_serial.cpp `_ a `zdroj logging_serial.cpp `_ * `výpis logging_serial.h `_ a `zdroj logging_serial.h `_ Pokud budete chtít další výstupy (třeba u8g2), tak podle vzoru logging_serial.cpp a logging_serial.h napíšete logging_u8g2.\* a použijete ve svém programu (viz mylog) nebo pro knihovny (liblog a libloge) jako parametr, kam mají logovat. Vaše knihovna - je tu představována example_lib.cpp a example_lib.h - používá pouze generické logování logging.h (to jí stačí), a je na vás, jakého potomka zvolíte jako parametr (podle toho bude logovat na různá zařízení). Print.h je includovana pouze pro snadné užití HEX,BIN,DEC, OCT jako type. Samozřejmě, že pokud je buď nepoužíváte, nebo nahradíte jejich numerickými hodnotami, tak není třeba Print.h vůbec přímo includovat. Povšimněte si, že potomek (zde logger_serial z logging_serial.\* ) může mít své vlastní soukromé proměnné (třeba have_Serial, nebo u8g2 a nějaké souřadnice, kam píše, nebo cokoli jiného) a to jak na úrovni třídy (společné pro všechny instance - třeba to LCD) tak pro každou instanci zvlášť (např. místo, kam ty logy má na obrazovku vypisovat). Také si povšimněte, že zde ten společný předek nejenže převádí různé logování na příslušné write... metody, ale přidává tam i nějaké další údaje - úroveň, jméno ... pokud máte omezený prostor, lze samozřejmě předka upravit. Tyto knihovny byly napsány během krátké doby a moc toho neumí. Možná časem vydám další rozšíření, více navazujících potomků, PROGMEM a tak, pokud to budu v nějakém projektu potřebovat vylepšit, možná to prostě nechám tak, protože pro základní ladění to celkem stačí. Pokud budete chtít u odladěného programu tyto výpisy vypnout, stačí do konstruktoru logovací knihovny zadat dost vysoké číslo a nevypíše se nic. Nebo lze použít prázdného potomka, který nebude vypisovat nikam nic. (A nebo to ručně vyházet, čímž se pár bytů ušetří, ale v případě potřeby dalšího ladění se bude muset všechno psát znovu). Idea je velmi volně převzatá z https://docs.python.org/2/library/logging.html Komu vrtá hlavou, proč příklad používá zrovna 4 a 18, tak ať si to v bináru spočte na prstech pravé ruky. ~~~~ **Licence** Knihovny jsou publikované pod `LGPL `_, takže je lze snadno upravovat a používat. Stejně tak ukázkový program je pod `GPL v2.0 `_, takže není problém ho měnit a použít jako základ něčeho dalšího. (Ale vzhledem k tomu, jak je jednoduchý, není ani problém napsat zbrusu nový pod jinou licencí "na zelené louce"). ~~~~ hint for me: .. code:: bash for i in * ; do echo "* \`výpis $i \`_ a \`zdroj $i \`_"; done