|
|
本帖最后由 hmpmark 于 2014-3-2 14:42 编辑
各位大神,求教,小白想做一个数据收集器,但问题来了
官方SD卡库/时间库,与温湿度传感器的库冲突
2014年3月2日测试检测结果
测试环境win7,32位,arduino IDE,1.5.5-r2/1.0.5两组版本,测试流程,第一种,拔掉模块同代码,第二种,不拔模块不同代码,操作过程全戴绝缘防静电手套,模块连接方式焊接电路板,电路板已通过万能表短路测试确保每个接口之间不通电,不漏电
所使用版块UNO,DHT11,时间模块
测试结果:不拔硬件各模块单独例程
1.时间模块数据获取正常
2.SD内存卡模块能写入数据
3.DHT11温湿度模块测试正常
测试结果:拔硬件,整合程序
1.SD卡模块数据正常,其他模块数据无法获取
2.时间模块,数据获取正常,其他模块数据获取失败
3.DHT11温湿度模块数据无法获取,所有模块没数据
测试结果:所有模块插入,使用整合程序
1.SD内存卡模块正常
2.时间模块数据正常
3.DHT11温湿度模块无数据
发百度说是库冲突,但本人C不太熟悉,自己写库有点难度,对电子元件不太认知,翻译所有库也找不出个结果
只好求教大神
- //-----------------定义包涵头函数------------------------
- #include <dht11.h>//定义DHT11库
- //#include <SHT1x.h>//定义SHT10库
- #include <SPI.h>//定义SPI串行外设接口库
- #include <SD.h>//定义SD卡库
- #include <Wire.h>//定义I2C总线库
- #include "DS1307.h"//定义时钟库
- //---------SDkajiexian-----
- //MOSI - pin 11
- //MISO - pin 12
- //CLK - pin 13
- //CS - pin 4
- //---------shizhong-----
- //SDA – pin A4
- //SCL – pin A5
- //---------SHT10-----
- //data – pin 3
- //clock – pin 8
- //---------DHT11-----
- //data – pin 2
- //-----------------定义设备引脚------------------------
- #define DHT11PIN 2//定义温度湿度传感器DHT11-data数据引脚 = 5
- //#define dataPin 3//定义温度湿度传感器SHT10-data数据引脚 = 2
- //#define clockPin 8//定义温度湿度传感器SHT10-clock时钟引脚 = 8
- const int chipSelect = 4;//定义SD卡片选信号引脚 = 4
- //-----------------定义类对象------------------------
- dht11 DHT11;//
- //SHT1x sht1x(dataPin, clockPin);//
- DS1307 clock;//
- //------------------程序设置开始----------------------
- void setup() {
- Serial.begin(9600);//设置串口波特率
- //---------时钟设置--------
- clock.begin();//时钟设置开始
- clock.fillByYMD(2013,4,19);//时钟设置年月日如:2013,4,19
- clock.fillByHMS(11,20,30);//时钟设置时分秒如:15:28 30"
- clock.fillDayOfWeek(FRI);//Saturday//时钟设置一周中星期几如:星期六
- clock.setTime();//write time to the RTC chfip设置时间到RTC芯片
- //---------内存卡设备状态检查--------
- while (!Serial) {;}//while循环等待串口开启
- Serial.print("Initializing SD card...");//串口输出"初始化SD卡"
- pinMode(10, OUTPUT);//针脚模式(10号脚,设置为输出)
- if (!SD.begin(chipSelect)) //开始判断SD卡芯片
- {
- Serial.println("Card failed, or not present");//串行打印(“内存卡读取失败,或不存在”);
- //return;//退出程序
- }
- Serial.println("card initialized.");//串口打印(“初始化SD卡”);
- }
- //------------------程序循环开始----------------------
- void loop() {
- // //------------------定义DHT11传感器数据输出精度------------------
- float DHT11temperature;//双精度浮点类型温度C
- float DHT11humidity;//双精度浮点类型湿度%
- // //------------------定义SHT10传感器数据输出精度------------------
- // float SHT10temperature;//双精度浮点类型温度C
- // float SHT10humidity;//双精度浮点类型湿度%
- // //------------------从DHT11传感器读取值------------------
- DHT11temperature = DHT11.temperature;
- DHT11humidity = DHT11.humidity;
- // //------------------从SHT10传感器读取值------------------
- // SHT10temperature = sht1x.readTemperatureC();
- // SHT10humidity = sht1x.readHumidity();
- //--------------------------------------------------------------------
- File dataFile = SD.open("datalog.txt", FILE_WRITE);//文件数据文件= SD打开(“datalog.txt”,设置文件写入);
- if (dataFile) {//如果(数据文件)OK
- Serial.println("SD card wenjian dakai chenggong kaishi xieru wejian");
- printTime();//输出时间子程序
- dataFile.print("DHT11 Temperature (oC): ");//打印输出数据文件的(数据字符串);
- dataFile.println((float)DHT11temperature, 2);
- dataFile.print("DHT11 Humidity (%): ");//串口打印(“DHT11湿度%:”);
- dataFile.println((float)DHT11humidity, 2);
- dataFile.print("DHT11 Dew Point (oC): ");//串口打印(“DHT11露点温度C:”);
- dataFile.println(dewPoint(DHT11.temperature, DHT11.humidity));
- //
- // dataFile.print("SHT10 Temperature (oC): ");//串口打印(“SHT10温度C:”);
- // dataFile.println((float)SHT10temperature,2);
- // dataFile.print("SHT10 Humidity (%): ");//串口打印(“SHT10湿度%:”);
- // dataFile.println((float)SHT10humidity,2);
- // dataFile.print("SHT10 Dew Point (oC): ");//串口打印(“SHT10露点温度C:”);
- // dataFile.println(SHT10dewPoint(SHT10temperature, SHT10humidity));
- dataFile.print(clock.hour, DEC);//串口打印(时钟小时,12月);
- dataFile.print(":");//串行打印(“:”);
- dataFile.print(clock.minute, DEC);//串行。打印(时钟分钟,12月);
- dataFile.print(":");//串行打印(“:”);
- dataFile.print(clock.second, DEC);//串行打印(时钟秒,12月);
- dataFile.print(" ");//串行打印(“”);
- dataFile.print(clock.month, DEC);//串行。打印(时钟月,12月);
- dataFile.print("/");//串行打印(“/”);
- dataFile.print(clock.dayOfMonth, DEC);//串行。打印(时钟日,12月);
- dataFile.print("/");//串行打印(“/”);
- dataFile.print(clock.year+2000, DEC);//串行。打印(时钟。年+ 2000,DEC);
- dataFile.print(" ");//串行打印(“”);
- switch (clock.dayOfWeek)// Friendly printout the weekday,switch循环输出时钟星期几
- {
- case MON://如果结果为一
- dataFile.print("MON");//输出星期一
- break;//结果已经输出断开
- case TUE:
- dataFile.print("TUE");
- break;
- case WED:
- dataFile.print("WED");
- break;
- case THU:
- dataFile.print("THU");
- break;
- case FRI:
- dataFile.print("FRI");
- break;
- case SAT:
- dataFile.print("SAT");
- break;
- case SUN:
- dataFile.print("SUN");
- break;
- }
- dataFile.println(" ");//串行打印(“”);
- dataFile.close();//关闭数据文件
- //
- // //----------------------------串口打印-------------------------------
- Serial.print("DHT11 Temperature (oC): ");//串口打印(“DHT11温度C:”);
- Serial.println((float)DHT11temperature, 2);
- Serial.print("DHT11 Humidity (%): ");//串口打印(“DHT11湿度%:”);
- Serial.println((float)DHT11humidity, 2);
- Serial.print("DHT11 Dew Point (oC): ");//串口打印(“DHT11露点温度C:”);
- Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
- //
- // Serial.print("SHT10 Temperature (oC): ");//串口打印(“SHT10温度C:”);
- // Serial.println((float)SHT10temperature,2);
- // Serial.print("SHT10 Humidity (%): ");//串口打印(“SHT10湿度%:”);
- // Serial.println((float)SHT10humidity,2);
- // Serial.print("SHT10 Dew Point (oC): ");//串口打印(“SHT10露点温度C:”);
- // Serial.println(SHT10dewPoint(SHT10temperature, SHT10humidity));
- //
- }
- else{
- Serial.println("SD card wenjian dakai shibai");
- Serial.print("diaoshi DHT11 Temperature (oC): ");//串口打印(“DHT11温度C:”);
- Serial.println((float)DHT11temperature, 2);
- Serial.print("diaoshi DHT11 Humidity (%): ");//串口打印(“DHT11湿度%:”);
- Serial.println((float)DHT11humidity, 2);
- Serial.print("diaoshi DHT11 Dew Point (oC): ");//串口打印(“DHT11露点温度C:”);
- Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
-
- //-------------------------------------------------------
- Serial.print(clock.hour, DEC);//串口打印(时钟小时,12月);
- Serial.print(":");//串行打印(“:”);
- Serial.print(clock.minute, DEC);//串行。打印(时钟分钟,12月);
- Serial.print(":");//串行打印(“:”);
- Serial.print(clock.second, DEC);//串行打印(时钟秒,12月);
- Serial.print(" ");//串行打印(“”);
- Serial.print(clock.month, DEC);//串行。打印(时钟月,12月);
- Serial.print("/");//串行打印(“/”);
- Serial.print(clock.dayOfMonth, DEC);//串行。打印(时钟日,12月);
- Serial.print("/");//串行打印(“/”);
- Serial.print(clock.year+2000, DEC);//串行。打印(时钟。年+ 2000,DEC);
- Serial.print(" ");//串行打印(“”);
- switch (clock.dayOfWeek)// Friendly printout the weekday,switch循环输出时钟星期几
- {
- case MON://如果结果为一
- Serial.print("MON");//输出星期一
- break;//结果已经输出断开
- case TUE:
- Serial.print("TUE");
- break;
- case WED:
- Serial.print("WED");
- break;
- case THU:
- Serial.print("THU");
- break;
- case FRI:
- Serial.print("FRI");
- break;
- case SAT:
- Serial.print("SAT");
- break;
- case SUN:
- Serial.print("SUN");
- break;
- }
- Serial.println(" ");//串行打印(“”);
- }
- delay(1000);
- }
- void printTime()//设置输出时间子程序
- {
- clock.getTime();//时钟获取时间()
- Serial.print(clock.hour, DEC);//串口打印(时钟小时,12月);
- Serial.print(":");//串行打印(“:”);
- Serial.print(clock.minute, DEC);//串行。打印(时钟分钟,12月);
- Serial.print(":");//串行打印(“:”);
- Serial.print(clock.second, DEC);//串行打印(时钟秒,12月);
- Serial.print(" ");//串行打印(“”);
- Serial.print(clock.month, DEC);//串行。打印(时钟月,12月);
- Serial.print("/");//串行打印(“/”);
- Serial.print(clock.dayOfMonth, DEC);//串行。打印(时钟日,12月);
- Serial.print("/");//串行打印(“/”);
- Serial.print(clock.year+2000, DEC);//串行。打印(时钟。年+ 2000,DEC);
- Serial.print(" ");//串行打印(“”);
- switch (clock.dayOfWeek)// Friendly printout the weekday,switch循环输出时钟星期几
- {
- case MON://如果结果为一
- Serial.print("MON");//输出星期一
- break;//结果已经输出断开
- case TUE:
- Serial.print("TUE");
- break;
- case WED:
- Serial.print("WED");
- break;
- case THU:
- Serial.print("THU");
- break;
- case FRI:
- Serial.print("FRI");
- break;
- case SAT:
- Serial.print("SAT");
- break;
- case SUN:
- Serial.print("SUN");
- break;
- }
- Serial.println(" ");//串行打印(“”);
- }
- //------------------计算露点温度------------------
- double dewPoint(double wendu, double shidu)//计算双精度浮点类型露点(摄氏度,湿度)
- {
- double A0= 373.15/(273.15 + wendu);//双精度浮点类型A0=373.15/(273.15+摄氏);
- double SUM = -7.90298 * (A0-1);//
- SUM += 5.02808 * log10(A0);
- SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
- SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
- SUM += log10(1013.246);
- double VP = pow(10, SUM-3) * shidu;
- double T = log(VP/0.61078); // temp var
- return (241.88 * T) / (17.558-T);
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|