
GPS tracked SDS011 sensor, transmitting data via Lora through TTN to opensensemap.org based on Arduino Mega
124 lines
No EOL
3.2 KiB
C++
124 lines
No EOL
3.2 KiB
C++
/*
|
|
* Example use of chdir(), ls(), mkdir(), and rmdir().
|
|
*/
|
|
#include <SPI.h>
|
|
#include "SdFat.h"
|
|
|
|
// SD card chip select pin.
|
|
const uint8_t chipSelect = SS;
|
|
//------------------------------------------------------------------------------
|
|
|
|
// File system object.
|
|
SdFat sd;
|
|
|
|
// Use for file creation in folders.
|
|
SdFile file;
|
|
|
|
// Create a Serial output stream.
|
|
ArduinoOutStream cout(Serial);
|
|
|
|
// Buffer for Serial input.
|
|
char cinBuf[40];
|
|
|
|
// Create a serial input stream.
|
|
ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf));
|
|
//==============================================================================
|
|
// Error messages stored in flash.
|
|
#define error(msg) sd.errorHalt(F(msg))
|
|
//------------------------------------------------------------------------------
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
|
|
// Wait for USB Serial
|
|
while (!Serial) {
|
|
SysCall::yield();
|
|
}
|
|
delay(1000);
|
|
|
|
cout << F("Type any character to start\n");
|
|
// Wait for input line and discard.
|
|
cin.readline();
|
|
cout << endl;
|
|
|
|
// Initialize at the highest speed supported by the board that is
|
|
// not over 50 MHz. Try a lower speed if SPI errors occur.
|
|
if (!sd.begin(chipSelect, SD_SCK_MHZ(50))) {
|
|
sd.initErrorHalt();
|
|
}
|
|
if (sd.exists("Folder1")
|
|
|| sd.exists("Folder1/file1.txt")
|
|
|| sd.exists("Folder1/File2.txt")) {
|
|
error("Please remove existing Folder1, file1.txt, and File2.txt");
|
|
}
|
|
|
|
int rootFileCount = 0;
|
|
sd.vwd()->rewind();
|
|
while (file.openNext(sd.vwd(), O_READ)) {
|
|
if (!file.isHidden()) {
|
|
rootFileCount++;
|
|
}
|
|
file.close();
|
|
if (rootFileCount > 10) {
|
|
error("Too many files in root. Please use an empty SD.");
|
|
}
|
|
}
|
|
if (rootFileCount) {
|
|
cout << F("\nPlease use an empty SD for best results.\n\n");
|
|
delay(1000);
|
|
}
|
|
// Create a new folder.
|
|
if (!sd.mkdir("Folder1")) {
|
|
error("Create Folder1 failed");
|
|
}
|
|
cout << F("Created Folder1\n");
|
|
|
|
// Create a file in Folder1 using a path.
|
|
if (!file.open("Folder1/file1.txt", O_CREAT | O_WRITE)) {
|
|
error("create Folder1/file1.txt failed");
|
|
}
|
|
file.close();
|
|
cout << F("Created Folder1/file1.txt\n");
|
|
|
|
// Change volume working directory to Folder1.
|
|
if (!sd.chdir("Folder1")) {
|
|
error("chdir failed for Folder1.\n");
|
|
}
|
|
cout << F("chdir to Folder1\n");
|
|
|
|
// Create File2.txt in current directory.
|
|
if (!file.open("File2.txt", O_CREAT | O_WRITE)) {
|
|
error("create File2.txt failed");
|
|
}
|
|
file.close();
|
|
cout << F("Created File2.txt in current directory\n");
|
|
|
|
cout << F("\nList of files on the SD.\n");
|
|
sd.ls("/", LS_R);
|
|
|
|
// Remove files from current directory.
|
|
if (!sd.remove("file1.txt") || !sd.remove("File2.txt")) {
|
|
error("remove failed");
|
|
}
|
|
cout << F("\nfile1.txt and File2.txt removed.\n");
|
|
|
|
// Change current directory to root.
|
|
if (!sd.chdir()) {
|
|
error("chdir to root failed.\n");
|
|
}
|
|
|
|
cout << F("\nList of files on the SD.\n");
|
|
sd.ls(LS_R);
|
|
|
|
// Remove Folder1.
|
|
if (!sd.rmdir("Folder1")) {
|
|
error("rmdir for Folder1 failed\n");
|
|
}
|
|
|
|
cout << F("\nFolder1 removed.\n");
|
|
cout << F("\nList of files on the SD.\n");
|
|
sd.ls(LS_R);
|
|
cout << F("Done!\n");
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
// Nothing happens in loop.
|
|
void loop() {} |