3

I am trying to save some data to the SD card using the memory shield module that I read from HC-SR04 Ultrasonic Module. The data that gets printed indicates error. This is how my SD card module is connected.

SD card attached to SPI bus as
VCC -Arduino 5v
GND- Arduino GND
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - pin 4

Still, Arduino complains that there was an error opening the file in SD card. My sketch is this:

#include <SPI.h>
#include <SD.h>
#define echoPin 6 // Echo Pin
#define trigPin 7 // Trigger Pin
int maximumRange = 250; // Maximum range needed
int minimumRange = 1; // Minimum range needed
long duration, distance; // Duration used to calculate distance
const int chipSelect = 4;
void setup() {
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 Serial.print("Initializing SD card...");
 // see if the card is present and can be initialized:
 if (!SD.begin(chipSelect)) {
 Serial.println("Card failed, or not present");
 // don't do anything more:
 return;
 }
 Serial.println("card initialized.");
}
void loop() {
 readDistance();
 if(distance>minimumRange && distance < maximumRange){
 String string = "distance is" + distance;
 // open the file. note that only one file can be open at a time,
 // so you have to close this one before opening another.
 File dataFile = SD.open("datalog.txt", FILE_WRITE);
 // if the file is available, write to it:
 if( dataFile ){
 dataFile.println(string);
 dataFile.close();
 Serial.println( string );
 }else{
 // if the file isn't open, pop up an error:
 Serial.println("error opening datalog.txt");
 dataFile.close();
 }
 }else{
 Serial.println("Out of range...");
 }
 delay(50);
}
int readDistance(){
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distance = duration/58.2;
} 

Output:

rror opening datalog.txt
rror opening datalog.txt
error opening datalog.txt
rror opening datalog.txt
error opening datalog.txt
error opening datalog.txt
error opening datalog.txt
error opening datalog.txt
error opening datalog.txt

How do I solve this to save the readings to SD card?

asked Mar 10, 2016 at 17:12
2
  • 1
    Re-opening the file each time through the loop seems like a bad idea. Unfortunately file system abstractions don't map very well to what you want to do. You may want to write a number of readings, then re-open a file, perhaps with a different name in an incrementing pattern. Or you could skip the filesystem and write to raw blocks. Most practically, have a look at the code typically used with Arduino-based uSD data loggers and see what you can learn from how they handle it. Commented Mar 10, 2016 at 18:51
  • 1
    I think you have fried your SD card. Those cards operate at 3.3V and may not be 5V tolerant. Commented Mar 11, 2016 at 7:43

1 Answer 1

2

Is there any print out based on this;

Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
 Serial.println("Card failed, or not present");
 // don't do anything more:
 return;
}
Serial.println("card initialized.");

Solution;

Try change

const int chipSelect = 4; // change value to 10

If not, try change the above code to;

Serial.print("Initializing SD card...");
if (!SD.begin(10)) {
 Serial.println("Initialization failed!");
 while (1);
}
Serial.println("Initialization done.");
answered Jul 7, 2021 at 9:35

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.