Tady je popsano, jak se dela logovani v pythonu (je to standardni knihovna, neco jako digitalRead() pro Arduino)
https://docs.python.org/2/library/logging.html
Python neni zas tak moc jiny nez treba C++, jenom misto slozenych zavorek pouziva odsazeni - jinak se to da priblizne cist a pochopit smysl.
V podstate pro Adruino by se to dalo (pro zacatek) strasne zjednodusit a osekat:
logovani.h
Kód: Vybrat vše
#ifndef LOGOVANI_H
#define LOGOVANI_H
// hlavicku vkladame do dane kompilacni jednotky jen jednou, kdyz ji includuje nejaka dalsi hlavicka, tak uz to preskocime
#define LOG_INFO 20
#define LOG_ERROR 40
class logger{
public:
int set_level; // hladina, od ktere se loguje
virtual void log(int level, static char *msg)=0; // posle chybovou hlasku, pokud je level >= set_level - ZDE NEIMPLEMENTOVANO
void info( static char *msg) { log(LOG_INFO,msg);};
void error( sttic char * msg) { log(LOG_ERROR,msg);};
}
// sem prijdou treba dalsi tridy
// konec hlavicky
#endif
(a s tim uz se pokryje vetsina potrebneho - cokoli dokazeme prevest na retezec, pokud je treba, udelame vic logu za sebou. Samozrejme to jde vylepsit ukladanim hlasek do PROGMEM a tak podobne, udelanim logu pro inty, nebo ve smyslu strf a s promennym poctem parametru, nebo podobne jako Serial ...)
no a pak udelat tridy pro ruzne vystupy, treba pro Serial:
logovani.h
Kód: Vybrat vše
class serial_loger : public logger {
virtual void log(int level, static char *msg); // tohle zimplementujeme
};
logovani.cpp
Kód: Vybrat vše
#include logovani.h
void serial_logger::log(int level, static char *msg){
if (level >= set_level) Serial.writeln(msg);
};
program.ino:
Kód: Vybrat vše
#include logovani.h
#include neco.h
serial_logger mylog();
jina_trida jt(mylog,param1, param2);
void setup(){
Serial.begin(9600);
// po odladeni treba
// mylog_set_level=LOG_ERROR
// aby to nebylo tak ukecane
mylog.info("Setup");
.....
jt.begin();
...
neco.h
Kód: Vybrat vše
#ifndef NECO_H
#define NECO_H
#include logovani.h
class jina_trida {
public:
jina_trida(logger al, int ap1, int ap2); //konstruktor
~jina_trida(); //destruktor
void begin();
// dalsi funkce ...
private: // nebo klidne public, podle potreby a pouziti
logger l;
int par1;
int par2;
#endif
neco.cpp
Kód: Vybrat vše
#include neco.h
jina_trida::jina_trida(logger al, int ap1, int ap2) : l(al),par1(ap1),par2(ap2){
l.info("Jina trida - konstruktor");
if (par1==0) {
l.error("par1 nesmi byt nula");
//nejake osetreni ci havarie
}
};
jina_trida::~jina_trida(){// prazdny destruktor
};
jina_trida::begin(){
l.info("jina trida begin()");
// ....
};