极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8748|回复: 1

求教结合SD卡和DS1307的使用

[复制链接]
发表于 2013-12-30 16:21:48 | 显示全部楼层 |阅读模式
首先感谢这两个教程,

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

sbsdys朋友的,DS1307的使用,http://www.geek-workshop.com/for ... thread&tid=5929

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

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

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

  13. #include <SD.h>
  14. #include <Wire.h>
  15. #include <RTClib.h>

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

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

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


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

  33. void loop()
  34. {
  35.   // 定义数组
  36.   String dataString = "";

  37.   // 读取三个传感器值,写入数组
  38.   for (int analogPin = 0; analogPin < 3; analogPin++) {
  39.     int sensor = analogRead(analogPin);
  40.     dataString += String(sensor);
  41.     if (analogPin < 2) {
  42.       dataString += ",";
  43.     }
  44.   }
  45.   
  46.    DateTime now = RTC.now();

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

  50.   // 打开datalog.txt文件,读写状态,位置在文件末尾。
  51.   if (dataFile) {
  52.     dataFile.println(dataString);
  53.     printDateTime(now);
  54.     dataFile.close();
  55.     // 数组dataString输出到串口
  56.     Serial.println(dataString);
  57.     delay(5000);
  58.   }  
  59.   // 如果无法打开文件,串口输出错误信息error opening datalog.txt
  60.   else {
  61.     Serial.println("error opening datalog.txt");
  62.   }
  63. }

  64. void printDateTime(DateTime dateTime) {
  65.     //传送年份
  66.     Serial.print(dateTime.year(), DEC);
  67.     Serial.print('/');
  68.     //传送月份
  69.     Serial.print(dateTime.month(), DEC);
  70.     Serial.print('/');
  71.     //传送月份中的第几天
  72.     Serial.print(dateTime.day(), DEC);
  73.     Serial.print(' ');
  74.     //传送小时
  75.     Serial.print(dateTime.hour(), DEC);
  76.     Serial.print(':');
  77.     //传送分钟
  78.     Serial.print(dateTime.minute(), DEC);
  79.     Serial.print(':');
  80.     //传送秒
  81.     Serial.print(dateTime.second(), DEC);
  82.     Serial.println();
  83. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-12-31 09:18:15 | 显示全部楼层
仔细看了下sbsdys的模块说明文件,成功了,运行一段时间看看。

54行 DateTime now = RTC.now(); 加这段;
  1. int year,month,day,hour,minute,second;
  2. year = now.year();
  3. month = now.month();
  4. day = now.day();
  5. hour = now.hour();
  6. minute = now.minute();
  7. second = now.second();
复制代码
63行  printDateTime(now); 替换成;
  1. dataFile.print(year);
  2. dataFile.print('/');
  3. dataFile.print(month);
  4. dataFile.print('/');
  5. dataFile.print(day);
  6. dataFile.print(' ');
  7. dataFile.print(hour);
  8. dataFile.print(':');
  9. dataFile.print(minute);
  10. dataFile.print(':');
  11. dataFile.println(second);
复制代码

回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-8 09:01 , Processed in 0.044214 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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