#include #include #include #include "dht11.c" SENSOR_PFF sd; DS1302 ds1302; byte sensor_start = 0; RTC rtc; char buff[128]; /* i/o buffer */ static void get_line (char *buff, byte len) { byte c; int idx = 0; for (;;) { if(Serial.available()){ c = Serial.read(); if (c == '\r') break; if ((c == '\b') && idx) { idx--; Serial.print(c); } if (((byte)c >= ' ') && (idx < len - 1)) { buff[idx++] = c; Serial.print(c); } } } buff[idx] = 0; Serial.print(c); Serial.print('\n'); } /* convert string " " to RTC value, return 1 if successful */ byte convert_RTC(char *ptr, RTC* rtc_p) { int val[7]; byte i = 0; int value=0; while(*ptr++ && i<7) { if( *ptr >='0' && *ptr<='9' ) value = value * 10 + *ptr - '0'; else if (*ptr == ' '|| !*ptr){ val[i++] = value; value = 0; } } if (i==7) { rtc_p->year = (unsigned int) val[0]; rtc_p->wday = (byte) val[1]; rtc_p->month = (byte) val[2]; rtc_p->mday = (byte) val[3]; rtc_p->hour = (byte) val[4]; rtc_p->min = (byte)val[5]; rtc_p->sec = (byte) val[6]; return 1; } else return 0; } void setup() { byte res; Serial.begin(57600); DHT11_init(); sprintf_P(buff, PSTR("\nRTC datalog shield DEMO\n")); Serial.println(buff); Serial.print('>'); } void loop() { char *ptr; long p1, p2; byte res; unsigned short w; if(Serial.available() == FALSE){ if(sensor_start == TRUE){ byte hum_int=0, hum_dec=0, temp_int=0, temp_dec=0; int ret; ret = DHT11_read(&hum_int, &hum_dec, &temp_int, &temp_dec); ds1302.gettime(&rtc); sprintf_P(buff, PSTR("%u/%u/%u, %u, %02u:%02u:%02u, hum= %02u.%02u, temp = %02u.%02u\n"), rtc.year, rtc.month, rtc.mday, rtc.wday, rtc.hour, rtc.min, rtc.sec, hum_int, hum_dec, temp_int, temp_dec); res = pf_write(buff, strlen(buff), &w); /* Write data to the file */ if (res != FR_OK) { Serial.println("write err\n"); } else Serial.print('.'); delay(2000); } } else { get_line(buff, sizeof(buff)); ptr = buff; switch (*ptr++) { case 'm': // mount SD card res = disk_initialize(); if (!res) res = pf_mount(&sd.fs); if(res) sprintf_P(buff, PSTR("SD CARD mount error")); else sprintf_P(buff, PSTR("SD CARD mount OK")); Serial.println(buff); break; case 't' : /* t [ ] */ if (convert_RTC(ptr, &rtc)) { ds1302.settime(&rtc); } ds1302.gettime(&rtc); sprintf_P(buff, PSTR("%u/%u/%u, %u, %02u:%02u:%02u"), rtc.year, rtc.month, rtc.mday, rtc.wday, rtc.hour, rtc.min, rtc.sec); Serial.println(buff); break; case 's': /* start datalog */ if(sensor_start == FALSE) sensor_start = TRUE; else sensor_start = FALSE; break; case 'f': /* open a file */ while(*ptr == ' ') ptr++; res = pf_open(ptr); if(res) sprintf_P(buff, PSTR("open file Error")); else sprintf_P(buff, PSTR("open file OK")); Serial.println(buff); break; case 'r': /* read sensor value */ break; } Serial.print('>'); } }