重工电子论坛

标题: 【实验室培训_201810期】+冯洁莹+第四周任务(软件) [打印本页]

作者: 冯洁莹    时间: 2018-12-6 21:31
标题: 【实验室培训_201810期】+冯洁莹+第四周任务(软件)
一、任务要求:根据输出的温湿度改变跑马灯的样式,并根据不同按键的输入状态输出不同温度类型(摄氏度、华氏温度、开氏温度)。
二、工作环境:通过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,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,HIGH);
      delay(500);
  digitalWrite(LED,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号口。

作者: 鲁亮    时间: 2018-12-7 20:58
你可以尝试一下不调用DHT11的库,自己去写一下那个时序




欢迎光临 重工电子论坛 (http://cqutlab.cn/) Powered by Discuz! X3.1