Можно ли распечатать произвольный объект, передав его в Serial.print()?

esp8266 stream

Я гуглил об этом, но не могу найти ответ. Как я предполагаю, мне придется наследовать от класса Print и каким-то образом передать его методам печати ту часть моего объекта, которую я хотел бы напечатать. Но я не уверен, как это сделать, и возможно ли это вообще.

, 👍6


1 ответ


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

15

Существует класс под названием Printable. Если вы наследуете от него и реализуете функцию size_t printTo(Print& p), ваш объект затем можно передать функциям печати:

class myClass : public Printable {
    private:
        int _val1;
        int _val2;

    public:
        myClass(int v1, v2) : _val1(v1), _val2(v2) {}
        size_t printTo(Print& p) const {
             size_t r = 0;

             r += p.print("One: ");
             r += p.print(_val1);
             r += p.print(" Two: ");
             r += p.print(_val2);
             return r;
       }
};

Затем:

myClass ob(4, 5);

Serial.println(ob);
=> One: 4 Two: 5
,

Majenko, большое спасибо за ответ. У меня получилось. Просто небольшой комментарий к твоему коду. Я думаю, вместо "size_t printTo(Print& p)" должно быть "size_t printTo(Print& p) const". Спасибо, @Mykolas

Я просто скопировал и вставил прототип из заголовка., @Majenko

Я получал ошибку не переопределяя виртуальную функцию. После добавления константы все ок., @Mykolas

Хорошо. Я изменил его для дальнейшего использования., @Majenko

Откуда мы должны знать эти вещи? Документация по arduino довольно... скудная... если говорить точнее. Копаетесь в исходном коде на github?, @vsz