2017-07-28 46 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

謝謝!你是對的,它只需要每兩秒更換一次數字,而不是每兩秒刷新一次。 –