我有一个带有 Arduino Nano 的 4 位 7 段显示项目,但它不起作用
I have an a 4 digit 7 segment display project with an Arduino Nano, but it doesn't work
该项目是关于在显示屏上显示温度。
电路包含以下内容:
- Arduino Nano(AtMega328p)
- 4位7段显示器(Kingbright CA56-12SRWA)
- 74HC595N移位寄存器
- 4x 220ohm 显示器电阻
- DHT11温湿度传感器
- 1k 欧姆传感器电阻
程序:
#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 芯片...
该项目是关于在显示屏上显示温度。
电路包含以下内容:
- Arduino Nano(AtMega328p)
- 4位7段显示器(Kingbright CA56-12SRWA)
- 74HC595N移位寄存器
- 4x 220ohm 显示器电阻
- DHT11温湿度传感器
- 1k 欧姆传感器电阻
程序:
#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 芯片...