🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    save some variables into sd card

    PROJECTS
    1
    1
    3.6k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      cepics
      last edited by

      Hi,
      I would like to save three variables value on the sd.
      boolean brgt
      boolean unit
      int x
      and, on setup() read that values...
      I'm trying with String, and I can save a string of my value in a file on sd..
      but I don't know how to read the separate value to use it in the sketch

      // http://forum.m5stack.com/topic/184/problems-writing-to-sd-card
      #include <M5Stack.h>

      //Micro SD / TF Card Test

      void listDir(fs::FS &fs, const char * dirname, uint8_t levels) {

      // Print blank line on screen
      M5.Lcd.printf(" \n ");
      M5.Lcd.printf(" \n ");

      Serial.printf("Listing directory: %s\n", dirname);
      M5.Lcd.printf("Listing directory: %s\n", dirname);

      File root = fs.open(dirname);
      if (!root) {
      Serial.println("Failed to open directory");
      M5.Lcd.println("Failed to open directory");
      return;
      }
      if (!root.isDirectory()) {
      Serial.println("Not a directory");
      M5.Lcd.println("Not a directory");
      return;
      }

      File file = root.openNextFile();
      while (file) {
      if (file.isDirectory()) {
      Serial.print(" DIR : ");
      M5.Lcd.print(" DIR : ");
      Serial.println(file.name());
      M5.Lcd.println(file.name());
      if (levels) {
      listDir(fs, file.name(), levels - 1);
      }
      } else {
      Serial.print(" FILE: ");
      M5.Lcd.print(" FILE: ");
      Serial.print(file.name());
      M5.Lcd.print(file.name());
      Serial.print(" SIZE: ");
      M5.Lcd.print(" SIZE: ");
      Serial.println(file.size());
      M5.Lcd.println(file.size());
      }
      file = root.openNextFile();
      }
      }

      void readFile(fs::FS &fs, const char * path) {
      Serial.printf("Reading file: %s\n", path);
      M5.Lcd.printf("Reading file: %s\n", path);

      File file = fs.open(path);
      if (!file) {
      Serial.println("Failed to open file for reading");
      M5.Lcd.println("Failed to open file for reading");
      return;
      }

      Serial.print("Read from file: ");
      M5.Lcd.print("Read from file: ");
      while (file.available()) {
      int ch = file.read();
      Serial.write(ch);
      M5.Lcd.write(ch);
      }
      }

      void writeFile(fs::FS &fs, const char * path, const char * message) {
      Serial.printf("Writing file: %s\n", path);
      M5.Lcd.printf("Writing file: %s\n", path);

      File file = fs.open(path, FILE_WRITE);
      if (!file) {
      Serial.println("Failed to open file for writing");
      M5.Lcd.println("Failed to open file for writing");
      return;
      }
      if (file.print(message)) {
      Serial.println("File written");
      M5.Lcd.println("File written");
      } else {
      Serial.println("Write failed");
      M5.Lcd.println("Write failed");
      }
      }

      //////////////////////////////////////////////////////////////////////////////////////
      bool suca = 1;
      bool assai = 0;
      int x = 1680;
      //////////////////////////////////////////////////////////////////////////////////////

      // the setup routine runs once when M5Stack starts up

      void setup() {

      // initialize the M5Stack object
      M5.begin();

      // M5.startupLogo();
      Wire.begin();

      // Lcd display
      M5.Lcd.setBrightness(100);
      M5.Lcd.fillScreen(BLACK);
      M5.Lcd.setCursor(0, 10);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(2);

      // Page Header
      M5.Lcd.fillScreen(BLACK);
      M5.Lcd.setCursor(0, 05);
      M5.Lcd.printf("Testing SD Card Functions:\r\n");

      //////////////////////////////////////////////////////////////////////////////////////

      store = String(brgt) + "," + String(unit) + "," + String(x) + "\r\n";

      //////////////////////////////////////////////////////////////////////////////////////
      // writeFile(SD, "/hello.txt", "Hello world from M5Stack !!");
      writeFile(SD, "/hello.txt", store.c_str()); // questa funziona!!!!

      M5.Lcd.printf("");

      // Print blank line on screen
      M5.Lcd.printf(" \n ");

      // Print blank line on screen
      M5.Lcd.printf(" \n ");

      readFile(SD, "/hello.txt");
      // store2[3] = (readFile(SD, "/hello.txt"));
      }

      void loop() {

      // put your main code here, to run repeatedly:

      M5.update();
      }

      is it correct to use String?
      is it the best way to save/read my variables?

      in the past, with esp8266, I saved my three variables on EEPROM but since M5Stack have sd card I would like to have infinite cycle of read/write

      1 Reply Last reply Reply Quote 0
      • First post
        Last post