Библиотека SDFAT - Как получить работу Parseint () ?

STM32_Discoverer
Пт 17 февраля 2017 г., 21:34
Привет, я пытаюсь получить целое число из массива из текстового файла на моей SD -карте? Но в старой библиотеке SD.H это было легко, как myFile = SD.open("test.txt"); if (myFile) { while (myFile.available() && i

victor_pv
Пт 17 февраля 2017 г., 21:49
Я думаю, что эта тема может быть связана:
https: // форум.Ардуино.CC/INDEX.PHP?Тема = 326573.0

Проблема не специфична для ядра STM, а то, как работает библиотека SDFAT.

STM32_Discoverer
Пт 17 февраля 2017 г. 22:10
Да, я уже видел эту ссылку, попробовал, не помог

victor_pv
Пт 17 февраля 2017 г. 11:09
STM32_Discoverer написал:Да, я уже видел эту ссылку, попробовал, не помог

STM32_Discoverer
Сб 18 февраля 2017 г. 7:37 утра
Я использую SDFAT-бета из Greiman

STM32_Discoverer
Сб 18 февраля 2017 г. 7:43 утра
Но я не вижу #define ARDUINO_FILE_USES_STREAM 1

Пито
Сб 18 февраля 2017 г. 9:49
#include #include "SdFat.h" SdFat SD; const uint8_t csPin = SS; File file; .. file = SD.open("stream.txt", O_RDWR|O_CREAT|O_TRUNC); if (!file) { Serial.println(F("open error")); return; } ; .. // Rewind the file and read the number with parseInt(). file.seek(0); int i = file.parseInt(); Serial.println(i); file.close();

STM32_Discoverer
Сб 18 февраля 2017 г. 12:42
Странно, но этот эскиз не читает мою SD -карту

STM32_Discoverer
Сб 18 февраля 2017 г. 12:45
Это мой код #include #include "SdFat.h" SdFat sd1(1); // SdFatEX sd1(1); const uint8_t SD1_CS = PA4; // chip select for sd1 //SdFat sd2(2); //// SdFatEX sd2(2); //const uint8_t SD2_CS = PB12; // chip select for sd2 #define errorExit(msg) errorHalt(F(msg)) #define initError(msg) initErrorHalt(F(msg)) unsigned long duration; int my_array[1000]; int num; int c; void setup() { Serial.begin(115200); delay(10000); // initialize the first card if (!sd1.begin(SD1_CS, SD_SCK_MHZ(18))) { sd1.initError("sd1:"); } // initialize the second card // if (!sd2.begin(SD2_CS, SD_SCK_MHZ(18))) { // sd2.initError("sd2:"); // } Serial.println(F("------sd1 root-------")); sd1.ls(); // set the current working directory for open() to sd2 //sd1.chvol(); File file1; if (!file1.open("data.txt", O_RDWR | O_CREAT | O_TRUNC)) { sd1.errorExit("file1"); } for (int x=0;x<1000;x++){ parseUInt(); Serial.println(num); } file1.close(); Serial.println(F("Done")); } void loop(){} int parseUInt () { int num=-1; while (true) { int c = file1.read(); if (c>47 && c<58) { if (num<0) num=0; num=num*10+c-48; } else if (num>-1 || c==-1) return num; } }

STM32_Discoverer
Сб 18 февраля 2017 г. 12:50
Даже если я заменяю функцию - parseuint () на int c = file1.parseint (); - Код не работает

Пито
Сб 18 февраля 2017 г. 13:01
Что это значит, «код не работает» ??
Не пытайтесь возиться со сложными набросками, вместо этого старайтесь пошатнуться.
Попробуйте оригинальный пример (мой фрагмент кода, от SDFAT, пока он не сработает. А после этого вы можете играть с кодом.

https: // github.com/greiman/sdfat/blob/m ... rseint.Ино

Также не обращайте внимания на язык C требует некоторых правил, соблюдается. Файл1 должен быть объявлен глобальным, в противном случае он не будет виден внутри функции.
Смотрите мой фрагмент выше.

victor_pv
Сб 18 февраля 2017 г. 13:48
STM32_Discoverer написал:Но я не вижу #define ARDUINO_FILE_USES_STREAM 1