求教结合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();
}
仔细看了下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]