|
首先感谢这两个教程,
弘毅老师的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卡中只有模拟值)
麻烦各位朋友帮我看看需要怎么改代码。- /*
- 此例子展示如果记录三个模拟引脚数值到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();
- }
复制代码 |
|