Arduino Extended Database Library using an SD Card

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“.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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()
{
 
}