HardWare/DHTdisplay/DHTdisplay.ino

116 lines
2.6 KiB
C++

/*
* @Author: dugulingping
* @Date: 2022-04-17 16:00:40
* @LastEditTime: 2022-05-23 16:57:11
* @LastEditors: dugulingping
* @Description:
* @FilePath: \test\DHTdisplay\DHTdisplay.ino
*/
#include "DHT.h"
// DHT11
#define DHTPIN 4
#define DHTTYPE DHT22 // DHT 11
//LED
#define SCLK 14
#define RCLK 13
#define DIO 15
DHT dht(DHTPIN, DHTTYPE);
//定义字库
unsigned char LED_0F[] = {
// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
//定义位
unsigned char LED_BIT[] = {
// 1 2 3 4 1+2 3+4 1~4
0x01,0x02,0x04,0x08,0x03,0x0C,0x0F
};
//定义dht数据
int dhtdata[3] = {0};
void setup() {
Serial.begin(115200);
dht.begin();
//让三个脚都是输出状态
pinMode(SCLK,OUTPUT);
pinMode(RCLK,OUTPUT);
pinMode(DIO,OUTPUT);
}
//定时
int delay_date = 0;
void loop() {
if(delay_date < 2000){
delay_date+=4;
}else{
delay_date = 0;
DHT_Data();
}
if(!dhtdata[1]||!dhtdata[2]){
LED_display(LED_BIT[6], 0xBF);
return;
}
int num1 = dhtdata[0]%10;
int num2 = dhtdata[0]/10;
int num3 = dhtdata[2]%10;
int num4 = dhtdata[2]/10;
LED_display(LED_BIT[2], LED_0F[num1]-128);
LED_display(LED_BIT[3], LED_0F[num2]);
LED_display(LED_BIT[0], LED_0F[num3]-128);
LED_display(LED_BIT[1], LED_0F[num4]);
//LED_display(LED_BIT[2], LED_0F[data_split(dhtdata[0])[0]]-128);
//LED_display(LED_BIT[1], LED_0F[data_split(dhtdata[2])[1]]);
//LED_display(LED_BIT[0], LED_0F[data_split(dhtdata[2])[0]]);
}
void LED_display(unsigned char bit, unsigned char digit ){
LED_OUT(digit);
LED_OUT(bit);
digitalWrite(RCLK,LOW);
digitalWrite(RCLK,HIGH);
delay(1);
}
void LED_OUT(unsigned char X){
unsigned char i;
for(i=8;i>=1;i--)
{
if(X&0x80)
digitalWrite(DIO,HIGH);
else
digitalWrite(DIO,LOW);
X<<=1;
digitalWrite(SCLK,LOW);
digitalWrite(SCLK,HIGH);
}
}
int * data_split(int num){
int res[2] = {0};
for(int i = 0; num > 0; i++){
res[i] = num%10;
}
return res;
}
void DHT_Data(){
float h = dht.readHumidity();
float t = dht.readTemperature(false);
float hic = dht.computeHeatIndex(t, h, false);
if (isnan(h) || isnan(t)){
Serial.println(F("Failed to read from DHT sensor!"));
dhtdata[0] = 0;
dhtdata[1] = 0;
dhtdata[2] = 0;
return;
}
dhtdata[0] = h;
dhtdata[1] = t;
dhtdata[2] = hic;
Serial.println(h);
}