Arduino SA
Search…
Digital tube with Traffic Light Experiment
This lesson will use the 74HC595 shift register in combination with the red and green LEDs and the yellow LED to create a traffic light.

Component Required

  • 1 x Uno R3
  • 1 x 830 tie-points breadboard
  • 1 x 1 Digit 7-Segment Display
  • 10 X 220 ohm resistors
  • 20 x M-M wire (Male to Male jumper wire)
  • 1 x Red LED
  • 1 x Yellow LED
  • 1 x Green LED

Component Introduction

Seven segment display

Below is the seven-segment pin diagram.
0-9 ten digits correspond with each segment are as follows (the following table applies common cathode seven segment display device, if you are using a common anode, the table should be replaced every 1 0 0 should all replaced by 1):
Display
dp
a
b
c
d
e
f
g
digital
0
0
1
1
1
1
1
1
0
1
0
0
1
1
0
0
0
0
2
0
1
1
0
1
1
0
1
3
0
1
1
1
1
0
0
1
4
0
0
1
1
0
0
1
1
5
0
1
0
1
1
0
1
1
6
0
1
0
1
1
1
1
1
7
0
1
1
1
0
0
0
0

Connection Diagram:

Wiring schematic:

Physical wiring diagram:

int a = 7;
int b = 6;
int c = 5;
int d = 11;
int e = 10;
int f = 8;
int g = 9;
int ledG = 14;
int ledY = 15;
int ledR = 16;
//Display number 1
void digital_1(void)
{
unsigned char j;
digitalWrite(c, HIGH); //Lower the level of the digital 5 pin and light up segment c
digitalWrite(b, HIGH); //Light section b
for (j = 7; j <= 11; j++) //blanking
digitalWrite(j, LOW);
}
//Display number 2
void digital_2(void)
{
unsigned char j;
digitalWrite(b, HIGH);
digitalWrite(a, HIGH);
for (j = 9; j <= 11; j++)
digitalWrite(j, HIGH);
digitalWrite(c, LOW);
digitalWrite(f, LOW);
}
//Display number 3
void digital_3(void)
{
unsigned char j;
digitalWrite(g, HIGH);
digitalWrite(d, HIGH);
for (j = 5; j <= 7; j++)
digitalWrite(j, HIGH);
digitalWrite(f, LOW);
digitalWrite(e, LOW);
}
//Display number 4
void digital_4(void)
{
digitalWrite(c, HIGH);
digitalWrite(b, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(a, LOW);
digitalWrite(e, LOW);
digitalWrite(d, LOW);
}
//Display number 5
void digital_5(void)
{
unsigned char j;
for (j = 7; j <= 9; j++)
digitalWrite(j, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(b, LOW);
digitalWrite(e, LOW);
}
//Display number 6
void digital_6(void)
{
unsigned char j;
for (j = 7; j <= 11; j++)
digitalWrite(j, HIGH);
digitalWrite(c, HIGH);
digitalWrite(b, LOW);
}
//Display number 7
void digital_7(void)
{
unsigned char j;
for (j = 5; j <= 7; j++)
digitalWrite(j, HIGH);
for (j = 8; j <= 11; j++)
digitalWrite(j, LOW);
}
//Display number 8
void digital_8(void)
{
unsigned char j;
for (j = 5; j <= 11; j++)
digitalWrite(j, HIGH);
}
//Display number 9
void digital_9(void)
{
digitalWrite(c, HIGH);
digitalWrite(b, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(a, HIGH);
digitalWrite(e, LOW);
digitalWrite(d, HIGH);
}
//Pin setting and initialization
void setup()
{
int i;//defined variable
for (i = 5; i <= 16; i++)
pinMode(i, OUTPUT); //Set pins 5 ~ 16 to output mode
}
void loop()
{
while (1)
{
//red light
digitalWrite(ledR, LOW);
digitalWrite(ledY, HIGH);
digitalWrite(ledG, HIGH);
digital_9(); // Show 9
delay(1000); //Delay 1 s
digital_8(); // Show 8
delay(1000); //Delay 1 s
digital_7(); // Show 7
delay(1000); //Delay 1 s
digital_6(); // Show 6
delay(1000); //Delay 1 s
digital_5(); // Show 5
delay(1000); //Delay 1 s
digital_4(); // Show 4
delay(1000); //Delay 1 s
digital_3(); // Show 3
delay(1000); //Delay 1 s
digital_2(); // Show 2
delay(1000); //Delay 1 s
digital_1(); // Show 1
delay(1000); //Delay 1 s
//green light
digitalWrite(ledR, HIGH);
digitalWrite(ledY, HIGH);
digitalWrite(ledG, LOW);
digital_9(); // Show 9
delay(1000); //Delay 1 s
digital_8(); // Show 8
delay(1000); //Delay 1 s
digital_7(); // Show 7
delay(1000); //Delay 1 s
digital_6(); // Show 6
delay(1000); //Delay 1 s
digital_5(); // Show 5
delay(1000); //Delay 1 s
digital_4(); // Show 4
delay(1000); //Delay 1 s
digital_3(); // Show 3
delay(1000); //Delay 1 s
digital_2(); // Show 2
delay(1000); //Delay 1 s
digital_1(); // Show 1
delay(1000); //Delay 1 s
//yellow light
digitalWrite(ledR, HIGH);
digitalWrite(ledY, LOW);
digitalWrite(ledG, HIGH);
digital_3(); // Show 3
delay(1000); //Delay 1 s
digital_2(); // Show 2
delay(1000); //Delay 1 s
digital_1(); // Show 1
delay(1000); //Delay 1 s
}
}
digialtube-traffic-light.ino
4KB
Binary