AlLine114514 2023-12-17 16:51
浏览 17
已结题

arduino四位共阴级数码管交替显示温度和湿度

问题: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);
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月25日
    • 创建了问题 12月17日

    悬赏问题

    • ¥15 数学建模——参会安排怎么做
    • ¥15 电脑键盘实现触摸功能
    • ¥25 matlab无法将表达式转换为双数组怎么解决?
    • ¥15 单片机汇编语言相关程序
    • ¥20 家用射频美容仪技术规格
    • ¥15 大家帮我看看为什么错了
    • ¥15 unity互动琴弦抖动效果
    • ¥15 做了个的二极管反向饱和电流测量电路,但是测试达不到效果
    • ¥15 nginx无证书访问https失败
    • ¥15 树莓派启动AP热点传入数据