Переменные Arduino, загруженные с SD-карты

Я пытаюсь загрузить некоторые переменные с SD-карты при запуске моего arduino Uno. Мне дали несколько советов, но я не могу общаться в то же время. Используя этот совет, я отредактировал следующий код, но он не работает, и я считаю, что проблема в моей реализации. Любая помощь будет высоко оценена.

myFile = SD.open("test.txt", FILE_READ);
    if (myFile) {
        while (myFile.available()) {
            myFile.read();

            km = myFile.parseInt();
            kmTemp = myFile.parseFloat();
            kmrevs = myFile.parseInt();
            miles = myFile.parseInt();
            milesTemp = myFile.parseFloat();
            milesrevs = myFile.parseInt();

            }
        myFile.close();
        }
    else {
        Serial.println("Read Error");
    }

, 👍0

Обсуждение

Почему не работает? Опишите подробнее. И что на самом деле написано в файле, который вы хотите прочитать?, @chrisl

Программа собирает/вычисляет 6 фрагментов данных, которые затем сохраняются в текстовый файл на SD-карте. Текстовый файл отображает 6 фрагментов данных в виде вертикального списка. При включении Arduino я пытаюсь заставить программу считывать эти 6 бит данных, присваивая значения 6 различным переменным, прежде чем программа перейдет в цикл (этот скрипт находится в setup(), если это снимает вопросы)., @user4163554

При запуске и перезапуске выходные данные соответствуют значениям программы по умолчанию: «0» и «0,000000», где применяются числа с плавающей точкой, а не данные, которые сохраняются на диске., @user4163554

Вы всё ещё не указали файл на SD-карте. Убедитесь, что вы используете для этого простой текстовый редактор. Например, Microsoft Word или Adobe Framemaker добавят невероятное количество ресурсов, что запутает библиотеку анализа., @st2000

что на самом деле написано в файле, который вы хотите прочитать? пожалуйста, ответьте на этот вопрос., @Gerben

После parseInt следующим символом будет разделитель. Например, запятая (,). При следующем вызове parseInt функция обнаружит запятую и вернёт 0. Попробуйте добавить myFile.read(); между каждым parseInt/parseFloat., @Gerben

myFile = SD.open("test.txt", FILE_WRITE); если (мойФайл) { myFile.println(км); myFile.println(kmTemp, 6); myFile.println(kmrevs); myFile.println(мили); myFile.println(milesTemp, 6); myFile.println(milesrevs); мойФайл.закрыть(); } еще { // ОШИБКА СОХРАНЕНИЯ SD Serial.println("Ошибка сохранения"); }, @user4163554

Вот как я его сохраняю. Файл test.txt содержит следующие примеры чисел: 1, 0,001600, 12, 0, 0,072000, 0. Они перечислены вертикально в текстовом файле с помощью println() в только что опубликованном методе сохранения., @user4163554

Gerben - Я попробовал myFile.read(), но это не дало никаких результатов., @user4163554


1 ответ


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

1

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

удалите запятые или прочитайте их или проигнорируйте с помощью параметра parseInt SKIP_ALL

km = myFile.parseInt(SKIP_ALL);
,

Привет, там нет запятых, это просто в разделе комментариев, всякий раз, когда я нажимаю Enter, сообщение публикуется вместо того, чтобы начинать новую строку... поэтому я использовал запятые для разделения различных данных., @user4163554

Привет, Юрай. Признаюсь, я никогда ничего не анализировал так глубоко, как ваши два ответа. Чувствую, что мои выходные не прошли даром, ведь я наконец-то понял, что вы имели в виду. Теперь всё идёт как по маслу, и это именно то, чего я хотел. Спасибо., @user4163554