116 lines
2.6 KiB
C++
116 lines
2.6 KiB
C++
/*
|
|
* @Author: dugulingping
|
|
* @Date: 2022-04-17 16:00:40
|
|
* @LastEditTime: 2022-06-16 02:38:58
|
|
* @LastEditors: dugulingping
|
|
* @Description:
|
|
* @FilePath: \project\asd\asd.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);
|
|
} |