极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10537|回复: 0

程序问题(库冲突)SD卡,时钟,温湿度

[复制链接]
发表于 2014-2-27 22:06:24 | 显示全部楼层 |阅读模式
本帖最后由 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不太熟悉,自己写库有点难度,对电子元件不太认知,翻译所有库也找不出个结果
只好求教大神






  1. //-----------------定义包涵头函数------------------------
  2. #include <dht11.h>//定义DHT11库
  3. //#include <SHT1x.h>//定义SHT10库
  4. #include <SPI.h>//定义SPI串行外设接口库
  5. #include <SD.h>//定义SD卡库
  6. #include <Wire.h>//定义I2C总线库
  7. #include "DS1307.h"//定义时钟库

  8. //---------SDkajiexian-----
  9. //MOSI - pin 11
  10. //MISO - pin 12
  11. //CLK - pin 13
  12. //CS - pin 4
  13. //---------shizhong-----
  14. //SDA – pin A4
  15. //SCL – pin A5
  16. //---------SHT10-----
  17. //data – pin 3
  18. //clock – pin 8
  19. //---------DHT11-----
  20. //data – pin 2
  21. //-----------------定义设备引脚------------------------
  22. #define DHT11PIN 2//定义温度湿度传感器DHT11-data数据引脚 = 5
  23. //#define dataPin  3//定义温度湿度传感器SHT10-data数据引脚 = 2
  24. //#define clockPin 8//定义温度湿度传感器SHT10-clock时钟引脚 = 8
  25. const int chipSelect = 4;//定义SD卡片选信号引脚 = 4
  26. //-----------------定义类对象------------------------
  27. dht11 DHT11;//
  28. //SHT1x sht1x(dataPin, clockPin);//
  29. DS1307 clock;//
  30. //------------------程序设置开始----------------------
  31. void setup() {
  32.   Serial.begin(9600);//设置串口波特率
  33.   //---------时钟设置--------
  34.   clock.begin();//时钟设置开始
  35.   clock.fillByYMD(2013,4,19);//时钟设置年月日如:2013,4,19
  36.   clock.fillByHMS(11,20,30);//时钟设置时分秒如:15:28 30"
  37.   clock.fillDayOfWeek(FRI);//Saturday//时钟设置一周中星期几如:星期六
  38.   clock.setTime();//write time to the RTC chfip设置时间到RTC芯片
  39.   //---------内存卡设备状态检查--------
  40.    while (!Serial) {;}//while循环等待串口开启
  41.    Serial.print("Initializing SD card...");//串口输出"初始化SD卡"
  42.    pinMode(10, OUTPUT);//针脚模式(10号脚,设置为输出)
  43.    if (!SD.begin(chipSelect)) //开始判断SD卡芯片
  44.    {
  45.        Serial.println("Card failed, or not present");//串行打印(“内存卡读取失败,或不存在”);
  46.        //return;//退出程序
  47.    }
  48.    Serial.println("card initialized.");//串口打印(“初始化SD卡”);
  49. }
  50. //------------------程序循环开始----------------------
  51. void loop() {
  52. //  //------------------定义DHT11传感器数据输出精度------------------
  53.   float DHT11temperature;//双精度浮点类型温度C
  54.   float DHT11humidity;//双精度浮点类型湿度%
  55. //  //------------------定义SHT10传感器数据输出精度------------------
  56. //  float SHT10temperature;//双精度浮点类型温度C
  57. //  float SHT10humidity;//双精度浮点类型湿度%
  58. //  //------------------从DHT11传感器读取值------------------
  59.   DHT11temperature = DHT11.temperature;
  60.   DHT11humidity = DHT11.humidity;
  61. //  //------------------从SHT10传感器读取值------------------
  62. //  SHT10temperature = sht1x.readTemperatureC();
  63. //  SHT10humidity = sht1x.readHumidity();
  64. //--------------------------------------------------------------------

  65.   File dataFile = SD.open("datalog.txt", FILE_WRITE);//文件数据文件= SD打开(“datalog.txt”,设置文件写入);
  66.   if (dataFile) {//如果(数据文件)OK
  67.      Serial.println("SD card wenjian dakai chenggong kaishi xieru wejian");
  68.       printTime();//输出时间子程序
  69.       dataFile.print("DHT11 Temperature (oC): ");//打印输出数据文件的(数据字符串);
  70.       dataFile.println((float)DHT11temperature, 2);
  71.       dataFile.print("DHT11 Humidity (%): ");//串口打印(“DHT11湿度%:”);
  72.       dataFile.println((float)DHT11humidity, 2);
  73.       dataFile.print("DHT11 Dew Point (oC): ");//串口打印(“DHT11露点温度C:”);
  74.       dataFile.println(dewPoint(DHT11.temperature, DHT11.humidity));
  75. //      
  76. //      dataFile.print("SHT10 Temperature (oC): ");//串口打印(“SHT10温度C:”);
  77. //      dataFile.println((float)SHT10temperature,2);
  78. //      dataFile.print("SHT10 Humidity (%): ");//串口打印(“SHT10湿度%:”);
  79. //      dataFile.println((float)SHT10humidity,2);
  80. //      dataFile.print("SHT10 Dew Point (oC): ");//串口打印(“SHT10露点温度C:”);
  81. //      dataFile.println(SHT10dewPoint(SHT10temperature, SHT10humidity));
  82.       dataFile.print(clock.hour, DEC);//串口打印(时钟小时,12月);
  83.       dataFile.print(":");//串行打印(“:”);
  84.       dataFile.print(clock.minute, DEC);//串行。打印(时钟分钟,12月);
  85.       dataFile.print(":");//串行打印(“:”);
  86.       dataFile.print(clock.second, DEC);//串行打印(时钟秒,12月);
  87.       dataFile.print("        ");//串行打印(“”);
  88.       dataFile.print(clock.month, DEC);//串行。打印(时钟月,12月);
  89.       dataFile.print("/");//串行打印(“/”);
  90.       dataFile.print(clock.dayOfMonth, DEC);//串行。打印(时钟日,12月);
  91.       dataFile.print("/");//串行打印(“/”);
  92.       dataFile.print(clock.year+2000, DEC);//串行。打印(时钟。年+ 2000,DEC);
  93.       dataFile.print(" ");//串行打印(“”);
  94.       switch (clock.dayOfWeek)// Friendly printout the weekday,switch循环输出时钟星期几
  95.               {
  96.               case MON://如果结果为一
  97.           dataFile.print("MON");//输出星期一
  98.                 break;//结果已经输出断开
  99.               case TUE:
  100.           dataFile.print("TUE");
  101.                 break;
  102.               case WED:
  103.                 dataFile.print("WED");
  104.                 break;
  105.               case THU:
  106.                 dataFile.print("THU");
  107.                 break;
  108.               case FRI:
  109.                 dataFile.print("FRI");
  110.                 break;
  111.               case SAT:
  112.                 dataFile.print("SAT");
  113.                 break;
  114.               case SUN:
  115.                 dataFile.print("SUN");
  116.                 break;
  117.               }
  118.       dataFile.println(" ");//串行打印(“”);  
  119.       dataFile.close();//关闭数据文件
  120. //
  121. //  //----------------------------串口打印-------------------------------
  122.   Serial.print("DHT11 Temperature (oC): ");//串口打印(“DHT11温度C:”);
  123.   Serial.println((float)DHT11temperature, 2);
  124.   Serial.print("DHT11 Humidity (%): ");//串口打印(“DHT11湿度%:”);
  125.   Serial.println((float)DHT11humidity, 2);
  126.   Serial.print("DHT11 Dew Point (oC): ");//串口打印(“DHT11露点温度C:”);
  127.   Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
  128. //  
  129. //  Serial.print("SHT10 Temperature (oC): ");//串口打印(“SHT10温度C:”);
  130. //  Serial.println((float)SHT10temperature,2);
  131. //  Serial.print("SHT10 Humidity (%): ");//串口打印(“SHT10湿度%:”);
  132. //  Serial.println((float)SHT10humidity,2);
  133. //  Serial.print("SHT10 Dew Point (oC): ");//串口打印(“SHT10露点温度C:”);
  134. //  Serial.println(SHT10dewPoint(SHT10temperature, SHT10humidity));
  135. //  
  136.   }
  137.        else{
  138.           Serial.println("SD card wenjian dakai shibai");
  139.           Serial.print("diaoshi DHT11 Temperature (oC): ");//串口打印(“DHT11温度C:”);
  140.           Serial.println((float)DHT11temperature, 2);
  141.           Serial.print("diaoshi DHT11 Humidity (%): ");//串口打印(“DHT11湿度%:”);
  142.           Serial.println((float)DHT11humidity, 2);
  143.           Serial.print("diaoshi DHT11 Dew Point (oC): ");//串口打印(“DHT11露点温度C:”);
  144.           Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
  145.          
  146.          //-------------------------------------------------------
  147.          Serial.print(clock.hour, DEC);//串口打印(时钟小时,12月);
  148.         Serial.print(":");//串行打印(“:”);
  149.         Serial.print(clock.minute, DEC);//串行。打印(时钟分钟,12月);
  150.         Serial.print(":");//串行打印(“:”);
  151.         Serial.print(clock.second, DEC);//串行打印(时钟秒,12月);
  152.         Serial.print("        ");//串行打印(“”);
  153.         Serial.print(clock.month, DEC);//串行。打印(时钟月,12月);
  154.         Serial.print("/");//串行打印(“/”);
  155.         Serial.print(clock.dayOfMonth, DEC);//串行。打印(时钟日,12月);
  156.         Serial.print("/");//串行打印(“/”);
  157.         Serial.print(clock.year+2000, DEC);//串行。打印(时钟。年+ 2000,DEC);
  158.         Serial.print(" ");//串行打印(“”);
  159.         switch (clock.dayOfWeek)// Friendly printout the weekday,switch循环输出时钟星期几
  160.         {
  161.                 case MON://如果结果为一
  162.                   Serial.print("MON");//输出星期一
  163.                   break;//结果已经输出断开
  164.                 case TUE:
  165.                   Serial.print("TUE");
  166.                   break;
  167.                 case WED:
  168.                   Serial.print("WED");
  169.                   break;
  170.                 case THU:
  171.                   Serial.print("THU");
  172.                   break;
  173.                 case FRI:
  174.                   Serial.print("FRI");
  175.                   break;
  176.                 case SAT:
  177.                   Serial.print("SAT");
  178.                   break;
  179.                 case SUN:
  180.                   Serial.print("SUN");
  181.                   break;
  182.         }
  183.         Serial.println(" ");//串行打印(“”);
  184.       }
  185.         delay(1000);

  186. }
  187. void printTime()//设置输出时间子程序
  188. {
  189.         clock.getTime();//时钟获取时间()
  190.         Serial.print(clock.hour, DEC);//串口打印(时钟小时,12月);
  191.         Serial.print(":");//串行打印(“:”);
  192.         Serial.print(clock.minute, DEC);//串行。打印(时钟分钟,12月);
  193.         Serial.print(":");//串行打印(“:”);
  194.         Serial.print(clock.second, DEC);//串行打印(时钟秒,12月);
  195.         Serial.print("        ");//串行打印(“”);
  196.         Serial.print(clock.month, DEC);//串行。打印(时钟月,12月);
  197.         Serial.print("/");//串行打印(“/”);
  198.         Serial.print(clock.dayOfMonth, DEC);//串行。打印(时钟日,12月);
  199.         Serial.print("/");//串行打印(“/”);
  200.         Serial.print(clock.year+2000, DEC);//串行。打印(时钟。年+ 2000,DEC);
  201.         Serial.print(" ");//串行打印(“”);
  202.         switch (clock.dayOfWeek)// Friendly printout the weekday,switch循环输出时钟星期几
  203.         {
  204.                 case MON://如果结果为一
  205.                   Serial.print("MON");//输出星期一
  206.                   break;//结果已经输出断开
  207.                 case TUE:
  208.                   Serial.print("TUE");
  209.                   break;
  210.                 case WED:
  211.                   Serial.print("WED");
  212.                   break;
  213.                 case THU:
  214.                   Serial.print("THU");
  215.                   break;
  216.                 case FRI:
  217.                   Serial.print("FRI");
  218.                   break;
  219.                 case SAT:
  220.                   Serial.print("SAT");
  221.                   break;
  222.                 case SUN:
  223.                   Serial.print("SUN");
  224.                   break;
  225.         }
  226.         Serial.println(" ");//串行打印(“”);
  227. }

  228. //------------------计算露点温度------------------
  229. double dewPoint(double wendu, double shidu)//计算双精度浮点类型露点(摄氏度,湿度)
  230. {
  231.         double A0= 373.15/(273.15 + wendu);//双精度浮点类型A0=373.15/(273.15+摄氏);
  232.         double SUM = -7.90298 * (A0-1);//
  233.         SUM += 5.02808 * log10(A0);
  234.         SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
  235.         SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
  236.         SUM += log10(1013.246);
  237.         double VP = pow(10, SUM-3) * shidu;
  238.         double T = log(VP/0.61078);   // temp var
  239.         return (241.88 * T) / (17.558-T);
  240. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 15:15 , Processed in 0.044228 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表