2017-07-28 45 views
0

我的问题是,如何在七段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; 
} 

回答

2

在你的代码的注释已经指出的那样,你需要调用sevseg.refreshDisplay();反复,而不是每2秒。

其在the documentation还提到:

显示

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 

} 
+0

谢谢!你是对的,它只需要每两秒更换一次数字,而不是每两秒刷新一次。 –