Arduino: загрузка переменных со значениями, считанными с SD-карты

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

Мой текстовый файл содержит следующие 6 значений int и float, которые отображаются в файле вертикально:

2 0,003200 312 1 0.720000 8

Каждое из этих значений я хочу присвоить переменным data1,....2,3,4,5,6. К сожалению, код, который я использую ниже, никогда этого не достигнет, но я понятия не имею, как решить эту проблему. Заранее спасибо.

myFile = SD.open("test.txt", FILE_READ);
    if (myFile) {
    while (myFile.available()) {
        data = myFile.read();
    }
myFile.close();
}
else {
    Serial.println("Read Error");
}

, 👍0

Обсуждение

Это значения, которые меняются, если кто-то думает, почему бы мне просто не задать их в жестком коде?, @user4163554

Помещение всех таких переменных в структуру может быть хорошим решением, поскольку затем можно копировать содержимое структуры как необработанные данные на карту или с неё (хотя для доступа к ней из другой системы, например, с ПК, потребуется знание того, как компилятор Arduino упаковывает структуры). Но вы также можете считывать переменные по одной; главная проблема в настоящее время заключается в том, что ваш код *не имеет* никаких переменных, которые он даже *пытается* загрузить с карты., @Chris Stratton


1 ответ


Лучший ответ:

1

Файл реализует Stream так же, как Serial. поэтому вы можете использовать parseInt и parseFloat

int n = File.parseInt();
float x = File.parseFloat();
Serial.println(n);
Serial.println(x, 6);
,

Спасибо за ответ. Я только что искал readByteUntil, похоже, это то, что я ищу, но как это реализовать в моём коде? Как мне определить, что к чему относится?, @user4163554

Нужно ли мне перечислять parseInts и float в порядке, указанном в моём списке? И нужно ли это поместить в метод available()? Спасибо., @user4163554

в вашем случае вам не нужен readBytesUntil. только анализируйте числа, как во фрагменте кода в моем ответе. parseInt и parseFloat пропускают пробелы., @Juraj

myFile = SD.open("test.txt", FILE_READ); если (мойФайл) { в то время как (myFile.available()) { км = мойФайл.parseInt(); kmTemp = myFile.parseFloat(); kmrevs = myFile.parseInt(); миль = myFile.parseInt(); milesTemp = myFile.parseFloat(); мильревс = myFile.parseInt(); Serial.println(км); ........другие printlns() } мойФайл.закрыть(); } еще { Serial.println("Ошибка чтения"); }, @user4163554

Ты это имеешь в виду? Я смог втиснуть в этот комментарий лишь ограниченное количество символов., @user4163554

да. есть ли ещё строки? тогда while (available()) нормально, @Juraj

Функции анализа уместны только при сохранении значений в текстовом виде. Если это файлы, созданные в текстовом редакторе на ПК, это действительно может быть уместно. С другой стороны, если они сохраняются из одного сеанса Arduino в другой, прямая двоичная копия того, как значения будут храниться в оперативной памяти Arduino, может быть более подходящей., @Chris Stratton

Нет, строк больше нет, одни и те же данные заменяются по мере необходимости., @user4163554