«Перевести» BluetoothSerial в HardwareSerial
У меня есть функция, которая принимает класс HardwareSerial
в качестве аргумента:
void ProcessLine(HardwareSerial *serial, char *line)
{
// сделай что-нибудь
serial->write("blablabla");
}
В моем коде также есть BluetoothSerial
, который разделяет необходимые функции (например, write()
) с HardwareSerial
.
Чтобы избежать дублирования кода моей довольно длинной ProcessLine()
, есть ли способ "привести" BlutoothSerial
в HardwareSerial
?
@Mark, 👍0
Обсуждение1 ответ
Нет, вы не "транслируете" между ними. Вместо этого вы используете полиморфизм.
В среде Arduino большинство классов помещаются в «дерево». с аналогичными классами, "отвисшими" общий родитель "ветвь". В этом случае как BluetoothSerial
, так и HardwareSerial
, будучи последовательными классами, оба являются потомками класса Stream
. Действительно, именно этот класс Stream
(который сам является потомком класса Print
) дает этим объектам большинство их функций.
Поэтому, если вам нужен доступ к какой-либо функции, специфичной для класса HardwareSerial
(например, .begin(...)
функция) вы всегда должны работать вверх по дереву до класса, который предоставляет наиболее ограниченный набор функций, отвечающих вашим потребностям. В этом случае, поскольку вы только печатаете данные, это будет класс Print
. Если бы вы читали данные, вы бы выбрали класс Stream
.
Поэтому, если вы измените свою функцию так, чтобы она принимала Print *serial
вместо HardwareSerial *serial
, тогда она будет принимать любой объект, который в конечном итоге наследуется от объект Print
— любые последовательные объекты, любые объекты сетевого потока и т. д.
- Arduino Pro Micro, получить данные с контакта Tx?
- Bluetooth-модуль HC-05 не принимает AT-команды
- как отправить данные в Adafruit Bluefruit Feather (32u4) через Bluetooth?
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как прервать соединение HM10 Bluetooth?
- Arduino Nano 33 IOT — классический Bluetooth (последовательный)
- Плохо отформатированные символы с использованием Bluetooth-модуля JDY-30
- Какова самая высокая скорость передачи данных, которая может работать между Android-устройством и Ардуино, подключенным к HC05?
Поток
- это общий базовый класс, @Juraj