Я пытаюсь прочитать текстовый файл «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);
}
Функция возвращает только первую строку текстового файла несколько раз.
Мой вопрос
Как изменить функцию на чтение строки текста (с надеждой выполнить действие над такой строкой, показанной как «// выполнить действие»), а затем перейти к следующей строке в следующем цикле, повторяя это до конец файла был достигнут?
Надеюсь, это имеет смысл.
На самом деле, ваш код возвращает только прошлой строка текстового файла, потому что он печатает буфер только после чтения всех данных. Код печатается несколько раз, потому что файл открывается внутри функции цикла. Как правило, чтение файла должно быть сделано в setup
функция, которая выполняется только один раз.
Вместо того, чтобы считывать данные в 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
}
Других решений пока нет …