Другие языки программирования и технологии

Как считывать строки в Arduino?

Я пытался использовать Serial Read, чтобы получить строку, но при попытке проверить равенство двух строк получил ошибку. Что делать?
Вот несколько важных моментов, которые стоит учесть при чтении строк:

Завершение строки: В Arduino, строки обычно завершаются символом новой строки ("\n") или комбинацией символов новой строки и возврата каретки ("\r\n"). При чтении строки из Serial, важно учесть это завершение строки и обрабатывать его соответствующим образом.

Буфер: Для чтения строк в Arduino, часто используется буфер (массив символов), в который считываются символы из Serial. Буфер должен иметь достаточный размер для хранения считываемой строки, и он должен быть правильно инициализирован.

Операторы сравнения строк: В Arduino, операторы сравнения (например, "==", "!=", "strcmp()", и т. д.) не могут быть использованы непосредственно для сравнения строк. Вместо этого, нужно использовать функции сравнения строк, такие как "strcmp()", которые сравнивают содержимое строк, а не их адреса.

Очистка буфера: После считывания строки из Serial, буфер может содержать лишние символы, такие как символы новой строки или возврата каретки. Эти символы могут повлиять на сравнение строк. Поэтому важно очистить буфер перед чтением новой строки.

Пример чтения строки из Serial и сравнения с другой строкой:
 #define BUFFER_SIZE 128 // Размер буфера 

char buffer[BUFFER_SIZE]; // Буфер для чтения строки
String expectedString = "Hello"; // Ожидаемая строка для сравнения

void setup() {
Serial.begin(9600); // Инициализация Serial
}

void loop() {
if (Serial.available() > 0) {
int bytesRead = Serial.readBytesUntil('\n', buffer, BUFFER_SIZE); // Чтение строки из Serial до символа новой строки
buffer[bytesRead] = '\0'; // Добавление нулевого символа в конец буфера
String receivedString = String(buffer); // Преобразование буфера в объект String

if (receivedString.equals(expectedString)) { // Сравнение строк
Serial.println("Strings are equal.");
} else {
Serial.println("Strings are not equal.");
}

// Очистка буфера
for (int i = 0; i < BUFFER_SIZE; i++) {
buffer[i] = '\0';
}
}
}
МД
Михаил Дизнер
1 635
Лучший ответ
Существует несколько способов считывания строк в Arduino:

1.Использование функции Serial.read(): эта функция читает один байт из последовательного порта и возвращает его как целое число. Если на последовательном порту доступна строка, вы можете использовать цикл для чтения каждого символа в буфере и сохранения его в массиве.

Пример:
String inputString = ""; // объявляем строковую переменную
void setup() {
Serial.begin(9600); // инициализируем последовательный порт
}
void loop() {
while (Serial.available()) { // проверяем, есть ли данные в буфере
char c = Serial.read (); // читаем один символ
inputString += c; // добавляем символ в конец строки
if (c == '\n') { // если достигнут символ перевода строки
Serial.print("Received string: "); // выводим сообщение
Serial.println(inputString); // выводим строку
inputString = ""; // очищаем строковую переменную
}
}
}

2.Использование функции Serial.readStringUntil(): это более простой способ считывания строк, который считывает символы из последовательного порта до определенного символа. В этом примере мы будем использовать символ перевода строки \n.

Пример:
void setup() {
Serial.begin(9600); // инициализируем последовательный порт
}
  1. void loop() {
  2. if (Serial.available()) { // проверяем, есть ли данные в буфере
  3. String inputString = Serial.readStringUntil('\n'); // считываем строку до символа \n
  4. Serial.print("Received string: "); // выводим сообщение
  5. Serial.println(inputString); // выводим строку
  6. }
  7. }
  8. Независимо от выбранного способа, важно помнить обработку и очистку буфера после получения строки.
Дмитрий К
Дмитрий К
31 675