'Why is digitalWrite(a,LOW); not working on 7 Segment LED?

int a = 3;
int b = 4;
int c = 7;
int d = 6;
int e = 5;
int f = 2;
int g = 1;
void setup(){
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
}
void loop(){
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(g, LOW);
digitalWrite(e, LOW);
delay(1000);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(g, HIGH);
digitalWrite(e, HIGH);
}

I'm using a 7 segment LED. Basically I want to display numbers 1-5 with a 1 second interval, however it seems that digitalWrite LOW doesn't work. It does not stop outputting.



Solution 1:[1]

When Arduino reaches the end of loop(), it immediately calls loop() again. There is no delay between the calls. Hence, the values of the first group of digitalWrite() will quickly override the values of the second group. You will only be able to see the first values on the display. If you want to see the second group, you should put a delay(1000) after it.

To display numbers 1-5 with a 1-second interval, you could write something like:

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

void setup()
{
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}

void loop()
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);

  delay(1000);

  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);

  delay(1000);

  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);

  delay(1000);

  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);

  delay(1000);

  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);

  delay(1000);
}

The following code is a more efficient way of doing the same thing:

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

void display(bool a_val, bool b_val, bool c_val, bool d_val, bool e_val, bool f_val, bool g_val)
{
  digitalWrite(a, a_val);
  digitalWrite(b, b_val);
  digitalWrite(c, c_val);
  digitalWrite(d, d_val);
  digitalWrite(e, e_val);
  digitalWrite(f, f_val);
  digitalWrite(g, g_val);
  delay(1000);
}

void setup()
{
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}

void loop()
{
  display(LOW,  HIGH, HIGH, LOW,  LOW,  LOW,  LOW);
  display(HIGH, HIGH, LOW,  HIGH, HIGH, LOW,  HIGH);
  display(HIGH, HIGH, HIGH, HIGH, LOW,  LOW,  HIGH);
  display(LOW,  HIGH, HIGH, LOW,  LOW,  HIGH, HIGH);
  display(HIGH, LOW,  HIGH, HIGH, LOW,  HIGH, HIGH);
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 LucasJ