아두이노 우노와 data logging shield(Adafruit)를 사용하고있습니다.
sd카드를 넣고 millis()값과 현재 날짜 및 시간 그리고 조도센서값을 로깅해서 csv 또는 txt파일에 넣어서 보려고합니다.
LCD도 연결해서 현재 날짜와 시각을 디스플레이 하도록 하구요.
그런데 모든 값이 시리얼 모니터 상에는 정상적으로 다 나옵니다.
똑같은 값이 SD카드 내에 생성된 파일에도 나와야하는데,파일은 생성되었지만 그 안에 data가 하나도 안나옵니다.
SD카드 정상인지 CardInfo 업로드해서 확인해봤구요, 마이크로 SD카드를 SD카드 어댑터에 끼워서 사용하고있습니다.
아무리 열어봐도 안에 data가 하나도 없어요.. ㅠㅠ
대체 이유가 무엇일까요?
사용한 소스는 아래와 같습니다.
#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());
}