Arduino прочитал последнюю строчку с SD-карты

Я довольно новичок в бизнесе Arduino. Как мне прочитать последнюю строку с SD-карты? С помощью следующего фрагмента кода я могу прочитать первую строку (все символы перед «\ n»). Теперь я хотел бы включить «обратное» утверждение (или что-то).

Мой код до сих пор:

#include <SD.h>
#include <SPI.h>

File SD_File;

int pinCS = 10;

char cr;void setup() {
Serial.begin(9600);
SD.begin();

SD_File = SD.open("test.txt", FILE_WRITE);
SD_File.println("hello");
SD_File.close();

SD_File = SD.open("test.txt");
while(true){
cr = SD_File.read();
if((cr == '\n') && ("LAST LINE?"))
break;
Serial.print(cr);
}
SD_File.close();

}

void loop() {

}

Ваша помощь очень ценится.

1

Решение

Поскольку вы технически открываете текстовые файлы, вы можете использовать seekg, чтобы перейти к концу файла и прочитать последнюю строку, как описано в этом разделе. ответ.

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

0

Другие решения

Я не уверен, что понял ваш вопрос.

  • «Как мне реализовать seekg Нет seekg. Однако есть seek.
  • это страница документации для библиотеки SD. В правой части страницы есть список всех File методы класса (seek среди прочих).
  • «Как мне прочитать последнюю строчку …» В вашем коде нет чтения строк. Если вы просто хотите перейти к концу использования файла: SD_File.seek( SD_File.size() ); Если вы хотите прочитать последнюю строку, самый простой способ — написать getline функции и читать весь файл построчно до конца. Если предположить, MAX_LINE является достаточно большой а также getline возвращает ноль в случае успеха:
//...
char s[ MAX_LINE ];
while ( getline( f, s, MAX_LINE , '\n' ) == 0 )
;

// when reaching this point, s contains the last line
Serial.print( "This is the last line: " );
Serial.print( s );

Вот getline идея (без гарантии — не проверено):

/*
s     - destination
count - maximum number of characters to write to s, including the null terminator. If
the limit is reached, it returns -2.
delim - delimiting character ('\n' in your case)

returns:
0 - no error
-1 - eof reached
-2 - full buffer
*/
int getline( File& f, char* s, int count, char delim )
{
int ccount = 0;
int result = 0;
if ( 0 < count )
while ( 1 )
{
char c = f.peek();
if ( c == -1 )
{
f.read(); // extract
result = -1;
break;  // eof reached
}
else if ( c == delim )
{
f.read(); // extract
++ccount;
break; // eol reached
}
else if ( --count <= 0 )
{
result = -2;
break; // end of buffer reached
}
else
{
f.read(); // extract
*s++ = c;
++ccount;
}
}

*s = '\0'; // end of string
return ccount == 0 ? -1 : result;
}
0

По вопросам рекламы [email protected]