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

时间:2017-07-28 15:15:13

标签: arduino

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

1 个答案:

答案 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

}