Arduino SDFat Libray перезаписывает последнее значение
Я пытаюсь создать файл, разделенный запятыми, используя эту библиотеку SDFat
Вызов этого кода создает мой файл
const char Header[24]="Desired RPM,Output RPM\n";
...
foo()
{
SpeedCache.open("/Speed_Cache.txt",O_CREAT | O_RDWR | O_APPEND);
SpeedCache.write(Header);
SpeedCache.sync();
}
...
После запуска у меня есть файл, содержащий
Желаемая частота вращения,Выходная частота вращения'\n'
Когда я вызываю следующую функцию, я хочу, чтобы она добавила int target
и int reference
в конец файла.
bool SDClass::SetLine(SdFile Cache,int target, int reference)
{
bool good = false;
char NewLine[32];
Cache.seekEnd();
sprintf_P(NewLine,(PGM_P)F("%d,%d\n"),target,reference);
Serial.println(good=Cache.write(NewLine));
Cache.sync();
return good;
}
При первом вызове это работает так, что при вводе SpeedCache,50,100
я получаю
Желаемая частота вращения,Выходная частота вращения'\n'
50 100 футов\n'
Однако, если я затем напишу ввод SpeedCache,5,10
, я получу
Желаемая частота вращения,Выходная частота вращения'\n'
5,10'\n'
Как мне настроить свою функцию, чтобы получить:
Желаемая частота вращения,Выходная частота вращения'\n'
50 100 футов\n'
5,10'\n'
@ATE-ENGE, 👍0
2 ответа
Лучший ответ:
Вам просто нужно открыть файл в режиме APPEND:
SpeedCache.open("/Speed_Cache.txt",O_CREAT | O_RDWR | O_APPEND);
O_APPEND
Файл открывается в режиме добавления. Перед каждой записью смещение файла позиционируется в конце файла, как при использовании lseek.
Вам также следует передавать файл по ссылке, чтобы он не создавал новые копии внутренней структуры:
bool SDClass::SetLine(SdFile &Cache,int target, int reference)
Как передать файл по ссылке?
SdFat sd;
SdFile DataFile;
isSD = DataFile.open(FileName, O_WRITE | O_CREAT | O_AT_END);
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
Добавление
| O_APPEND
не дало эффекта, @ATE-ENGEХорошо, передача файла по ссылке — это последнее, что нужно для его работы., @ATE-ENGE