I’m new to electronics and Arduino and trying to learn by doing. So I’m attempting a 7 segment LED and 74hc595 shift register countdown project from this site: Arduino 7 segment LED timer with 74HC595 module - Geeetech using the code below. I’m using a 4 digit 7 segment display (http://www.mouser.com/Search/ProductDetail.aspx?R=HDSP-B03Evirtualkey63050000virtualkey630-HDSP-B03E) but I think I messed up the pin connections from the shift registers to the LED. Instead of a countdown I get two dashes, then two E’s, and then a succession of other nonsense. According to the LED datasheet pin 1 is for E, 2 for D, 3 for DP, 4 for C, 5 for G, 7 for B, 10 for F, and 11 for A. I can provide more info if needed. Any help troubleshooting this would be greatly appreciated.
/*
Using 2 7-segment displays with the 74HC595 shift registers
CC by-sa-nc 3.0
http://tronixstuff.wordpress.com
*/
int latchpin = 8; // connect to pin 12 on the '595
int clockpin = 12; // connect to pin 11 on the '595
int datapin = 11; // connect to pin 14 on the '595
float b = 0;
int c = 0;
float d = 0;
int e = 0;
int speed = 300; // used to control speed of counting
int segdisp[10] = {
3,159,37,13,153,73,65,27,1,9 };
void setup()
{
pinMode(latchpin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(datapin, OUTPUT);
}
void loop()
{
// Count up
for (int z=0; z<100; z++)
{
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the right display
shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the left display
digitalWrite(latchpin, HIGH);
if (z<10)
{
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, LSBFIRST, segdisp[z]); // sends the digit down the serial path
shiftOut(datapin, clockpin, LSBFIRST, 255); // sends a blank down the serial path to push the digit to the right
digitalWrite(latchpin, HIGH);
}
else if (z>=10)
{
d=z%10; // find the remainder of dividing z by 10, this will be the right-hand digit
c=int(d); // make it an integer, c is the right hand digit
b=z/10; // divide z by 10 - the whole number value will be the left-hand digit
e = int(b); // e is the left hand digit
digitalWrite(latchpin, LOW); // send the digits down to the shift registers!
shiftOut(datapin, clockpin, LSBFIRST, segdisp[c]);
shiftOut(datapin, clockpin, LSBFIRST, segdisp[e]);
digitalWrite(latchpin, HIGH);
}
delay(speed);
}
delay(2000);
// Count down
for (int z=99; z>=0; z--)
{
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the right display
shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the left display
digitalWrite(latchpin, HIGH);
if (z<10)
{
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, LSBFIRST, segdisp[z]); // sends the digit down the serial path
shiftOut(datapin, clockpin, LSBFIRST, 255); // sends a blank down the serial path to push the digit to the right
digitalWrite(latchpin, HIGH);
}
else if (z>=10)
{
d=z%10; // find the remainder of dividing z by 10, this will be the right-hand digit
c=int(d); // make it an integer, c is the right hand digit
b=z/10; // divide z by 10 - the whole number value will be the left-hand digit
e = int(b); // e is the left hand digit
digitalWrite(latchpin, LOW); // send the digits down to the shift registers!
shiftOut(datapin, clockpin, LSBFIRST, segdisp[c]);
shiftOut(datapin, clockpin, LSBFIRST, segdisp[e]);
digitalWrite(latchpin, HIGH);
}
delay(speed);
}
delay(2000);
}