材料:I2C LCD 1602
DHT11
ARDUINO UNO
ARDUINO 代码
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2);
int DHpin;
byte dat[5];
byte read_data()
{
byte data;
for(int i=0;i<8;i++)
{
if(digitalRead(8)==LOW)
{
while(digitalRead(8)==LOW);
delayMicroseconds(30);
if(digitalRead(8)==HIGH)
data|=(1<<(7-i));
while(digitalRead(8)==HIGH);
}
}
return data;
}
void start_test()
{
digitalWrite(8,LOW);
delay(30);
digitalWrite(8,HIGH);
delayMicroseconds(40);
pinMode(8,INPUT);
while(digitalRead(8)==HIGH);
delayMicroseconds(80);
if(digitalRead(8)==LOW);
delayMicroseconds(80);
for(int i=0;i<4;i++)
dat[i]=read_data();
pinMode(8,OUTPUT);
digitalWrite(8,HIGH);
}
void setup()
{
lcd.init(); // initialize the lcd
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(8,OUTPUT);
}
void loop()
{
start_test();
lcd.setCursor(0,0);
lcd.print("Cur hum =");
lcd.print(dat[0],DEC);
lcd.print('.');
lcd.print(dat[1],DEC);
lcd.print('%');
lcd.setCursor(0,1);
lcd.print("Cur tem=");
lcd.print(dat[2],DEC);
lcd.print('.');
lcd.print(dat[3],DEC);
lcd.print('C');
delay(5000);
lcd.clear();
delay(1000);
}
|