The Arduino Playground Site of the Extended Database Library states that : „With these changes, it is now possible to use this library in conjunction with the standard Arduino EEPROM library, an external EEPROM such as the AT24C1024, providing 128 – 512 kilobytes of non-volatile storage, or any other platform that supports byte level reading and writing such as an SD card.“
But unfortunately I didn’t find any example in the internet that shows how to use the library with an SD Card. In the following is my version of the supplied EDB_Simple using an SD Card instead of the build-in EEPROM. For learning how to connect an SD Card Writer/Reader to an Arduino there are a lot of examples around. My Example is for an Arduino UNO with a cheap SD module hardwired to PIN 10 (Those modules do not work on the newer Arduinos). Important are the reader and writer functions and that you have to create a file and use the seek() method.
PLEASE NOTE! BEGINNING WITH ARDUINO 1.0 YOU HAVE TO CHANGE CODE IN EDB.CPP (THE LIBRARY): #include „WProgram.h“ has to be changed to #include „Arduino.h“.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include "Arduino.h"
#include <EDB.h>
#include <SD.h>
File dbFile;
#define TABLE_SIZE 512
#define RECORDS_TO_CREATE 10
struct
LogEvent {
int
id;
int
temperature;
}
logEvent;
void
writer(unsigned
long
address, byte data)
{
dbFile.seek(address);
dbFile.write(data);
dbFile.flush();
}
byte reader(unsigned
long
address)
{
dbFile.seek(address);
return
dbFile.read();
}
EDB db(&writer, &reader);
void
setup()
{
Serial.begin(9600);
Serial.print(
"Initializing SD card..."
);
pinMode(10, OUTPUT);
if
(!SD.begin()) {
Serial.println(
"initialization failed!"
);
return
;
}
Serial.println(
"initialization done."
);
Serial.println(
"Opening example.db ..."
);
dbFile = SD.open(
"example.db"
, FILE_WRITE);
db.create(0, TABLE_SIZE,
sizeof
(logEvent));
Serial.print(
"Record Count: "
); Serial.println(db.count());
Serial.println(
"Creating Records..."
);
int
recno;
for
(recno = 1; recno <= RECORDS_TO_CREATE; recno++)
{
logEvent.id = recno;
logEvent.temperature = recno * 2;
db.appendRec(EDB_REC logEvent);
}
Serial.print(
"Record Count: "
); Serial.println(db.count());
for
(recno = 1; recno < RECORDS_TO_CREATE; recno++)
{
db.readRec(recno, EDB_REC logEvent);
Serial.print(
"ID: "
); Serial.println(logEvent.id);
Serial.print(
"Temp: "
); Serial.println(logEvent.temperature);
}
}
void
loop()
{
}