Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 06ee0b7

Browse files
committedSep 23, 2017
Adding persistent data and vector example sketches
1 parent bb6b368 commit 06ee0b7

File tree

2 files changed

+170
-0
lines changed

2 files changed

+170
-0
lines changed
 

‎examples/Persistent/Persistent.ino

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#include "Storage.h"
2+
#include "Driver/EEPROM.h"
3+
4+
// Use internal eeprom for configuration storage
5+
EEPROM eeprom;
6+
7+
// Configuration values
8+
struct config_t {
9+
uint32_t timestamp;
10+
char ssid[32];
11+
uint8_t mac[6];
12+
};
13+
14+
// Reset to default configuration flag
15+
bool reset;
16+
Storage::Block persistent_reset(eeprom, &reset, sizeof(reset));
17+
18+
// Persistent configuration
19+
config_t config;
20+
Storage::Block persistent_config(eeprom, &config, sizeof(config));
21+
22+
// Default configuration
23+
static const char ssid[] PROGMEM = "Wi-Fi SSID";
24+
static const uint8_t mac[6] PROGMEM = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed };
25+
26+
void setup()
27+
{
28+
Serial.begin(57600);
29+
while (!Serial);
30+
31+
// Check the reset flag; write default configuration or read persistent
32+
persistent_reset.read();
33+
if (reset) {
34+
Serial.println(F("Write default configuration"));
35+
config.timestamp = 0;
36+
strcat_P(config.ssid, ssid);
37+
memcpy_P(config.mac, mac, sizeof(mac));
38+
persistent_config.write();
39+
reset = false;
40+
persistent_reset.write();
41+
}
42+
else {
43+
Serial.println(F("Read configuration"));
44+
persistent_config.read();
45+
}
46+
47+
Serial.print(F("reset@"));
48+
Serial.print(persistent_reset.addr());
49+
Serial.print(F(" = "));
50+
Serial.println(reset);
51+
}
52+
53+
void loop()
54+
{
55+
static uint8_t n = 0;
56+
57+
// Print configuration
58+
Serial.print(F("config@"));
59+
Serial.print(persistent_config.addr());
60+
Serial.print(F(": timestamp = "));
61+
Serial.print(config.timestamp);
62+
Serial.print(F(", ssid = \""));
63+
Serial.print(config.ssid);
64+
Serial.print(F("\", mac = "));
65+
for (size_t i = 0; i < sizeof(config.mac); i++) {
66+
Serial.print(config.mac[i], HEX);
67+
if (i + 1 < sizeof(config.mac)) Serial.print(':');
68+
}
69+
Serial.println();
70+
delay(1000);
71+
if (++n < 60) return;
72+
73+
// Update timestamp every minute
74+
Serial.println(F("Update timestamp"));
75+
config.timestamp++;
76+
persistent_config.write();
77+
n = 0;
78+
}

‎examples/Vector/Vector.ino

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#include "Storage.h"
2+
#include "GPIO.h"
3+
#include "SPI.h"
4+
#include "Driver/MC23LC1024.h"
5+
6+
// Configure usage of software or hardware spi bus manager
7+
// #define USE_SOFTWARE_SPI
8+
#define USE_HARDWARE_SPI
9+
10+
#if defined(USE_SOFTWARE_SPI)
11+
#include "Software/SPI.h"
12+
Software::SPI<BOARD::D11, BOARD::D12, BOARD::D13> spi;
13+
#elif defined(USE_HARDWARE_SPI)
14+
#include "Hardware/SPI.h"
15+
Hardware::SPI spi;
16+
#endif
17+
18+
// External memory storage (128 Kbyte)
19+
MC23LC1024<BOARD::D10> sram(spi);
20+
21+
// Sample with timestamp and value (analog)
22+
struct sample_t {
23+
uint32_t timestamp;
24+
uint16_t value;
25+
};
26+
27+
// Sample element, number of elements and external storage (60 Kbyte)
28+
// Single sample in memory and 10000 vector members on storage
29+
sample_t sample;
30+
const size_t NMEMB = 10000;
31+
Storage::Block vector(sram, &sample, sizeof(sample), NMEMB);
32+
33+
void setup()
34+
{
35+
Serial.begin(57600);
36+
while (!Serial);
37+
38+
// Print size of storage, vector, sample and number of members
39+
Serial.print(F("sram.SIZE = "));
40+
Serial.println(sram.SIZE);
41+
Serial.print(F("vector.size = "));
42+
Serial.println(vector.size());
43+
Serial.print(F("vector.SIZE = "));
44+
Serial.println(vector.SIZE);
45+
Serial.print(F("vector.NMEMB = "));
46+
Serial.println(vector.NMEMB);
47+
}
48+
49+
void loop()
50+
{
51+
// Sample analog values, timestamp and write to storage
52+
for (size_t i = 0; i < vector.NMEMB; i++) {
53+
sample.timestamp = micros();
54+
sample.value = analogRead(A0);
55+
vector.write(i);
56+
}
57+
58+
// Read back samples and calculate min, max and sum
59+
uint16_t min = UINT16_MAX;
60+
uint16_t max = 0;
61+
uint64_t sum = 0;
62+
for (size_t i = 0; i < vector.NMEMB; i++) {
63+
vector.read(i);
64+
if (sample.value < min) min = sample.value;
65+
if (sample.value > max) max = sample.value;
66+
sum += sample.value;
67+
}
68+
69+
// Read back first and last sample timestamp to calculate
70+
// average microseconds per sample and write to storage
71+
uint32_t us = 0;
72+
vector.read(vector.NMEMB - 1);
73+
us = sample.timestamp;
74+
vector.read(0);
75+
us -= sample.timestamp;
76+
us /= vector.NMEMB;
77+
78+
// Print the results; samples per second, min, max and average values
79+
Serial.println();
80+
Serial.print(F("sps = "));
81+
Serial.println(1000000.0 / us);
82+
Serial.print(F("min = "));
83+
Serial.println(min);
84+
Serial.print(F("max = "));
85+
Serial.println(max);
86+
Serial.print(F("sum = "));
87+
Serial.println((float) sum);
88+
Serial.print(F("avg = "));
89+
Serial.println((float) sum / vector.NMEMB);
90+
91+
delay(5000);
92+
}

0 commit comments

Comments
 (0)
Please sign in to comment.