Serial как параметр.

Radjah
Offline
Зарегистрирован: 06.08.2014

Есть код для Mega, в котором для 4 аппаратных и одного программного Serial выполняется ряд одинаковых для всех портов действий. Код обработки полученных данных от номера порта не зависит, и его я вынес в отдельную функцию.

Возможно ли передать Serial, Serial1...Serial3 в качестве параметра функции?

Код.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Как то так

void foo(Serial *p_Serial)

для ленивых, но не рекомендуется:

void foo(Serial &p_Serial)

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Буду пробовать. Надеюсь, что ничего не сломаю. :)

Для SoftwareSerial не прокатит, или я ошибаюсь?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вместо Serial, возможно придётся передавать Stream, это базовый класс для обоих вариантов сериала

В смысле _void foo(Stream *p_Stream)

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Нашел класс HardwareSerial. Сделал с ним функцию, но работает она нормально только для одного Serial. Если пишу два её вызова для разные Serial, то ничего чтение происходит только один раз. Остальные порты, для которых оставил код как есть, всё работает. Температура с давлением в цикле тоже читаются.

Сделал в вызове &Serial, а в функции заменил точки на стрелки. Заработало для всех аппаратных.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Я не телепат, если нужна помощь, выкладывайте скетч, только по читайте как его правильно вставить в сообщение, иначе я даже смотреть не буду

Radjah
Offline
Зарегистрирован: 06.08.2014

Разобрался со всем. :)

Спасибо за пинок в нужном направлении. Результат по ссылки из первого сообщения.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Рекомендую описывать параметр как const String &, иначе у Вас передаётся копия строки, а это лишняя память и когда то её не хватит. Trim можно сделать снаружи.