Можно ли использовать последовательный порт в качестве переменной?
Я работаю над проектом, в котором по причинам устранения неполадок я часто переключаю компоненты на разные последовательные порты. Может быть, один раз это в Serial, затем в Serial1, может быть, мне нужно попробовать, работает ли Serial программного обеспечения.
Но менять каждую строку, где написано Serial.print или Serial.write для нового порта, довольно сложно и легко напортачить.
Можно ли создать определение в начале кода, которое позволит мне переименовать Serial в SensorSerial, чтобы, просто изменив это определение, я был уверен, что он будет использовать правильный порт?
@metichi, 👍7
2 ответа
Лучший ответ:
Да. Самый простой способ — с помощью макроса препроцессора. Макросы заменяются дословно до компиляции, поэтому вы можете сделать что-то вроде:
#define MY_SERIAL Serial
void setup() {
MY_SERIAL.begin(115200);
}
void loop() {
MY_SERIAL.println(millis());
delay(1000);
}
Ответ Маженко является правильным ответом на ваш вопрос. Но чтобы ответить на заголовок вопроса, если вам когда-либо понадобится использовать разные выходы и входы Arduino в качестве переменных, большинство из них имеют общий тип Stream или Print. Так было бы:
Stream& SensorSerial = Serial;
или
Stream* SensorSerial;
SensorSerial = &Serial;
Иерархия классов Arduino Stream:
Дал ответ другому человеку, потому что он более точно соответствовал тому, что я имел в виду. Но это действительно полезно знать для другой части того же проекта., @metichi
На самом деле это то, как это делают библиотеки, и я считаю, что это лучше, чем решение с препроцессором., @AndreKR
Что еще более важно, это можно использовать во время выполнения для переключения между &Serial, &Serial2 и т. д. Макросы подходят для времени компиляции., @mckenzm
это должен быть принятый ответ., @Alnitak
- Как получить тип данных переменной?
- преобразование последовательного сообщения, разделенного запятыми, в 7 переменных без знака Long
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- Как объявить массив переменного размера (глобально)
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
Да, спасибо, это именно то, что я искал, @metichi