我有一个带有 Arduino Nano 的 4 位 7 段显示项目,但它不起作用

I have an a 4 digit 7 segment display project with an Arduino Nano, but it doesn't work

该项目是关于在显示屏上显示温度。

电路包含以下内容:

程序:

#include "DHT.h"

#define DHTPIN 7
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

const int latchPin = 5;
const int dataPin = 6;
const int clockPin = 4;

const int digitPins[4] = 
{
    A0, A3, A2, A1  
};

const byte digit[10] =
{
    B01010000, //0
    B11010111, //1
    B01100100, //2
    B01000110, //3
    B11000011, //4
    B01001010, //5
    B01001000, //6
    B11010110, //7
    B01000000, //8
    B01000010 //9
};

int digitBuffer[4] = {0};

int digitScan = 0;

void updateDisp(){
   for(byte j = 0; j < 4; j++){
      digitalWrite(digitPins[j], LOW);
   }

   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
   digitalWrite(latchPin, HIGH);

   delayMicroseconds(100);
   digitalWrite(digitPins[digitScan], HIGH);

   digitalWrite(latchPin, LOW);
   if(digitScan==1){
      shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] | 
B01000000));
   }
   else
   {
      shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]]));
   }

   digitalWrite(latchPin, HIGH);
   digitScan++;
   if(digitScan > 3){digitScan = 0;}
}

void setup() {
   Serial.begin(9600);
   pinMode(latchPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
   pinMode(clockPin, OUTPUT);

   for(int i = 0; i < 4; i++){
      pinMode(digitPins[i], OUTPUT);
   }

   dht.begin();
}

void loop() {

   float h = dht.readHumidity();
   float t = dht.readTemperature();
   float hi = dht.computeHeatIndex(t, h, false);

   digitBuffer[3] = int(t)/1000;
   digitBuffer[2] = (int(t)%1000)/100;
   digitBuffer[0] = (int(t)%100)/10;
   digitBuffer[1] = (int(t)%100)%10;
   updateDisp();
   Serial.println(t);
   delay(5);
}

问题是 LED 不显示数字,但我测试了二进制文件,在测试程序中所有数字都有效。同样几乎每 2 秒所有 LED 都会熄灭然后再次亮起。理论上,组件和连接都没有问题。如果我在某个地方犯了一个大错误,请不要生气,我是初学者。我对电路部分比编码更感兴趣,我无法解决问题。

我相信你已经使用了这里的代码
https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHTtester/DHTtester.ino

您的系统更新显示的速度太快,因此 DHT 无法正确处理温度,并最终给出垃圾值。

将延迟从 5(即 5 毫秒)增加到大约 250(到 250 毫秒),您将看到数字。我建议使用 2000ms,但我觉得 250 应该可以。

你也可以使用 MAX7219 芯片...