Dragos Spiridon
Dragos Spiridon

Reputation: 61

Can't get time right with arduino?

I have a small 7 segment led display and I wondered if I could get it to show me the last digit of the minute. Downloaded the Time library for Arduino and I tried several methods, with switch case and if else if, but all give the same result, the LED display shows only 0... Could you pinpoint what I did wrong?

#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);
    }





}    

Upvotes: 0

Views: 70

Answers (2)

Plochie
Plochie

Reputation: 4117

You haven't added low conditions hence when the pin is going high it is remaining high. Also, I have checked and I think that your wiring is not correct. I'm posting complete code below and connections accordingly.

CONNECTIONS FOR 7 SEG

#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);   
    }
}

Upvotes: 0

Elan Hamburger
Elan Hamburger

Reputation: 2177

You never write any of the pins to go low. When the next minute hits, the proper LEDS are probably turning on, but the old ones don't go off, so you don't see any change.

To avoid turning all the LEDS off and on again every cycle, I would store the last known digit and at each loop iteration, see if the digit has changed. If it has, turn off all of the lights and then run the code you posted here.

Upvotes: 1

Related Questions