我的问题是,如何在七段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;
}
答案 0 :(得分:2)
由于您的代码中的注释已经指出,您需要反复调用sevseg.refreshDisplay();
,而不是每2秒调用一次。
在the documentation中也提到了它:
<强>显示强>
sevseg.refreshDisplay();
您的程序必须重复运行refreshDisplay()函数才能显示数字。请注意,其他功能引入的任何延迟都会对显示屏产生不良影响。
这意味着您必须在每次sevseg.refreshDisplay();
执行时运行loop()
,而不仅仅是在更改号码时。任何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
}