Вывод в порт

vlad072
Offline
Зарегистрирован: 01.08.2017

Задача: функция должна уметь выводить как в аппаратный Serial так и в SoftwareSerial массив из 8 байт в текстовом читабельном виде. Так будет работать?

#include <SoftwareSerial.h>
SoftwareSerial ss(9, 10);
void octaprint(Stream* uart, byte* arr) {
  for (byte _i = 0; _i < 8; _i++) {
    if (arr[_i] < 0x10) uart->write('0');
    uart->print(arr[_i], HEX);
    if (_i < 7) uart->write(' ');
  }
}
//...
byte sid[8] = {0,1,2,3,4,5,6,7};
octaprint(&Serial, sid);
octaprint(&ss, sid);
//....

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Если уж на NULL не проверяешь, то лучше так 

void octaprint(Print &uart

тогда точно ничего пустое не передашь. 

vlad072
Offline
Зарегистрирован: 01.08.2017

Ну т.е. если объявить формальный параметр типа Stream (или Print) то и в Serial и SoftwareSerial вывод будет работать? Собственно в этом вопрос. Просто проверить сейчас нет возможности, а "правильнописание хромает" © ))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

vlad072 пишет:

Ну т.е. если объявить формальный параметр типа Stream (или Print) то и в Serial и SoftwareSerial вывод будет работать? 

вывод будет правильно работать в любого потомка Stream (или Print). Проверено

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

Если наследуются от Stream - то можно, работать будет. Более того - можно написать свой наследник от Stream - и тоже скармливать туда, если вдруг надо (например, для юнит-теста).

vlad072
Offline
Зарегистрирован: 01.08.2017

Спасибо ребята, вопрос закрыт.