Как создать ссылку на объект внешней печати

Сейчас у меня есть объект:

class Dog
{
  public:
    Dog(uint8_t I2c, Stream& feedback);
    void Speak();
  private:
    uint8_t _I2c;
    Stream& _output;
};

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

Dog::Speak(){
_output.println("Hi There.");
}

В настоящее время это построено в моем скетче с помощью:

Dog Dug([I2cPort], Serial);

Как я могу изменить свой класс, чтобы он был совместим с последовательным объектом или ЖК-дисплеем (используя Библиотека RGB LCD от Adafruit)?

Например:

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

Дополнительная информация:

Рассматриваемый ЖК-дисплей в основном используется в качестве дисплея пользовательского интерфейса в собственной библиотеке. Эта библиотека обновляет дисплей каждые 1,5 секунды. Поскольку информация из speak(); и пользовательского интерфейса имеет одинаковый приоритет, допустимо, чтобы одна мгновенно перезаписывала другую.

Я открыт для решений, предполагающих изменение конструкции Dog, единственное требование — это возможность указать print("[something]"); в Dog.cpp

Мне интересно задать этот вопрос об Arduino SE, поскольку я считаю, что существуют различия в том, как вы бы подошли к этому, если бы проблема возникла на традиционном компьютере.

, 👍0

Обсуждение

это не буфер. только ссылка, @Juraj

Принял к сведению, отредактировал вопрос для ясности., @ATE-ENGE

отлично. теперь вы вставили ответ в заголовок вопроса :-), @Juraj

И вот так вот, это работает. Спасибо за магию., @ATE-ENGE


1 ответ


Лучший ответ:

1

Если ваш класс осуществляет запись только в поток, вы, вероятно, захотите, чтобы ваш класс принимал объект Print вместо объекта Stream.

Библиотека Adafruit наследуется от Print.

,

Это можно изменить, мне эта линия нужна только для обратной связи с моим COM-портом (последовательным) или с ЖК-дисплеем., @ATE-ENGE

оба являются производными от класса Print. https://arduinoprosto.ru/q/52563/syslogappender-for-log4esp/52575#52575, @Juraj