[!C] New Class for sd writer
This commit is contained in:
+11
-10
@@ -5,6 +5,7 @@
|
||||
#include <Adafruit_SSD1306.h>
|
||||
#include <TinyGPS++.h>
|
||||
|
||||
#include "SDCardHelper.ino"
|
||||
|
||||
// LORA Settings
|
||||
#define SYNC_WORD 0xCE
|
||||
@@ -29,9 +30,13 @@
|
||||
#define SCREEN_HEIGHT 64
|
||||
#define OLED_RESET -1
|
||||
|
||||
#define SD_CS 13
|
||||
|
||||
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||
TinyGPSPlus gps;
|
||||
|
||||
SDHelper logger(SD_CS, FAM_W);
|
||||
|
||||
void sendMessage(const String& msg) {
|
||||
LoRa.beginPacket();
|
||||
LoRa.write(SYNC_WORD);
|
||||
@@ -68,16 +73,6 @@ bool getPacket(String& payload, byte& id) {
|
||||
return (payload.length() == len);
|
||||
}
|
||||
|
||||
/*
|
||||
bool waitForAck(unsigned long timeout_ms = 1000) {
|
||||
if (!waitForPacket(timeout_ms)) return false;
|
||||
String payload;
|
||||
byte snd;
|
||||
if (!getPacket(payload, snd)) return false;
|
||||
return (snd == RECEIVER_ID && payload == "ACK");
|
||||
}
|
||||
*/
|
||||
|
||||
void showOnOLED(const String& line1, const String& line2 = "", const String& line3 = "", const String& line4 = "") {
|
||||
display.clearDisplay();
|
||||
display.setTextSize(1);
|
||||
@@ -119,6 +114,11 @@ void SerialPrintGPS(){
|
||||
Serial.println("");
|
||||
}
|
||||
|
||||
void storeToSD(const String& lat, const String& lng){
|
||||
static int i = 1;
|
||||
logger.Log(String(i++) + ": " + lat + " " + lng);
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial2.begin(_BAUDRATE_GPS, SERIAL_8N1, _RX_GPS, _TX_GPS);
|
||||
@@ -178,6 +178,7 @@ void loop() {
|
||||
Serial.println("Sende GPS:\n" + lat_str + "\n" + lng_str);
|
||||
showOnOLED("Sende GPS Koords:", lat_str, lng_str, satellites);
|
||||
|
||||
storeToSD(lat_str, lng_str);
|
||||
sendMessage(lat_str + "\n\n" + lng_str + "\n\n" + satellites);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
#include <SPI.h>
|
||||
#include <SD.h>
|
||||
|
||||
typedef enum{
|
||||
FAM_R,
|
||||
FAM_W
|
||||
} FileAccessMode;
|
||||
|
||||
class SDHelper {
|
||||
private:
|
||||
uint8_t _cs;
|
||||
FileAccessMode _fam;
|
||||
File _stream;
|
||||
String _filename;
|
||||
bool _available = false;
|
||||
SPIClass _spi(HSPI);
|
||||
|
||||
String getNewFilename() {
|
||||
static unsigned long i = 0;
|
||||
String name;
|
||||
do {
|
||||
name = "coords" + String(i++) + ".txt";
|
||||
} while (SD.exists(name.c_str()));
|
||||
return name;
|
||||
}
|
||||
|
||||
public:
|
||||
SDHelper(uint8_t csPin, FileAccessMode fam, String filename = "") : _cs(csPin), _fam(fam) {
|
||||
_spi.begin(14, 2, 15, 13);
|
||||
if(!SD.begin(_cs, _spi)){
|
||||
_available = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if(_fam == FAM_W){
|
||||
_filename = filename.length() ? filename : getNewFilename();
|
||||
_stream = SD.open(_filename.c_str(), FILE_WRITE);
|
||||
}
|
||||
else {
|
||||
_filename = filename;
|
||||
_stream = SD.open(_filename.c_str(), FILE_READ);
|
||||
}
|
||||
_available = (bool)_stream;
|
||||
}
|
||||
|
||||
~SDHelper(){
|
||||
if(_stream) _stream.close();
|
||||
}
|
||||
|
||||
bool Available() const { return _available; }
|
||||
const String& filename() const { return _filename; }
|
||||
|
||||
void Log(const String& msg) {
|
||||
if(_fam != FAM_W || !_stream) return;
|
||||
_stream.println(msg);
|
||||
_stream.flush();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user