0

it's possible to read value from a file inside sd card?

I'm trying to start with the sample code

/*
  SD card read/write

 This example shows how to read and write data to and from an SD card file
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4

 created   Nov 2010
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe

 This example code is in the public domain.

 */

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin(53)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing1 1, 2, 3.");
    myFile.println("testing2 1, 2, 3.");
    myFile.println("testing3 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop() {
  // nothing happens after setup
}

but here he read all the contnent of the file, i want to read only testing 3 part . Thank's for help

3
  • Yes it's possible. Please be more specific in what your actual question is. As now, it's too vague to be answerable.
    – Gerben
    Commented Feb 14, 2017 at 13:36
  • Do you have any part of this working? For example, do you have a device with an SD card slot? Is it attached to your Arduino? Can you read or write anything? Please try and make a start, and when you get stuck, post a specific question, with code.
    – Mark Smith
    Commented Feb 14, 2017 at 13:48
  • 1
    it's possible to read value from a file inside sd card? - of course it is. Why would you connect one otherwise?
    – Nick Gammon
    Commented Feb 15, 2017 at 5:52

2 Answers 2

1

i found this solution with use of strcmp: when i read the file i compare the result str coming from file flux

/*
 SD card read/write

This example shows how to read and write data to and from an SD card file   
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4

created   Nov 2010
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

*/

#include <SD.h>

File myFile;
char buf[10];

void setup()
{
// Open serial communications and wait for port to open:
 Serial.begin(9600);
  while (!Serial) {
   ; // wait for serial port to connect. Needed for Leonardo only
 }


 Serial.print("Initializing SD card...");
 // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
 // Note that even if it's not used as the CS pin, the hardware SS pin 
 // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
 // or the SD library functions will not work. 
  pinMode(10, OUTPUT);

 if (!SD.begin(53)) {
   Serial.println("initialization failed!");
   return;
 }
 Serial.println("initialization done.");  

 // re-open the file for reading:
 myFile = SD.open("test.txt");
 if (myFile) {
   Serial.println("test.txt:");

   // read from the file until there's nothing else in it:
   while (myFile.available()) {
      myFile.read(buf,2);       
       if(strncmp(buf, "12", 2) == 0)//for lenght i use 2 becouse im looking for a number with 2 digit
       {
           Serial.println("Match!");
           }
          break;     
       }
   }
   // close the file:
   myFile.close();
 } else {
  // if the file didn't open, print an error:
   Serial.println("error opening test.txt");
 }
}

void loop()
{
  // nothing happens after setup
}
0

You have 2 options for doing this, depending on what exactly you want to read and how your file is arranged.

  1. Read from the beginning until you find what you want. Throw away (just don't keep) what you don't want.
  2. Use the File::seek(uint32_t) method to jump to a specific byte in the file and read from there. Only useful if you already know where in the file your data is.
6
  • how with reply number 1? Thank's Commented Feb 14, 2017 at 14:10
  • Exactly as with the example code. You just have to have the program examine what is read and make a decision on if it wants it or not.
    – Majenko
    Commented Feb 14, 2017 at 14:17
  • yes, but I'm little bit noob, how? tnks again Commented Feb 14, 2017 at 15:26
  • Here's a clue: A File is a Stream. So is Serial. What you can do with Serial you can do with File.
    – Majenko
    Commented Feb 14, 2017 at 15:29
  • an example please Commented Feb 14, 2017 at 15:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.