questo è un altro lcassico motivo per cui si usano le classi. Avete mai fatto caso che la Serial e altre classi sono sottoclassi di Stream?
cioò vuol dire che per il vostro progetto scrivete gli output usando la classe astratta stream. Sarà poi compito dell’utente, a seconda del suo sistema preferito, inizializzare la classe usando Serial, un EthernetClient, o una classe “ad hoc” (vedi LCD), l’iportante è che estenda Stream!
edit: Stream è più per la lettura, la sua superclasse (classe madre) è print, che invece contiene i metodi di scrittura. quindi lasciate stare la stream, e usate direttamente la print