forked from bborncr/datalogger-m0-feather
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDatalogger_STATE.ino
93 lines (83 loc) · 1.8 KB
/
Datalogger_STATE.ino
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "SD.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
#include <RTCZero.h>
#define SD_LED 8 //SD Card LED
#define SET_CLK 11 // Short to ground to set clock
#define CS 4 // Chip Select pin
#define CD 7 // Card Detect pin
enum STAGE {WAIT, NEW, LOG, SET};
STAGE stage = WAIT;
MPU6050 accelgyro;
RTCZero rtc;
File logfile;
int16_t ax, ay, az;
int16_t gx, gy, gz;
bool blinkState = false;
String timestamp;
int count = 0;
void setup() {
Serial.begin(115200);
Wire.begin();
accelgyro.initialize();
rtc.begin();
pinMode(SD_LED, OUTPUT);
digitalWrite(SD_LED, LOW);
pinMode(CD, INPUT_PULLUP);
pinMode(SET_CLK, INPUT_PULLUP);
pinMode(CS, OUTPUT);
//setClock();
}
void loop() {
if (!digitalRead(SET_CLK)) {
stage = SET;
} else
if (!cardInserted()) {
stage = WAIT;
}
switch (stage) {
case WAIT:
Serial.println("WAIT");
if (cardInserted()) {
digitalWrite(SD_LED, LOW);
stage = NEW;
} else {
blinkLED(SD_LED, 500);
}
break;
case NEW:
Serial.println("NEW");
if (initSDCard()) {
stage = LOG;
} else {
stage = WAIT;
}
break;
case LOG:
Serial.println("LOG");
logData();
break;
case SET:
Serial.println("SET");
setClock();
stage = WAIT;
break;
default:
break;
}
}
void blinkLED(int led, int t) { //Blink led every t milliseconds
if (millis() % t > t / 2) { //50% duty cycle
blinkState = true;
} else {
blinkState = false;
}
digitalWrite(SD_LED, blinkState);
}
String getTimestamp() {
String t;
//t = String(rtc.getEpoch());
t = "20" + String(rtc.getYear()) + String(rtc.getMonth()) + String(rtc.getDay()) + String(rtc.getHours()) + String(rtc.getMinutes()) + String(rtc.getSeconds());
return t;
}