如何在七段 LED 中显示变量?



我的问题是,如何在七段LED中显示变量?我想每两秒刷新一次显示,但是如果我像下面的代码一样执行,它将无法正确显示。有什么解决办法吗?

#include "SevSeg.h"
int reading;
int tempPin = 0;
float tempC;
unsigned long StartTime = millis();
SevSeg sevseg; //Initiate a seven segment controller object
void setup() {
analogReference(INTERNAL);
Serial.begin(9600);
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
sevseg.setBrightness(90);
}
void loop() {
unsigned long CurrentTime = millis();
unsigned long ElapsedTime = CurrentTime - StartTime;
if(ElapsedTime > 2000) {
tempC = tempRequest();
sevseg.setNumber(tempC, 2);
sevseg.refreshDisplay(); // Must run repeatedly
StartTime = CurrentTime;
}
}
float tempRequest() {
reading = analogRead(tempPin);
tempC = reading / 9.31;
return tempC;
}

正如代码中的注释已经指出的那样,您需要反复调用sevseg.refreshDisplay();,而不是每 2 秒调用一次。

文档中也提到了它:

显示

sevseg.refreshDisplay();

程序必须重复运行 refreshDisplay(( 函数才能显示数字。请注意,其他功能引入的任何延迟都会对显示器产生不良影响。

这意味着您必须在每次loop()执行时运行sevseg.refreshDisplay();,而不仅仅是在更改数字时运行。任何使用delay()都会使其不起作用。

void loop() {
unsigned long CurrentTime = millis();
unsigned long ElapsedTime = CurrentTime - StartTime;

if(ElapsedTime > 2000){
tempC = tempRequest();

sevseg.setNumber(tempC, 2);
StartTime = CurrentTime;

}
sevseg.refreshDisplay(); // Must run repeatedly
}

最新更新