Передача HardwareSerial и SoftwareSerial как свойства класса
Я хочу знать, есть ли способ использовать одно свойство Serial0
для хранения HardwareSerial
или SoftwareSerial
или других экземпляров класса поддержка основных методов, таких как available()
, read()
и write()
, для создания CustomSerial
Класс (полиморфизм?).
class CustomSerial{
<GenericSerial??> Serial0;
char c;
void read(void){
c=Serial0.read();
}
};
Вызовы должны быть:
CustomSerial SerialCus;
int n=SerialCus.available();
char c=SerialCus.read();
SerialCus.write(c);
Что мне следует использовать в качестве класса GenericSerial
или как следует его использовать? Я попробовал класс Stream
(как указано в ответе), но по какой-то причине функциональность не сохраняется (пишет неизвестные символы). Действительно ли Stream
должен быть универсальным классом, который мне нужен для этого?
@Brethlosze, 👍0
Обсуждение1 ответ
Лучший ответ:
Базовым типом для последовательных классов оборудования Arduino, SoftwareSerial и других последовательных классов программного обеспечения, а также некоторых других классов Arduino является Поток (ссылка). Stream.h на GitHub
class CustomSerial {
private:
Stream &stream;
public:
CustomSerial(Stream &_stream) : stream(_stream) {}
int read() {
return stream.read();
}
int available() {
return stream.available();
}
int peek() {
return stream.peek();
}
void write(byte b) {
stream.write(b);
}
};
SoftwareSerial Serial0(10, 11);
CustomSerial SerialCus(Serial0);
void setup() {
}
void loop(){
if (SerialCus.available()) {
char c = SerialCus.read();
SerialCus.write(c);
}
}
Я действительно использовал Stream
для определения свойства, но по какой-то причине это не работает так же, как использование HardwareSerial
, поэтому я не смог расширить его для экземпляров SoftwareSerial
., @Brethlosze
@hyprfrcb, я добавил код в ответ, @Juraj
Этот параметр работает идеально!... А также расскажет, как использовать ссылки Stream
... :), @Brethlosze
AltSoftSerial также использует Stream., @Jot
- Создать новый серийный класс, наследующий от Stream
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Как работает последовательная связь на Arduino?
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
Если нет возможности сделать общий класс, то можно использовать шаблон. Если класс (любой класс) имеет .available(), .read() и .write(), то компилятор заполняет используемый класс., @Jot