极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9035|回复: 2

求助,SD卡换名创建文件的问题

[复制链接]
发表于 2013-1-11 19:04:30 | 显示全部楼层 |阅读模式
我写了一段程序,需要定时在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明进行变量传递!
请各位赐教!
回复

使用道具 举报

发表于 2013-1-12 09:54:07 来自手机 | 显示全部楼层
楼主需要下面的能帮到你。
在c语言中,只能定义字符变量,不能直接定义字符串变量,要处理字符串,有一个字符数组的东东,这里面涉及到指针。
我对arduino的语言不了解。
用int n;
n++;
再用n做为文件名也不行?不要指定格式。
其实我也不懂。。
回复 支持 反对

使用道具 举报

发表于 2013-1-12 09:58:12 来自手机 | 显示全部楼层
arduino-ice 发表于 2013-1-12 09:54
楼主需要下面的能帮到你。
在c语言中,只能定义字符变量,不能直接定义字符串变量,要处理字符串,有一个字 ...

估计楼主c语言比我好。。
char filename[]="test.txt";
File dataFile = SD.open(filename, FILE_WRITE);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 16:46 , Processed in 0.038175 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表