Запись данных на SD-карту из SoftwareSerial

У меня есть Arduino Uno и экран регистрации данных Adafruit, и я подключил цифровой датчик давления, использующий последовательную связь. Датчику требуется символ, чтобы начать передачу данных. Мне удалось прочитать данные, используя этот код:

#include <SoftwareSerial.h> 
SoftwareSerial mySerial(8,9); 

int depth;

void setup() {

    Serial.begin(9600);
    mySerial.begin(9600);
    mySerial.print("C");

}

void loop() 
{

 if (mySerial.available()) {

   depth = mySerial.read();

 }

}

Это возвращает следующее:

C1000
C1000
C1000

где 1000 — это значение.

Я написал еще один код, который записывает данные в экран и тестировал его с другими датчиками, но я не могу регистрировать данные с этого датчика, изменив приведенный выше код, и не могу найти соответствующих примеров. Если я добавлю что-то подобное, оно не вернет то же значение.

logfile.println(depth);

Полный новичок, любые предложения приветствуются.

ОБНОВЛЕНИЕ

, 👍0

Обсуждение

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/95775/discussion-on-question-by-nik-ol-logging-data-to-sd-card-from-software- сериал)., @VE7JRO


1 ответ


1

используйте букву C в качестве индикатора начала строки. если полученный char равен 'C', выполните пример file.println(); с выводом в Serial

#include <SoftwareSerial.h> 
SoftwareSerial mySerial(8,9); 

void setup() {
    Serial.begin(9600);
    mySerial.begin(9600);
    mySerial.print("C");
}

void loop() {
 if (mySerial.available()) {
   char c = mySerial.read();
   if (c == 'C') {
     Serial.println();
   }
   Serial.write(c);
 }
}
,

Но этот код ничем не отличается от простого кода. Моя проблема не в том, что я не читаю данные или не вижу данные, напечатанные в последовательном мониторе. Я получаю все данные. Проблема возникает, когда я пытаюсь зарегистрировать данные. Я думаю, что данные поступают очень быстро из серийного номера, но когда я добавляю задержки, все портится., @Nik_ol

он печатает совершенно иначе, чем рассматриваемый код. ты пробовал?, @Juraj

Да, я пробовал. Он печатает то же самое с промежутком между его измерениями. Также он использует гораздо больше динамических переменных. Но печатает одинаково с промежутком между каждым С1000, @Nik_ol

это не то, что вы хотите? каждый набор с новой строки?, @Juraj

Нет. Я хочу записать данные на SD-карту. Когда я использую этот код для регистрации, я получаю одно число каждую секунду. Добавил скриншот в исходный пост. Я хочу получить все 4 числа за одну секунду, а затем новые 4 числа в следующую секунду., @Nik_ol

у вас все еще есть println вместо этого или пишете, или вы смотрите строки, записанные до изменения, @Juraj

Я полностью удалил serial.println() после if, но это ничего не меняет, @Nik_ol

в моем ответе у вас есть полный эскиз. запускай как есть. ничего не меняй, @Juraj

Я запускал как есть. Обновление, которое я добавил в исходный пост, — это когда я запускаю этот скетч. Он по-прежнему печатает свой байт в другой строке. 6171 - это одно чтение, и код возвращает его через 4 секунды, а его номер - в другой строке., @Nik_ol

у вас в Serial Monitor установлено значение 9600 бод?, @Juraj

устройство отправляет данные на скорости 9600 бод?, @Juraj

да на оба вопроса. Когда я использую эскиз, который я опубликовал изначально (на 9600), он возвращает данные в одну строку, как и ожидалось, непрерывно. У меня возникает эта проблема, когда я добавляю любую задержку. Например, когда я регистрируюсь каждые 1 с, я получаю проблему, о которой я упоминал., @Nik_ol

Вы не можете добавить задержку. устройство не перестает отправлять данные, последовательный буфер переполняется и часть данных будет потеряна, @Juraj

Итак, как я могу регистрировать эти данные? Выхода нет?, @Nik_ol

вы могли бы после задержки сначала прочитать чистый буфер (прочитать количество байтов SERIAL_RX_BUFFER_SIZE), дождаться C и прочитать до следующего C, @Juraj