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?
-
1Re-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.Chris Stratton– Chris Stratton2016年03月10日 18:51:42 +00:00Commented Mar 10, 2016 at 18:51
-
1I think you have fried your SD card. Those cards operate at 3.3V and may not be 5V tolerant.Maxthon Chan– Maxthon Chan2016年03月11日 07:43:06 +00:00Commented Mar 11, 2016 at 7:43
1 Answer 1
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.");
Explore related questions
See similar questions with these tags.