Можно ли распечатать произвольный объект, передав его в Serial.print()?
esp8266
stream
Я гуглил об этом, но не могу найти ответ. Как я предполагаю, мне придется наследовать от класса Print и каким-то образом передать его методам печати ту часть моего объекта, которую я хотел бы напечатать. Но я не уверен, как это сделать, и возможно ли это вообще.
@Mykolas, 👍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
Смотрите также:
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Разница между этими двумя платами NodeMCU?
Majenko, большое спасибо за ответ. У меня получилось. Просто небольшой комментарий к твоему коду. Я думаю, вместо "size_t printTo(Print& p)" должно быть "size_t printTo(Print& p) const". Спасибо, @Mykolas
Я просто скопировал и вставил прототип из заголовка., @Majenko
Я получал ошибку не переопределяя виртуальную функцию. После добавления константы все ок., @Mykolas
Хорошо. Я изменил его для дальнейшего использования., @Majenko
Откуда мы должны знать эти вещи? Документация по arduino довольно... скудная... если говорить точнее. Копаетесь в исходном коде на github?, @vsz