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);
}

浙公网安备 33010602011771号