不能用 arduino 安排好时间?

Can't get time right with arduino?

我有一个小型 7 段 LED 显示屏,我想知道是否可以让它显示分钟的最后一位数字。下载了 Arduino 的时间库,我尝试了几种方法,使用 switch case 和 if else if,但都给出相同的结果,LED 显示屏只显示 0...你能指出我做错了什么吗?

#include <Time.h>
#include <TimeLib.h>

int led1=2;
int led2=3;
int led3=4;
int led4=5;
int led5=6;
int led6=7;
int led7=8;
int led8=9;

void setup() {

  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
  pinMode(led7,OUTPUT);
  pinMode(led8,OUTPUT);

}

void loop(){
  time_t t=minute();
  int digit1=t%10;


  if(digit1==1){
    digitalWrite(led5, HIGH);
    digitalWrite(led3, HIGH);
    }else if(digit1==2)

    {
    digitalWrite(led6, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    } else if(digit1==3)

    {
    digitalWrite(led4, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led2, HIGH);
    }else if(digit1==4)

    {
    digitalWrite(led4, HIGH);
    digitalWrite(led7, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led3, HIGH);
    }else if(digit1==5)

    {
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led2, HIGH);
    }else if(digit1==6)

    {
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    }else if(digit1==7)

    {
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led3, HIGH);
    }else if(digit1==8)

    {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    }else if(digit1==9)

    {
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    }else if(digit1==0)

    {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    }





}    

您永远不会将任何引脚写为低电平。当下一分钟到来时,正确的 LED 灯可能会亮起,但旧的 LED 灯不会熄灭,因此您看不到任何变化。

为了避免每个循环都关闭和再次打开所有 LED,我会存储最后一个已知数字,并在每次循环迭代时查看数字是否已更改。如果有,请关闭所有灯,然后 运行 您在此处发布的代码。

您没有添加低电平条件,因此当引脚变高时它保持高电平。另外,我已经检查过,我认为你的接线不正确。我在下面发布了完整的代码和相应的连接。

#include <Time.h>
#include <TimeLib.h>

int a  = 2;
int b  = 3;
int c  = 4;
int d  = 5;
int e  = 6;
int f  = 7;
int g  = 8;
int dp = 9;

void setup() {
    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    pinMode(led4,OUTPUT);
    pinMode(led5,OUTPUT);
    pinMode(led6,OUTPUT);
    pinMode(led7,OUTPUT);
    pinMode(led8,OUTPUT);
}

void loop(){
    time_t t=minute();
    int digit1=t%10;


    if(digit1==0) {
        digitalWrite(a, HIGH);
        digitalWrite(b, HIGH);
        digitalWrite(c, HIGH);
        digitalWrite(d, HIGH);
        digitalWrite(e, HIGH);
        digitalWrite(f, HIGH);
        digitalWrite(g, LOW);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==1) {
        digitalWrite(a, LOW);
        digitalWrite(b, HIGH);
        digitalWrite(c, HIGH);
        digitalWrite(d, LOW);
        digitalWrite(e, LOW);
        digitalWrite(f, LOW);
        digitalWrite(g, LOW);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==2) {
        digitalWrite(a, HIGH);
        digitalWrite(b, HIGH);
        digitalWrite(c, LOW);
        digitalWrite(d, HIGH);
        digitalWrite(e, HIGH);
        digitalWrite(f, LOW);
        digitalWrite(g, HIGH);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==3) {
        digitalWrite(a, HIGH);
        digitalWrite(b, HIGH);
        digitalWrite(c, HIGH);
        digitalWrite(d, HIGH);
        digitalWrite(e, LOW);
        digitalWrite(f, LOW);
        digitalWrite(g, HIGH);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==4) {
        digitalWrite(a, LOW);
        digitalWrite(b, HIGH);
        digitalWrite(c, HIGH);
        digitalWrite(d, LOW);
        digitalWrite(e, LOW);
        digitalWrite(f, HIGH);
        digitalWrite(g, HIGH);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==5) {
        digitalWrite(a, HIGH);
        digitalWrite(b, LOW);
        digitalWrite(c, HIGH);
        digitalWrite(d, HIGH);
        digitalWrite(e, LOW);
        digitalWrite(f, HIGH);
        digitalWrite(g, HIGH);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==6) {
        digitalWrite(a, LOW);
        digitalWrite(b, LOW);
        digitalWrite(c, HIGH);
        digitalWrite(d, HIGH);
        digitalWrite(e, HIGH);
        digitalWrite(f, HIGH);
        digitalWrite(g, HIGH);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==7) {
        digitalWrite(a, HIGH);
        digitalWrite(b, HIGH);
        digitalWrite(c, HIGH);
        digitalWrite(d, LOW);
        digitalWrite(e, LOW);
        digitalWrite(f, LOW);
        digitalWrite(g, LOW);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==8) {
        digitalWrite(a, HIGH);
        digitalWrite(b, HIGH);
        digitalWrite(c, HIGH);
        digitalWrite(d, HIGH);
        digitalWrite(e, HIGH);
        digitalWrite(f, HIGH);
        digitalWrite(g, HIGH);
        digitalWrite(dp, LOW);   
    }

    else if(digit1==9) {
        digitalWrite(a, HIGH);
        digitalWrite(b, HIGH);
        digitalWrite(c, HIGH);
        digitalWrite(d, HIGH);
        digitalWrite(e, LOW);
        digitalWrite(f, HIGH);
        digitalWrite(g, HIGH);
        digitalWrite(dp, LOW);   
    }
}