ログを保存
MicroSDにログを保存する。保存したログを後でPCで加工していきたいのである程度形になってるといいなーと思ったが、あまり欲張らずできることをやろう。SDカードは
こちらを購入した。ドンキで。これを
拡張ボードには裏にスロットがあるのでぶっ刺す。
コード
ArduinoにはSDカード用のライブラリがもとからある。
https://www.arduino.cc/reference/en/libraries/sd/
これを使ってまず動作確認。
#include <SPI.h>
#include <SD.h>
const int chipSelect = 2;
File myFile;
void setup() {
if (!SD.begin(chipSelect)) {
while (1)
;
}
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
myFile.println("testing 1, 2, 3.");
myFile.close();
}
}
void loop() {
}
サンプルを簡略化して流用。
できておりますね。そしたら全部合体させてしまおう。紆余曲折あったが最終的に動いたのが
#include <SoftwareSerial.h>
#include "TinyGPS++.h"
#include <Dps310.h>
#include <SPI.h>
#include <SD.h>
TinyGPSPlus gps;
SoftwareSerial mySerial(7, 6);
Dps310 Dps310PressureSensor = Dps310();
const int chipSelect = 2;
String fileName;
File root;
String dataString;
void setup() {
Serial.begin(57600);
while (!Serial) {
;
}
mySerial.begin(9600);
Dps310PressureSensor.begin(Wire);
if (!SD.begin(chipSelect)) {
while (1)
;
}
root = SD.open("/");
checkDupFile(root, 0);
Serial.println("init finish");
}
void loop() {
float temperature;
float pressure;
uint8_t oversampling = 7;
int16_t ret;
while (mySerial.available() > 0) {
char c = mySerial.read();
gps.encode(c);
if (gps.time.isUpdated() || gps.date.isUpdated() || gps.location.isUpdated()) { //if (gps.location.isUpdated() && gps.time.isValid()) {//
dataString += gps.date.year();
dataString += "/";
dataString += gps.date.month();
dataString += "/";
dataString += gps.date.day();
dataString += ",";
if (gps.time.hour() < 10) dataString += "0";
dataString += gps.time.hour();
dataString += ":";
if (gps.time.minute() < 10) dataString += "0";
dataString += gps.time.minute();
dataString += ":";
if (gps.time.second() < 10) dataString += "0";
dataString += gps.time.second();
dataString += ",";
dataString += String(gps.location.lat(), 7);
dataString += ",";
dataString += String(gps.location.lng(), 7);
dataString += ",";
dataString += String(gps.altitude.meters());
dataString += ",";
ret = Dps310PressureSensor.measureTempOnce(temperature, oversampling);
if (ret != 0) {
Serial.print("FAIL! ret = ");
Serial.println(ret);
} else {
dataString += String(temperature);
}
dataString += ",";
ret = Dps310PressureSensor.measurePressureOnce(pressure, oversampling);
if (ret != 0) {
Serial.print("FAIL! ret = ");
Serial.println(ret);
} else {
dataString += String(pressure);
}
File dataFile = SD.open(fileName, FILE_WRITE);
if (dataFile) {
dataFile.println(dataString.c_str());
dataFile.close();
}
dataString = "";
}
}
}
void checkDupFile(File dir, int num) {
bool existFile = false;
while (true) {
File entry = dir.openNextFile();
if (!entry) {
if (num == 0) {
fileName = "LOG0.CSV";
}
break;
}
num++;
fileName = "LOG" + String(num) + ".CSV";
}
}
こう。何故か日付が取れたり取れなかったりする。ということで基本はできた。これを山に持っていって動作確認してみよう!
このコードはPC接続だとログが保存されるが、バッテリー接続だとログが保存されない
なんでか考えてみてくれ。自分のアホさ加減よ。やっぱコピペに頼るとだめだな。
コメント