程序问题(库冲突)SD卡,时钟,温湿度
本帖最后由 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 dataPin3//定义温度湿度传感器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);
}
页:
[1]