Arduino_DH11+0.96OLED_u8glib库 温湿度显示2

//OLED接线方式:
//VCC<————>3.3V
//GND<————>GND
//SCL<————>SCL
//SDA<————>SDA
//
// 引入 DHT 库文件,如果没有,先从网上下载好,在 Arduino 中导入
//DHT11接线方式:
//GND<————>GND
//DATA<————>2(数字输入/输出)
//VCC<————>5V
// 128x64 I2C OLED
#include <dht11.h>
// DHT11数字传感器库
#include "U8glib.h"
// OLED库

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);    // I2C

dht11 DHT11;

#define DHT11PIN 2
// Data链接数字针脚2
#define Motor_A 13  //电机A
#define Motor_B 12 //电机B
#define spacing_a 11 //限位开关
#define spacing_b 10 //限位开关
#define Heat 6  //加热取暧
#define Fan 5  //风扇
#define Air 4  //空调
#define Water_vapor 3  //水蒸汽

int limit_spacing_a_NUM = 0;            //存放限位开关信号,将信号保存下来
int limit_spacing_b_NUM = 0;   

void draw(void) {

  u8g.setFont(u8g_font_8x13); //使用8x13大小的字符
  u8g.setPrintPos(0, 20); // 对应 x,y 轴值
  u8g.print("HUMI(%) :");
  u8g.setPrintPos(73, 20);
  u8g.print((float)DHT11.humidity);
  u8g.setPrintPos(0, 40);
  u8g.print("TEMP(oC):");
  u8g.setPrintPos(73, 40);
  u8g.print((float)DHT11.temperature);
}

void setup()
{
  Serial.begin(9600);//串口波特率
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);// 输出 DHT 库的版本号
  Serial.println();
 
    pinMode(Motor_A,OUTPUT);//
    pinMode(Motor_B,OUTPUT);//
    pinMode(spacing_a,INPUT_PULLUP);//
    pinMode(spacing_b,INPUT_PULLUP);//
    pinMode(Heat,OUTPUT);
    pinMode(Fan,OUTPUT);
    pinMode(Air,OUTPUT);
    pinMode(Water_vapor,OUTPUT);

    digitalWrite(Motor_A,LOW);   //电机A
    digitalWrite(Motor_B,LOW);   //电机B
    digitalWrite(Heat,LOW);//加热取暧
    digitalWrite(Fan,LOW);//风扇
    digitalWrite(Air,LOW);//空调
    digitalWrite(Water_vapor,LOW); //水蒸汽
}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

//  Serial.print("Read sensor: ");
  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);
//
//  Serial.print("Temperature (oC): ");
//  Serial.println((float)DHT11.temperature, 2);
//上传数据
  Serial.println("a," + String((float)DHT11.humidity, 2));
  Serial.println("b," + String((float)DHT11.temperature, 2));
  delay(300);
  //温度控制
    if(DHT11.temperature <= 30){
      //首先读取限位是否到位
      limit_spacing_b_NUM = digitalRead(spacing_b);
        if(limit_spacing_b_NUM == 0){
//          Serial.println("spacing_b_OK");
        }else{
          //guan();//关窗
        }
          if(DHT11.temperature >= 20){
            digitalWrite(Heat,LOW); //关加热取暧
//            Serial.println("Heat_OFF_OK");
          }else{
            digitalWrite(Heat,HIGH);//开加热取暧
//            Serial.println("Heat_ON_OK");
          }
    }else{
      //首先读取限位是否到位
      limit_spacing_a_NUM = digitalRead(spacing_a);
        if(limit_spacing_a_NUM == 0){
//         Serial.println("spacing_a_OK");
        }else{
          //kai();//开窗  
        }   
    }
  //湿度控制
    if(DHT11.humidity <= 50){
      digitalWrite(Water_vapor,HIGH);
//      Serial.println("Water_OK");
 
    }else{
      digitalWrite(Water_vapor,LOW);
//      Serial.println("Water_OFF");
    }
//OLED显示
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );

  delay(200);
}

void kai()//开窗
{
  digitalWrite(Motor_A, HIGH); //初始化引脚为高电平
  digitalWrite(Motor_B, LOW);
  delay(200);
 
  do {
    limit_spacing_a_NUM = digitalRead(spacing_a);
    if (limit_spacing_a_NUM == 0)
    {
      delay(50);
      limit_spacing_a_NUM = digitalRead(spacing_a);
      if (limit_spacing_a_NUM == 0)
      {
        digitalWrite(Motor_A, LOW); //初始化引脚为高电平
        digitalWrite(Motor_B, LOW);
        delay(500);
//        Serial.println(" kai_OK");
      }
    }
  } while (limit_spacing_a_NUM);
}
void guan()//关窗
{
  digitalWrite(Motor_B, HIGH); //初始化引脚为高电平
  digitalWrite(Motor_A, LOW);
  delay(200);
 
  do {
    limit_spacing_b_NUM = digitalRead(spacing_b);
    if (limit_spacing_b_NUM == 0)
    {
      delay(50);
      limit_spacing_b_NUM = digitalRead(spacing_b);
      if (limit_spacing_b_NUM == 0)
      {
        digitalWrite(Motor_A, LOW); //初始化引脚为高电平
        digitalWrite(Motor_B, LOW);
        delay(500);
//        Serial.println(" guan_OK");
      }
    }
  } while (limit_spacing_b_NUM);
}

posted @ 2020-06-16 11:06  icloudelectron  阅读(158)  评论(0)    收藏  举报