Как передать в функцию объект последовательного порта?

rico
Offline
Зарегистрирован: 26.08.2014

Добрый день!

Из разрозненных функций собираю свою библиотеку для работы с GSM, ориентируясь прежде всего на Мегу. Соответственно, в конструктор класса нужно передать порт, с которым нужно будет работать. На такую конструкцию компилятор ругается

HardwareSerial _SerialPort = Serial;
void GSM_begin(HardwareSerial SerialPort) {
	_SerialPort = SerialPort;
}

error: use of deleted function 'HardwareSerial& HardwareSerial::operator=(const HardwareSerial&)

Как правильно организовать выбор объекта (Serial...Serial3) ?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Передавайте Stream*

Stream* WorkStream = NULL;
void GSM_Begin(Stream* s)
{
WorkStream = s;
}

GSM_Begin(&Serial2);

Ну или, если прямо вот так надо HardwareSerial, то передавайте указатель на него:

HardwareSerial* _SerialPort = &Serial;

	void GSM_begin(HardwareSerial* SerialPort) {

	    _SerialPort = SerialPort;

	}

GSM_begin(&Serial2);

Потому как оператор копирования по вполне разумным причинам в классе закрыт. А вообще - удобнее работать со Stream*, от которого много чего наследуется, в том числе и HardwareSerial. Писать, читать, не задумываясь, что там на самом деле за класс - это удобно. Вместо порта нужна будет запись в файл - передали Stream* файла - и айда, без малейшей переделки кода ;)

rico
Offline
Зарегистрирован: 26.08.2014

Спасибо!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

rico пишет:

Спасибо!

Да незчт, обращайтесь.