whuwolf 发表于 2013-12-30 16:21:48

求教结合SD卡和DS1307的使用

首先感谢这两个教程,

弘毅老师的SD卡,http://www.geek-workshop.com/forum.php?mod=viewthread&tid=104

sbsdys朋友的,DS1307的使用,http://www.geek-workshop.com/forum.php?mod=viewthread&tid=5929

分别实践了一把,挺成功的(PS,用了好几种SD卡,都是8G的,用专用软件格成FAT16的2G,实测金士顿C4的不错)

我的目标是存储有时间标记的传感器的值。想合并两个程序,结果没成功(串口可以显示我要去的输出结果,但是存到SD卡中只有模拟值)

麻烦各位朋友帮我看看需要怎么改代码。/*
此例子展示如果记录三个模拟引脚数值到SD卡,使用SD库。
         
电路部分
* 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,
   如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。
* SD卡与arduino控制板使用SPI总线连接
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/

#include <SD.h>
#include <Wire.h>
#include <RTClib.h>

void printDateTime(DateTime dateTime);
RTC_DS1307 RTC;       //创建实例

// CS引脚为pin4,这里也沿用官方默认设置
const int chipSelect = 4;//设定CS接口

void setup()
{
Serial.begin(9600);//设置串口通信波特率为9600
Wire.begin();    //初始化总线
RTC.begin();   //初始化实时时钟
Serial.print("Initializing SD card...");//串口输出数据Initializing SD card...
pinMode(10, OUTPUT);


if (!SD.begin(chipSelect)) {//如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
    Serial.println("Card failed, or not present");
    return;
}
Serial.println("card initialized.");//与SD卡通信成功,串口输出信息card initialized.
}

void loop()
{
// 定义数组
String dataString = "";

// 读取三个传感器值,写入数组
for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";
    }
}

   DateTime now = RTC.now();

// 打开文件,注意在同一时间只能有一个文件被打开
// 如果你要打开另一个文件,就需要先关闭前一个
File dataFile = SD.open("datalog.txt", FILE_WRITE);

// 打开datalog.txt文件,读写状态,位置在文件末尾。
if (dataFile) {
    dataFile.println(dataString);
    printDateTime(now);
    dataFile.close();
    // 数组dataString输出到串口
    Serial.println(dataString);
    delay(5000);
}
// 如果无法打开文件,串口输出错误信息error opening datalog.txt
else {
    Serial.println("error opening datalog.txt");
}
}

void printDateTime(DateTime dateTime) {
    //传送年份
    Serial.print(dateTime.year(), DEC);
    Serial.print('/');
    //传送月份
    Serial.print(dateTime.month(), DEC);
    Serial.print('/');
    //传送月份中的第几天
    Serial.print(dateTime.day(), DEC);
    Serial.print(' ');
    //传送小时
    Serial.print(dateTime.hour(), DEC);
    Serial.print(':');
    //传送分钟
    Serial.print(dateTime.minute(), DEC);
    Serial.print(':');
    //传送秒
    Serial.print(dateTime.second(), DEC);
    Serial.println();
}

whuwolf 发表于 2013-12-31 09:18:15

仔细看了下sbsdys的模块说明文件,成功了,运行一段时间看看。

54行 DateTime now = RTC.now(); 加这段;int year,month,day,hour,minute,second;
year = now.year();
month = now.month();
day = now.day();
hour = now.hour();
minute = now.minute();
second = now.second();63行printDateTime(now); 替换成;dataFile.print(year);
dataFile.print('/');
dataFile.print(month);
dataFile.print('/');
dataFile.print(day);
dataFile.print(' ');
dataFile.print(hour);
dataFile.print(':');
dataFile.print(minute);
dataFile.print(':');
dataFile.println(second);
页: [1]
查看完整版本: 求教结合SD卡和DS1307的使用