Right now I have an object:

class Dog
    Dog(uint8_t I2c, Stream& feedback);
    void Speak();
    uint8_t _I2c;
    Stream& _output;

Dog::Dog(uint8_t I2c, Stream& feedback):_output(feedback),_I2c(I2c){}

_output.println("Hi There.");

That is currently constructed in my sketch via:

Dog Dug([I2cPort], Serial);

How can I modify my class so that to be compatible with taking either a Serial object or an LCD display (using Adafruit's RGB LCD library )?


Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
Dog Dug([I2cPort], Serial);
Dog Sam([I2cPort], lcd);

Additional info:

The LCD in question is mostly used as a UI display in its own library this library refreshes the display every 1.5 sec. As information from speak(); and the UI have similar priority, it is acceptable if one instantly overwrites the other.

I am open to solutions that involve modifying the construction of Dog the only requirement is that I need to be able to indicate print("[something]"); in the Dog.cpp

I'm interested in asking this question on the Arduino SE as I believe there are differences in how you would approach this if the problem was on a traditional computer.

  • it is not a buffer. only a reference
    – Juraj
    Sep 12, 2018 at 16:36
  • Noted, edited the question for clarity.
    – ATE-ENGE
    Sep 12, 2018 at 16:39
  • nice. now you put the answer into the questions title :-)
    – Juraj
    Sep 12, 2018 at 16:40
  • And just like that, it works. Thanks for the magic.
    – ATE-ENGE
    Sep 12, 2018 at 17:02

1 Answer 1


If your class is only writing to the stream you probably want to have your class take a Print object instead of a Stream object.

The Adafruit library inherits from Print.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.