Hoe gegevens op te slaan op SD-kaart met behulp van Memory Shield Module SPI

Ik probeer wat gegevens op te slaan op de SD-kaart met behulp van de geheugenschildmodule die ik heb gelezen van de HC-SR04 Ultrasone module. De gegevens die worden afgedrukt, duiden op een fout. Dit is hoe mijn SD-kaartmodule is verbonden.

SD-kaart als bijlage toegevoegd aan SPI-bus   VCC -Arduino 5v
  GND- Arduino GND
  MOSI - pin 11
  MISO - pin 12
  CLK - pin 13
  CS - pin 4

Toch klaagt Arduino dat er een fout was opgetreden bij het openen van het bestand op de SD-kaart. Mijn schets is dit:

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

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

Hoe los ik dit op om de meetwaarden op de SD-kaart op te slaan?

2
toegevoegd bewerkt
Bekeken: 11
Het opnieuw openen van het bestand telkens door de lus lijkt een slecht idee. Helaas komen bestandssysteemabstracties niet goed overeen met wat je wilt doen. Misschien wilt u een aantal metingen schrijven en vervolgens een bestand opnieuw openen, misschien met een andere naam in een oplopend patroon. Of u kunt het bestandssysteem overslaan en naar onbewerkte blokken schrijven. Bekijk vooral de code die meestal wordt gebruikt met op Arduino gebaseerde uSD-dataloggers en zie wat u kunt leren van hoe zij omgaan.
toegevoegd de auteur rossp, de bron
Ik denk dat je je SD-kaart hebt gebakken. Die kaarten werken op 3,3V en zijn mogelijk niet 5V tolerant.
toegevoegd de auteur Greg Duncan, de bron

Geen antwoorden

0