Go Down

Topic: SOLVED - Problem logging data into files (Read 813 times) previous topic - next topic

Sophie_CG

Aug 23, 2015, 02:04 pm Last Edit: Aug 23, 2015, 04:08 pm by Sophie_CG
Hey guys!
I'm new here and in Arduino's world in general. I'm doing a project for university and a part of it includes creating new files (using a Datalogging Shield with RTC) every minute where supposedly data from an analog sensor would be written and saved into an SD Card 2GB.
The problem is that the files (.txt) are created but there is nothing wrote.
Could you please help me?
Thanks a lot!

Code: [Select]
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"

RTC_Millis rtc;
int Solar = A1;    // Sensor
const int chipSelect = 4;  // CS
int ano=0, mes=0, dia=0, hora=0, minuto=0, segundo=0;
char filename[]="SolarM0000_00.txt";
File dataFile;

void setup() {
  Serial.begin(57600);
    Wire.begin();
    rtc.adjust(DateTime(__DATE__, __TIME__));

  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
 
  // 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() {
 
DateTime now = rtc.now();
if(now.minute() != minuto) {
  minuto = now.minute();
  sprintf(filename,"%04d_%02d.txt",now.year(), now.minute());
  dataFile = SD.open(filename);
  dataFile = SD.open(filename, FILE_WRITE);
}
else{
  dataFile = SD.open(filename);
  dataFile = SD.open(filename, FILE_WRITE);
}


// read the input on analog pin 0:
  int sensorValue = analogRead(Solar);
 
// print out the value you read:
  Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
  Serial.println(sensorValue);


// make a string for assembling the data to log:
if (dataFile){
  String dataString = "";
  dataFile.print(now.year(), DEC);
  dataFile.print("/");
  dataFile.print(now.month(), DEC);
  dataFile.print("/");
  dataFile.print(now.day(), DEC);
  dataFile.print(" ");
  dataFile.print(now.hour(), DEC);
  dataFile.print(":");
  dataFile.print(now.minute(), DEC);
  dataFile.print(":");
  dataFile.print(now.second(), DEC);
  dataFile.print(" ");
  dataString += String(sensorValue);
  dataFile.println(sensorValue);
  dataFile.close();
}

// Take 1 measurement every 5 seconds
delay(5000);
}

PaulS

Code: [Select]
  dataFile = SD.open(filename);
  dataFile = SD.open(filename, FILE_WRITE);

Why are you opening the file twice?

Code: [Select]
if (dataFile){
  String dataString = "";

Shitcan that String. Just write to the file!

The art of getting good answers lies in asking good questions.

Sophie_CG

Thanks a lot PaulS! It works perfectly with that modifications :D

habanero

Just a guess, perhaps I'm wrong. I have something similar going on but like you were advised, I write directly to the file w/o strings, and it works just fine.

However, some functions don't like String variables, preferring old-fashioned character arrays. It's a moot point now that you write directly, but you might want to try that to see if that works.

Go Up