Считывание последовательной строки анализируется и записывается на SD-карту
У меня есть датчик, который выдает мне эту строку, последовательно считываемую @9600:
@T;+019.8;H;043.6;51
Этот всплеск автоматически приходит примерно каждую секунду. Это означает:
"@" начало строки
«T;» означает, что температура приближается, после этого «;».
«+019.8» — значение температуры (фиксированное количество цифр с ведущим знаком +/-).
Разделитель ";".
«H;» означает, что значение влажности теперь следует после «;».
«043.6» Значение влажности (фиксированное количество цифр: от 000,0 до 100,0).
Разделитель ";".
«51» — это контрольная сумма из 2 цифр.
Затем пауза около 1 секунды >> следующая строка с новыми значениями.
Я хочу Serial.print
их по отдельности и поместить в файл журнала на SD-карте Arduino Ethernet Shield.
На следующем этапе я покажу эти значения на локальном дисплее и веб-странице, а также добавлю (сбрасываемые) настройки сигнализации с индивидуальными настройками гистерезиса...
Есть ли какие-нибудь советы по решению проблемы разрыва строки и регистрации на SD-карте?
@Ritchie, 👍0
Обсуждение1 ответ
Есть несколько способов сделать это.
- Если строка всегда имеет фиксированную длину и символы всегда находятся в одном и том же месте (это может потребовать упаковки), то вы можете:
- вытащить необходимые разделы, по одному символу за раз, используя индекс массива символов (т.е. строки). Однако в данном случае это довольно длинное и неуклюжее решение
- Подобно предыдущему, используйте
strncpy()
для копирования смежных символов, см. Как скопировать часть строки в C, имея начальный и конечный индексы? - Более элегантным методом было бы использование
sprintf()
, см. Как скопировать строку в массив символов в C++ без перехода через буфер
- Или вы можете использовать регулярные выражения (regexp) и сопоставление шаблонов. Смотрите Как прочитать ответ сервера с помощью Ethernet shield?
- используйте
sscanf
, см. Извлечение двоичных данных из текстовой строки. Как пакет Perl, а не просто regexp
Привет, спасибо за предложения, но когда я "пересылаю" значения из mySerial.read в Serial.write, я могу видеть (считывать) фактические значения в мониторе... когда я serial.print их, я получаю совершенно другие значения, и я думаю, что именно поэтому я не заставляю это работать должным образом. Я думаю, что мне нужно преобразовать полученные значения перед их "анализом" ???, @Ritchie
Затем вам нужно прояснить свой вопрос, так как он вообще не ясен. Отредактируйте и добавьте примеры в свой вопрос. Также включите свой код. Это облегчит людям помощь вам и даст вам точный ответ., @Greenonline
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- форматирование строк в Arduino для вывода
- Очень простая операция Arduino Uno Serial.readString()
- Arduino Преобразование std:string в String
- Понимание того, почему следует избегать «String» и альтернативных решений
- Arduino: как записать значение переменной в текстовый файл и изменить его на SD-карте?
- Как прочитать входящие ШЕСТНАДЦАТИРИЧНОЕ значение из serial метод read ()?
Какой код вы уже сделали? Пожалуйста, опубликуйте ваш код. Какая часть вашего кода не работает?, @Greenonline