Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我有一个带有Arduino Nano的4位7段显示项目,但它没有';行不通_Arduino_Sensors_Display_Segment - Fatal编程技术网

我有一个带有Arduino Nano的4位7段显示项目,但它没有';行不通

我有一个带有Arduino Nano的4位7段显示项目,但它没有';行不通,arduino,sensors,display,segment,Arduino,Sensors,Display,Segment,该项目是关于在显示器上显示温度的 电路包含以下内容: Arduino Nano(AtMega328p) 4位7段显示器(金布莱特CA56-12SRWA) 74HC595N移位寄存器 显示器用4个220欧姆电阻器 DHT11温度和湿度传感器 传感器的1k欧姆电阻器 该方案: #include "DHT.h" #define DHTPIN 7 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); const int latchPin = 5; co

该项目是关于在显示器上显示温度的

电路包含以下内容:

  • Arduino Nano(AtMega328p)
  • 4位7段显示器(金布莱特CA56-12SRWA)
  • 74HC595N移位寄存器
  • 显示器用4个220欧姆电阻器
  • 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);
}
#包括“DHT.h”
#定义DHTPIN 7
#定义DHT类型DHT11
DHT-DHT(DHTPIN,DHTTYPE);
常数int闭锁销=5;
常数int dataPin=6;
常数int时钟引脚=4;
常数int数字管脚[4]=
{
A0、A3、A2、A1
};
常量字节数字[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(){
用于(字节j=0;j<4;j++){
数字写入(数字引脚[j],低);
}
数字写入(锁定销,低电平);
移位器(数据引脚、时钟引脚、MSBFIRST、B11111111);
数字写入(锁定销,高);
延迟微秒(100);
数字写入(数字引脚[digitScan],高);
数字写入(锁定销,低电平);
如果(数字扫描==1){
移位(数据管脚、时钟管脚、MSBFIRST、~(digit[digitBuffer[digitScan]])
B01000000);
}
其他的
{
移位(数据管脚、时钟管脚、MSBFIRST、~(digit[digitBuffer[digitScan]]);
}
数字写入(锁定销,高);
digitScan++;
如果(digitScan>3){digitScan=0;}
}
无效设置(){
Serial.begin(9600);
引脚模式(锁定引脚,输出);
引脚模式(数据引脚,输出);
引脚模式(时钟引脚,输出);
对于(int i=0;i<4;i++){
引脚模式(数字引脚[i],输出);
}
dht.begin();
}
void循环(){
浮动h=dht.read湿度();
浮点数t=dht.readTemperature();
float hi=dht.计算热指数(t,h,false);
数字缓冲区[3]=int(t)/1000;
数字缓冲区[2]=(int(t)%1000)/100;
数字缓冲区[0]=(int(t)%100)/10;
数字缓冲区[1]=(int(t)%100)%10;
updateDisp();
序列号println(t);
延误(5);
}

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

我相信您已经使用了这里的代码

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


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

您也可以使用MAX7219芯片

我可以解决显示没有意义的东西的问题,问题是我必须反转数字的二进制。但开关仍然是一个问题。为了更容易理解,我制作了一个视频:我刚刚注意到了问题所在。要使LED矩阵保持亮起,您需要不断扫描数字。但每隔2秒,DHT传感器会给出一个正确的读数,库会在Read湿度和readTemperature功能中等待。这就是为什么当led熄灭时,1位数字保持点亮,而Arduino上的串行led熄灭。您需要使用定时器中断来编写代码,或者可能使用2个Arduino,1个用于控制led,1个用于从DHT测量。谢谢您的帮助,先生。