🤖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

    Scheduled Pinned Locked Moved PROJECTS
    1 Posts 1 Posters 4.1k Views 1 Watching
    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 Offline
      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

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      • First post
        Last post