我写了一段程序,需要定时在SD上进行数据存储,设计没10分钟进行一次创建文件操作,以避免文件数据损坏。
我使用命令:File dataFile = SD.open(12345678.txt, FILE_WRITE);时,SD卡内可以创建12345678.txt文档,
但是我使用变量进行文件名传递,却怎么也不成功。
程序清单如下:这是成功的
#include <DS1302.h>
#include <LiquidCrystal.h>
#include <stdio.h>
#include <string.h>
#include <SD.h>
const int chipSelect = 53; //设定SD卡CS接口
uint8_t CE_PIN = 22;
uint8_t IO_PIN = 24;
uint8_t SCLK_PIN = 26;
/* 日期变量缓存 */
char buf[50];// 串口显示
char buf2[10];//Lcd显示 小时:分钟
char buf3[8];//Lcd显示 小时:分钟
char day[10];
/* 串口数据缓存 */
String comdata = "";
int numdata[7] ={0}, j = 0, mark = 0;
/* 创建 DS1302 对象 */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 );
//注意:上面行IO口定义必须这样填写,否则无法显示
void print_time()
{
/* 从 DS1302 获取当前时间 */
Time t = rtc.time();
/* 将星期从数字转换为名称 */
memset(day, 0, sizeof(day));
switch (t.day)
{
case 1: strcpy(day, "Sunday"); break;
case 2: strcpy(day, "Monday"); break;
case 3: strcpy(day, "Tuesday"); break;
case 4: strcpy(day, "Wednesday"); break;
case 5: strcpy(day, "Thursday"); break;
case 6: strcpy(day, "Friday"); break;
case 7: strcpy(day, "Saturday"); break;
}
/* 将日期代码格式化凑成buf等待输出 */
snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
snprintf(buf2, sizeof(buf), "%02d:%02d", t.hr, t.min);//Lcd_print
snprintf(buf3, sizeof(buf), "%02d%02d.txt", t.hr, t.min);//Lcd_print
/* 输出日期到串口 */
Serial.println(buf);
}
void setup()
{
Serial.begin(9600);
SD.begin(53);
File dataFile = SD.open("12345678.txt", FILE_WRITE);
delay(5);
dataFile.close();
rtc.write_protect(false);
rtc.halt(false);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
}
void loop()
{
File dataFile = SD.open("12345678.txt", FILE_WRITE);
delay(5);
dataFile.println(buf);
delay(5);
dataFile.close();
/* 当串口有数据的时候,将数据拼接到变量comdata */
while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(2);
mark = 1;
}
/* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
if(mark == 1)
{
Serial.print("You inputed : ");
Serial.println(comdata);
for(int i = 0; i < comdata.length() ; i++)
{
if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
{
j++;
}
else
{
numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
}
}
/* 将转换好的numdata凑成时间格式,写入DS1302 */
Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
rtc.time(t);
mark = 0;j=0;
/* 清空 comdata 变量,以便等待下一次输入 */
comdata = String("");
/* 清空 numdata */
for(int i = 0; i < 7 ; i++) numdata[i]=0;
}
/* 打印当前时间 */
print_time();
delay(500);
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(buf2);
Serial.println(buf);
}
问题是:如何对filename明进行变量传递!
请各位赐教! |