«Перевести» 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?
- Проблемы с использованием модуля Bluetooth HC-06 с Arduino
- Arduino Nano 33 IOT — классический Bluetooth (последовательный)
- Какова самая высокая скорость передачи данных, которая может работать между Android-устройством и Ардуино, подключенным к HC05?
Поток- это общий базовый класс, @Juraj