아두이노 data logging shield 사용 시 파일에 data가 보이지 않는 이유(Empy file)

라즈누나 2018-05-17 (목) 15:15 5일전 25  

아두이노 우노와 data logging shield(Adafruit)를 사용하고있습니다. 

sd카드를 넣고 millis()값과 현재 날짜 및 시간 그리고 조도센서값을 로깅해서 csv 또는 txt파일에 넣어서 보려고합니다. 

LCD도 연결해서 현재 날짜와 시각을 디스플레이 하도록 하구요. 


그런데 모든 값이 시리얼 모니터 상에는 정상적으로 다 나옵니다. 

똑같은 값이 SD카드 내에 생성된 파일에도 나와야하는데,파일은 생성되었지만 그 안에 data가 하나도 안나옵니다. 

SD카드 정상인지 CardInfo 업로드해서 확인해봤구요, 마이크로 SD카드를 SD카드 어댑터에 끼워서 사용하고있습니다. 

dc26a8f25af41dabbc8d0ea495594e24_1526537

dc26a8f25af41dabbc8d0ea495594e24_1526537



아무리 열어봐도 안에 data가 하나도 없어요.. ㅠㅠ

대체 이유가 무엇일까요? 1_47.gif

 

사용한 소스는 아래와 같습니다.

 

#include <SPI.h>

#include <SD.h>

#include <RTClib.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>



RTC_PCF8523 rtc;

LiquidCrystal_I2C lcd(0x3F, 16, 2);


#define LOG_INTERVAL 1000

#define ECHO_TO_SERIAL 1 

#define WAIT_TO_START 0 


const int chipSelect = 10; 

unsigned long previousMillis = 0; 

const long interval = 1000; 

 char filename[] = "LOGGER00.TXT";


File logfile; 


char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};


void error(char *str){

  Serial.print("error: "); 

  Serial.println(str);


  while(1);

}


void setup() {

  lcd.init();

  lcd.backlight();

  lcd.setCursor(0,0); 

  

  Serial.begin(9600);

  

  if (! rtc.initialized()) {

    Serial.println("RTC is NOT running!");

    // following line sets the RTC to the date & time this sketch was compiled

    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    // This line sets the RTC with an explicit date & time, for example to set

    // January 21, 2014 at 3am you would call:

    //rtc.adjust(DateTime(2018, 5, 16, 20, 17, 0));

  }


  Serial.print("Initializing SD card...");


  pinMode(10, OUTPUT); 


  if(!SD.begin(chipSelect)){

    Serial.println("Card failed, or not present");

    return;

  }

  Serial.println("card initialized.");


/*  char filename[] = "LOGGER.TXT";

  if(! SD.exists(filename)){

    logfile = SD.open(filename, FILE_WRITE);

  }*/

  char filename[] = "LOGGER00.TXT";

  for(uint8_t i=0; i<100; i++){

    filename[6] = i/10 + '0';

    filename[7] = i%10 + '0';

   if(! SD.exists(filename)){

    logfile = SD.open(filename, FILE_WRITE);

    break;

  }

}

  if(! logfile){

    error("couldn't create file");

  }


  Serial.print("Logging to: ");

  Serial.print(filename); 


  Wire.begin();

    if (! rtc.begin()) {

      logfile.println("RTC failed");

#if ECHO_TO_SERIAL

      Serial.println("RTC failed");

#endif

  }


  logfile.println("millis,stamp,datetime,light");

#if ECHO_TO_SERIAL

    Serial.println("millis,stamp,datetime,light");

#endif 


 /* if(logfile.writeError || !logfile.sync()){

    error("write header");

  }*/

}


void loop() {

  DateTime now = rtc.now(); 

  int light = analogRead(0);

  unsigned long currentMillis = millis(); 


  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL)); 


    logfile = SD.open(filename, FILE_WRITE);


  logfile.print(currentMillis); 

  logfile.print(",");

#if ECHO_TO_SERIAL

  Serial.print(currentMillis);         // milliseconds since start

  Serial.print(",");  

#endif


  logfile.print(now.unixtime());      //seconds since 1/1/1970

  logfile.print(","); 

  logfile.print(now.year(), DEC); 

  logfile.print("/");

  logfile.print(now.month(), DEC); 

  logfile.print("/");

  logfile.print(now.day(), DEC); 

  logfile.print(" ");

  logfile.print(now.hour(), DEC); 

  logfile.print(":"); 

  logfile.print(now.minute(), DEC); 

  logfile.print(":");

  logfile.print(now.second(), DEC); 

  logfile.print(","); 

  logfile.print(light);

  logfile.println(); 

#if ECHO_TO_SERIAL

  Serial.print(now.unixtime());      //seconds since 1/1/1970

  Serial.print(","); 

  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.print(","); 

  Serial.print(light);

  Serial.println(); 

#endif //ECHO_TO_SERIAL

  

  lcd.setCursor(0, 0);

  lcd.print(now.year());

  lcd.setCursor(4, 0);

  lcd.print("/");

  lcd.setCursor(5, 0);

  lcd.print(now.month());

  lcd.setCursor(7, 0);

  lcd.print("/");

  lcd.setCursor(8, 0);

  lcd.print(now.day());

  lcd.setCursor(11, 0);

  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);

  

  lcd.setCursor(0, 1);

  lcd.print(now.hour());

  lcd.setCursor(2, 1);

  lcd.print(":");

  lcd.setCursor(3, 1);

  lcd.print(now.minute());

  lcd.setCursor(5, 1);

  lcd.print(":");

  lcd.setCursor(6, 1);

  lcd.print(now.second()); 

 

 }

 

 


메카 2018-05-17 (목) 19:39 5일전
안녕하세요 메카솔루션입니다 (www.mechasolution.com)
파일을 닫아주지 않아서 그런 것 같습니다.
logfile.close();가 필요할 것으로 보입니다.
주소
모바일 버전으로 보기