2017-07-28 5 views
0

私の質問は、どのように7セグメントLEDの変数を表示するのですか? 2秒ごとに表示を更新したいのですが、以下のコードのように実行すると正しく表示されません。どんな解決策ですか?変数を7セグメント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

あなたのコード内のコメントがすでに指摘しているように、あなたは2秒ごとに繰り返しではなくsevseg.refreshDisplay();を呼び出す必要があります。また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

ありがとうございました! 2秒おきに番号を変更するだけで、2秒ごとに更新する必要はありません。 –

関連する問題