Считывание последовательной строки анализируется и записывается на 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-карте?

, 👍0

Обсуждение

Какой код вы уже сделали? Пожалуйста, опубликуйте ваш код. Какая часть вашего кода не работает?, @Greenonline


1 ответ


1

Есть несколько способов сделать это.

  • Если строка всегда имеет фиксированную длину и символы всегда находятся в одном и том же месте (это может потребовать упаковки), то вы можете:
    • вытащить необходимые разделы, по одному символу за раз, используя индекс массива символов (т.е. строки). Однако в данном случае это довольно длинное и неуклюжее решение
    • Подобно предыдущему, используйте strncpy() для копирования смежных символов, см. Как скопировать часть строки в C, имея начальный и конечный индексы?
    • Более элегантным методом было бы использование sprintf(), см. Как скопировать строку в массив символов в C++ без перехода через буфер
  • Или вы можете использовать регулярные выражения (regexp) и сопоставление шаблонов. Смотрите Как прочитать ответ сервера с помощью Ethernet shield?
  • используйте sscanf, см. Извлечение двоичных данных из текстовой строки. Как пакет Perl, а не просто regexp
,

Привет, спасибо за предложения, но когда я "пересылаю" значения из mySerial.read в Serial.write, я могу видеть (считывать) фактические значения в мониторе... когда я serial.print их, я получаю совершенно другие значения, и я думаю, что именно поэтому я не заставляю это работать должным образом. Я думаю, что мне нужно преобразовать полученные значения перед их "анализом" ???, @Ritchie

Затем вам нужно прояснить свой вопрос, так как он вообще не ясен. Отредактируйте и добавьте примеры в свой вопрос. Также включите свой код. Это облегчит людям помощь вам и даст вам точный ответ., @Greenonline