Я делаю проект, в котором интерфейс с пользователем зависит от его ситуации, используя Arduino IDE и просто стандартный ATmel328p.(микро)
Некоторые пользователи подключаются через последовательный терминал.(Используется Serial.print) Некоторые пользователи будут взаимодействовать через последовательный терминал, но с Bluetooth.(Используется Serial1.print, micro имеет 2 последовательных интерфейса). У некоторых пользователей будет ЖК-экран.(еще не реализовано)
Я ищу лучший способ перенаправить данные из моего приложения, использующего классы, в нужный интерфейс без необходимости переписывать весь код.
Я думал оиспользуя указатель на функцию и используя его в качестве аргумента в конструкторе объектов моего класса.Поэтому я просто изменяю одну функцию, и все данные направляются правильным образом.
void wrapperfunction(char* data) {Serial.print(data);}
Class SOMETHING {
SOMETHNG(void (output)(char*)){}
}
Я использую символ * для передачи данных, поэтому я отправляю несколько строк.(это выдает предупреждения компиляции для приведения строки к типу char *, но, я думаю, я могу жить с этим?).
хорошо работает со строками, но проблема в том, что моя программа также использует значения типа int и float.Так что просто изменить все операторы Serial.print, использованные для более раннего прототипирования, не работает.Сначала я должен привести все к строковому или символьному типу.
Когда я конвертирую все целые и плавающие числа в строку с помощью функции String (), я также заметил, что это довольно дорого, все строковые функции занимают около 20% моегопамять ...: (
Это заставило меня задуматься, нахожусь ли я на правильном пути для решения этой проблемы ... Я надеюсь, что некоторые более опытные программисты во встроенном C ++ могут дать мне несколько советов о том, что лучше всего делать длятакая проблема.
Заранее спасибо,
PS: мой первый вопрос о SO, мне уже жаль, если я нарушил некоторые правила; -)