hmpmark 发表于 2014-2-27 22:06:24

程序问题(库冲突)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]
查看完整版本: 程序问题(库冲突)SD卡,时钟,温湿度