Arduino записывает файл на SD, но не содержимое файла
Я использую Arduino UNO, Extended Database Library (EDB) и карту microSD для чтения/записи 2 таблиц базы данных. Мне удалось создать оба файла ".db" на SD (они отображаются в Finder, когда я загружаю microSD непосредственно на свой Mac).
Я также могу заполнить их данными-заполнителями, но эти данные, похоже, на самом деле не записываются в файл (и, следовательно, не сохраняются после перезагрузки).
Кроме того, попытка dbFile = SD.open(db_name1, FILE_WRITE);
возвращает false, даже если файлы существуют на диске?
Вот мой код создания:
#include <SPI.h>
#include <SD.h>
#define SD_PIN 10 //SD-контакт для чтения/записи
#define TABLE_SIZE 8192 //256*32
#include "Arduino.h"
#include <EDB.h>
char* db_name1 = "/DB/SENSOR1.db";
char* db_name2 = "/DB/SENSOR2.db";
File dbFile;
struct sensorLog1 {
unsigned int id;
float input;
unsigned int timestamp;
}
sensorLog1;
struct sensorLog2 {
unsigned int id;
float input;
unsigned int timestamp;
}
sensorLog2;
// Настройка объекта EDB
inline void writer (unsigned long address, const byte* data, unsigned int recsize) {
dbFile.seek(address);
dbFile.write(data,recsize);
dbFile.flush();
}
inline void reader (unsigned long address, byte* data, unsigned int recsize) {
dbFile.seek(address);
dbFile.read(data,recsize);
}
// Создать объект EDB с соответствующими обработчиками записи и чтения
EDB db(&writer, &reader);
void setup() {
Serial.begin(9600);
createDB(db_name1, "sensorLog1");
createDB(db_name2, "sensorLog2");
dbFile = SD.open(db_name1, FILE_WRITE); // Не работает!
if (!dbFile) { Serial.println("File does not exist"); }
}
void loop() {}
void createDB(char* db_name, char* table_name) {
// создать файл
dbFile = SD.open(db_name, FILE_WRITE);
db.create(0, TABLE_SIZE, (unsigned int)sizeof(table_name));
// заполнить данными-заполнителями
for (unsigned int i = 1; i <= 20; i++) {
table_name.id = i;
table_name.input = 0;
table_name.timestamp = 0;
EDB_Status result = db.appendRec(EDB_REC table_name);
}
// проверка данных
Serial.println(db.count()); // возвращает '20'
// закрыть файл для записи
dbFile.close();
}
@user1092247, 👍0
1 ответ
db.create(0, TABLE_SIZE, (беззнаковое целое)sizeof(имя_таблицы));
Третий параметр — размер записи! sizeof работает не с данными, а с типами, поэтому вы получаете размер char* вместо размера вашей структуры sensorlogN.
Ваш код в том виде, в котором он написан, не должен компилироваться! У char* нет члена .id.
table_name.id = i;
table_name.input = 0;
table_name.timestamp = 0;
- SD-карта не инициализируется
- Что означают эти контакты? Куда мне их подключить?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Arduino: как записать значение переменной в текстовый файл и изменить его на SD-карте?
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Простая веб-страница с Ethernet-шилдом Arduino на SD-карте
- чтение карты micro SD напрямую с ПК
- Проблема с открытием нескольких текстовых файлов одновременно/по порядку с использованием <SD.h>