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");
}
@user4163554, 👍0
Обсуждение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
- Переменные Arduino, загруженные с SD-карты
- Избегайте математических вычислений с плавающей запятой, чтобы ускорить Arduino
- Как использовать SPI на Arduino?
- Float печатается только 2 десятичных знака после запятой
- Отправка и получение различных типов данных через I2C в Arduino
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
Это значения, которые меняются, если кто-то думает, почему бы мне просто не задать их в жестком коде?, @user4163554
Помещение всех таких переменных в структуру может быть хорошим решением, поскольку затем можно копировать содержимое структуры как необработанные данные на карту или с неё (хотя для доступа к ней из другой системы, например, с ПК, потребуется знание того, как компилятор Arduino упаковывает структуры). Но вы также можете считывать переменные по одной; главная проблема в настоящее время заключается в том, что ваш код *не имеет* никаких переменных, которые он даже *пытается* загрузить с карты., @Chris Stratton