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
|
#include "config.h"
#include <Arduino.h>
#include <EEPROM.h>
#define ROM_INITIALISED 17
#define DEFAULT_SIGNALS_PER_RPM 133
#define DEFAULT_START_DELAY_MILLIS 1000
#define DEFAULT_RPM_COUNT 5000
static Config config;
int writeLong (int address, unsigned long val)
{
const char* p = (char*) &val;
int i = 0;
for (; i < sizeof(val); ++i, ++p)
{
EEPROM.write(address + i, *p);
}
return address + i;
}
int readLong (int address, unsigned long& val)
{
char* p = (char*) &val;
int i = 0;
for (; i < sizeof(val); ++i, ++p)
{
*p = EEPROM.read(address + i);
}
return address + i;
}
const Config& readConfig ()
{
byte initialised = EEPROM.read(0);
if (initialised != ROM_INITIALISED)
{
int addr = 1;
addr = writeLong(addr, DEFAULT_START_DELAY_MILLIS);
addr = writeLong(addr, DEFAULT_RPM_COUNT);
addr = writeLong(addr, DEFAULT_SIGNALS_PER_RPM);
EEPROM.write(0, ROM_INITIALISED);
}
int addr = 1;
addr = readLong(addr, config.startDelay);
addr = readLong(addr, config.rpmCount);
addr = readLong(addr, config.signalsPerRPM);
return config;
}
void writeConfig (const Config& config)
{
int addr = 1;
addr = writeLong(addr, config.startDelay);
addr = writeLong(addr, config.rpmCount);
addr = writeLong(addr, config.signalsPerRPM);
EEPROM.write(0, ROM_INITIALISED);
}
|