问题:Arduino uno程序设计,要求使用dht11获取温度和湿度后,来回交替显示在四位共阴数码管上,并且需要使用两个led灯珠来提示目前显示的是温度还是湿度。
对这个问题无从下手,现在手里有dht11湿温度传感器,HS420361K-32四位共阴数码管,220欧姆电阻,两个LED灯珠
代码切片如下,输出时两个led灯珠不交替,数码管显示错误。希望能给出正确接线方法,尽快解决我的代码问题,谢谢
#include <DHT.h>
#define DHTPIN 2
#define TEMP_LED_PIN 10
#define HUM_LED_PIN 11
#define SEG_A 7
#define SEG_B 8
#define SEG_C 9
#define SEG_D 14
#define SEG_E 15
#define SEG_F 12
#define SEG_G 13
#define DIGIT1 3
#define DIGIT2 4
#define DIGIT3 5
#define DIGIT4 6
DHT dht(DHTPIN, DHT11);
int tempLEDValue = 0;
int humLEDValue = 0;
int temperature;
int humidity;
bool isTemperatureDisplayed = true;
void showDigit(int digit) {
switch (digit) {
case 0:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, LOW);
break;
case 1:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
case 2:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, HIGH);
break;
case 3:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, HIGH);
break;
case 4:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
break;
case 5:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
break;
case 6:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
break;
case 7:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
case 8:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
break;
case 9:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
break;
default:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
}
}
void showTemperature(int temp) {
int temperature_integer = (int)temp;
// 十位数
showDigit(temperature_integer / 10);
digitalWrite(DIGIT1, HIGH);
delay(100);
digitalWrite(DIGIT1, LOW);
// 个位数
showDigit(temperature_integer % 10);
digitalWrite(DIGIT2, HIGH);
delay(100);
digitalWrite(DIGIT2, LOW);
}
void showHumidity(int hum) {
int humidity_integer = (int)hum;
// 十位数
showDigit(humidity_integer / 10);
digitalWrite(DIGIT3, HIGH);
delay(100);
digitalWrite(DIGIT3, LOW);
// 个位数
showDigit(humidity_integer % 10);
digitalWrite(DIGIT4, HIGH);
delay(100);
digitalWrite(DIGIT4, LOW);
}
void adjustLEDIntensity(int temp, int hum) {
tempLEDValue = map(temp, -20, 50, 0, 255);
humLEDValue = map(hum, 0, 100, 0, 255);
if (tempLEDValue < 0) {
tempLEDValue = 0;
} else if (tempLEDValue > 255) {
tempLEDValue = 255;
}
if (humLEDValue < 0) {
humLEDValue = 0;
} else if (humLEDValue > 255) {
humLEDValue = 255;
}
analogWrite(TEMP_LED_PIN, tempLEDValue);
analogWrite(HUM_LED_PIN, humLEDValue);
}
void setup() {
pinMode(TEMP_LED_PIN, OUTPUT);
pinMode(HUM_LED_PIN, OUTPUT);
analogWrite(TEMP_LED_PIN, tempLEDValue);
analogWrite(HUM_LED_PIN, humLEDValue);
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(DIGIT1, OUTPUT);
pinMode(DIGIT2, OUTPUT);
pinMode(DIGIT3, OUTPUT);
pinMode(DIGIT4, OUTPUT);
dht.begin();
}
void loop() {
delay(2000);
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isTemperatureDisplayed) {
showTemperature(temperature);
} else {
showHumidity(humidity);
}
adjustLEDIntensity(temperature, humidity);
isTemperatureDisplayed = !isTemperatureDisplayed;
delay(2000);
}