Cum se salvează datele pe cardul SD utilizând modulul Shield Memory SPI

Încerc să salvez câteva date pe cardul SD utilizând modulul scutului de memorie pe care l-am citit de la modulul HC-SR04 cu ultrasunete. Datele care se imprimă indică eroare. Acesta este modul în care este conectat modulul cardului meu SD.

Cardul SD atașat la autobuzul SPI ca și   VCC-Arduino 5v
  GND- Arduino GND
  MOSI - pin 11
  MISO - pin 12
  CLK - pin 13
  CS - pinul 4

Cu toate acestea, Arduino se plânge că a apărut o eroare la deschiderea fișierului pe cardul SD. Schița mea este următoarea:

#include 
#include 
#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;
}  

ieşire:

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

Cum rezolv acest lucru pentru a salva citirile pe cardul SD?

2
Re-deschiderea fișierului de fiecare dată prin bucla pare o idee proastă. Din păcate, abstracțiile de sistem de fișiere nu se potrivesc foarte bine cu ceea ce doriți să faceți. Poate doriți să scrieți un număr de lecturi, apoi să re-deschideți un fișier, probabil cu un nume diferit într-un model incrementant. Sau puteți sări peste sistemul de fișiere și scrieți pe blocurile prime. În practică, aruncați o privire la codul utilizat în mod obișnuit cu loggerii de date uSD bazați pe Arduino și vedeți ce puteți învăța de la modul în care se descurcă.
adăugat autor rossp, sursa
Cred că ți-ai prăjit cartela SD. Aceste carduri funcționează la 3.3V și nu pot fi tolerante la 5V.
adăugat autor Greg Duncan, sursa

Răspunsuri nu sunt

0