Arduino чтение SD файла строка за строкой C++
Я пытаюсь прочитать текстовый файл " Print1.txt", строка за строкой, с SD-карты, подключенной к моему Arduino MEGA. Пока у меня есть следующий код:
#include <SD.h>
#include <SPI.h>
int linenumber = 0;
const int buffer_size = 54;
int bufferposition;
File printFile;
char character;
char Buffer[buffer_size];
boolean SDfound;
void setup()
{
Serial.begin(9600);
bufferposition = 0;
}
void loop()
{
if (SDfound == 0)
{
if (!SD.begin(53))
{
Serial.print("The SD card cannot be found");
while(1);
}
}
SDfound = 1;
printFile = SD.open("Part1.txt");
if (!printFile)
{
Serial.print("The text file cannot be opened");
while(1);
}
while (printFile.available() > 0)
{
character = printFile.read();
if (bufferposition < buffer_size - 1)
{
Buffer[bufferposition++] = character;
if ((character == 'n'))
{
//new line function recognises a new line and moves on
Buffer[bufferposition] = 0;
//do some action here
bufferposition = 0;
}
}
}
Serial.println(Buffer);
delay(1000);
}
Функция повторно возвращает только первую строку текстового файла.
Мой Вопрос
Как изменить функцию, чтобы прочитать строку текста, (с надеждой выполнить действие на такой строке, показанной "/ / do some action"), а затем перейти на следующую строку в следующем цикле, повторяя это до конца файл был достигнут?
Надеюсь, это имеет смысл.
1 ответ:
На самом деле, ваш код возвращает только последнюю строку текстового файла, потому что он печатает буфер только после чтения всех данных. Код печатается повторно, потому что файл открывается внутри функции цикла. Обычно чтение файла должно выполняться в функции
setup, которая выполняется только один раз.Вместо того, чтобы читать данные char за char в буфер, вы можете читать до тех пор, пока не найдете разделитель и не назначите его буферу
String. Этот подход держать ваш код прост. Мое предложение исправить ваш код прямо ниже:#include <SD.h> #include <SPI.h> File printFile; String buffer; boolean SDfound; void setup() { Serial.begin(9600); if (SDfound == 0) { if (!SD.begin(53)) { Serial.print("The SD card cannot be found"); while(1); } } SDfound = 1; printFile = SD.open("Part1.txt"); if (!printFile) { Serial.print("The text file cannot be opened"); while(1); } while (printFile.available()) { buffer = printFile.readStringUntil('\n'); Serial.println(buffer); //Printing for debugging purpose //do some action here } printFile.close(); } void loop() { //empty }
Comments