Re: Jak "obalit" Serial.print svou funkcí
Miroslav Mraz
mrazik na volny.cz
Pondělí Březen 4 16:52:42 CET 2019
Je tam vícenásobná dědičnost, tak do toho není moc vidět. Zkusil bych
něco jako
class MyLog : public Stream { // Vlastní třída
public:
MyLog (HardwareSerial & s, Udp & u) : ser(s), udp(u) {};
using Print::write;
size_t write (const uint8_t * buffer, size_t size) override {
// tady lze udělat nějakou akci, ale není zaručeno, kdy se to
přesně volá
size_t res;
res = ser.write (buffer, size);
res = udp.write (buffer, size);
return res;
};
private:
HardwareSerial & ser;
Udp & udp;
};
static HardwareSerial serial; // toto je už patrně definováno jinde
static Udp UDP; // a toto asi také
static MyLog log (serial, UDP); // tohle musíte definovat sám
// použití
int main () { // v Arduinu to bude v loop(), toto je test na PC
// jsou použitelné všechny metody print, println třídy Print
log.println("test");
// a normálně dál pracovat se serial i UDP
serial.println("serial");
UDP.println("udp");
return 0;
}
ale nejsem Arduinista, takže to může být špatně.
Mrazík
Dne 04. 03. 19 v 14:06 Petr Zapadlo napsal(a):
> Zdravím,
>
> potřeboval bych "funkci" Serial.print (i println a další) obalit svou
> funkcí ve které bych z příchozích parametrů vykonal něco svého a
> následně zavolal Serial.print.
>
> Cílem má být možnost si logovací hlášky duplicitně posílat na seriový
> port a zároveň na UDP soket.
>
> Asi mi něco uniká z c++, ale nedokážu vytvořit funkci, která by byla
> ochotna akceptovat takovou šíři různých datových typů jako Serial.print,
> který je ochoten zpracovat a vypsat na seriáku prakticky cokoliv.
>
> Jak na to?
>
> Díky
>
> Petr
Další informace o konferenci Hw-list