重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2772|回复: 1
打印 上一主题 下一主题

【实验室培训_201810期】+冯洁莹+第四周任务(软件)

[复制链接]

3

主题

3

帖子

61

积分

注册会员

Rank: 2

积分
61
跳转到指定楼层
楼主
发表于 2018-12-6 21:31:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、任务要求:根据输出的温湿度改变跑马灯的样式,并根据不同按键的输入状态输出不同温度类型(摄氏度、华氏温度、开氏温度)。
二、工作环境:通过ardunio软件编程和DHT11数字温湿度传感器,根据串口监视器查看不同按键输入状态时的不同温度类型。
三、实现步骤:通过设定一个按键变量值,用以改变不同的按键输入。且可改变温度变量k=温度/10,使得led灯每k个亮一次。

由温度值可得led灯每两个亮一次,改变温度到30°c,使得led灯每三个亮一次。
每两个亮一次时:
每三个亮一次时:

四、代码展示
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
/* 添加 DHT11 代码库 */
#include <dht11.h> 
 /* 配置一个 DHT11 对象 */
dht11 DHT11; 
 /* 定义 DHT11 数据引脚 */
#define DHT11PIN 2 
int key[3]={11,12,13};
int LED[8]={3,4,5,6,7,8,9,10}; 
float temperature,Humidity;
float Fahrenheit;
float Kelvin; 
int i,j,k,keynum;

void setup() { 
  /* 配置串口 */   
  Serial.begin(9600);   
  /* 输出 DHT11 代码库信息 */  
  Serial.println("DHT11 TEST PROGRAM ");  
  Serial.print("LIBRARY VERSION: ");  
  Serial.println(DHT11LIB_VERSION);  
  Serial.println();  
  for(i=2;i<10;i++)
 { 
  pinMode(LED[i],OUTPUT);
 }
 for(j=11;j<14;j++)
 { pinMode(key[j],INPUT_PULLUP);       }
 }
 

 
void loop() {  
 Serial.println("\n"); 
   int chk = DHT11.read(DHT11PIN);            //查看 DHT11 是否在线或数据读取是否成功
   Serial.print("Read sensor: ");            //输出 DHT11 模块数据
   switch (chk)
   {
     case DHTLIB_OK:                         //数据读取成功
            Serial.println("OK");
            break;
     case DHTLIB_ERROR_CHECKSUM:            //数据读取成功,但检验错误
            Serial.println("Checksum error");       
            break; 
     case DHTLIB_ERROR_TIMEOUT:            //数据读取超时,即模块不在线
             Serial.println("Time out error");        
             break;
      default:                            //其他错误
             Serial.println("Unknown error");    
             break; 
      }
 
  /* 输出湿度信息 */  
  Serial.print("Humidity (%): ");  
  Serial.println((float)DHT11.humidity, 2); 
 

   Scan_key();
  
    if(keynum==1)    
  {   Serial.print("Temperature (oC): "); 
     Serial.println((float)DHT11.temperature, 2); /*摄氏温度*/
  } 
   if(keynum==2) 
  {
    temperature= 1.8 * (float)DHT11.temperature + 32;
    Serial.print("Temperature (oF): ");
    Serial.println((float)temperature, 2);/*华氏温度*/
   }
   if(keynum==3)
   {
    temperature=(float)DHT11.temperature + 273.15;
    Serial.print("Temperature (K): ");
    Serial.println((float)temperature, 2);/*开氏温度*/
    }
 
  k=(float)DHT11.temperature/10;
  for(int i=0;i<9;i=i+k)
  {digitalWrite(LED[i],HIGH);
      delay(500);
  digitalWrite(LED[i],LOW);
      delay(500);}
}
void Scan_key()
{
  keynum=0;   //清空变量
  if(digitalRead(11)==LOW)
  {
    delay(10);
    if(digitalRead(11)==LOW)
    {
     keynum=1;
     }
    }
    
    else if(digitalRead(12)==LOW)
  {
    delay(10);
    if(digitalRead(12)==LOW)
    {
     keynum=2;
     }
    }
    
    else if(digitalRead(13)==LOW)
  {
    delay(10);
    if(digitalRead(13)==LOW)
    {
     keynum=3;
     }
    }   
    else
    keynum=0;
  }
  



五、心得总结:DTH11对时序的要求比较高,所以程序中不同数据间的采集必须间隔1s以上。连接DHT11时,传感器的数字端口代码默认接在2号口。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

14

主题

69

帖子

485

积分

学生管理组

Rank: 8Rank: 8

积分
485
QQ
沙发
发表于 2018-12-7 20:58:50 | 只看该作者
你可以尝试一下不调用DHT11的库,自己去写一下那个时序
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-4-20 16:59 , Processed in 0.231205 second(s), 31 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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