Hello!
New to the forum.. and kind of new to the Arduino lilypad. I have a question about how to physically (and in programing) connect this 4-digit, 7-segment multiplex LED to my lilypad. I'm including the link to the datasheet for the led.. which has 8 anodes (one for each number forming segment and the decimal point) and 4 cathodes (to select which digit or combination of digits to activate to the display). How does one connect the cathodes (negative) to the arduino board so that one can selectively activate or deactivate them?
Any help would be much appreciated!! Thanks!
Here's the link to the led:
http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&storeId=10001&catalogId=10001&pa=308232&productId=308232&keyCode=WSF
And, my code for counting up across all four digits:
int ledPin2;
int ledPin3;
int ledPin4;
int ledPin5;
int ledPin6;
int ledPin7;
int ledPin8;
int ledPin9;
int ledPin10;
int ledPin11;
int ledPin12;
int FlexValue; //outgoing ADC Value
int SwallowNum1; // running count of the number of times the wearer has swallowed
int SwallowNum2; // second digit, tens
int SwallowNum3; //third digit, hundreds
int SwallowNum4; //fourth digit, thousands
int x = 500;
void setup()
{
pinMode(ledPin2, OUTPUT); // sets the digital pins as outputs, Pin 2 = led pin 11 (anode)
pinMode(ledPin3, OUTPUT); //pin 3 = led pin 7 (anode)
pinMode(ledPin4, OUTPUT); //pin 4 = led pin 4 (anode)
pinMode(ledPin5, OUTPUT); //pin 5 = led pin 2 (anode)
pinMode(ledPin6, OUTPUT); //pin 6 = led pin 1 (anode)
pinMode(ledPin7, OUTPUT); //pin 7 = led pin10 (anode)
pinMode(ledPin8, OUTPUT); //pin 8 = led pin 5 (anode)
pinMode(ledPin9, OUTPUT); //pin 9 = led pin 6 (cathode)
pinMode(ledPin10, OUTPUT); //pin 10 = led pin 8 (cathode)
pinMode(ledPin11, OUTPUT); //pin 11 = led pin 9 (cathode)
pinMode(ledPin12, OUTPUT); //pin 12 = led pin 12 (cathode)
SwallowNum1 = 0;
SwallowNum2 = 0;
SwallowNum3 = 0;
SwallowNum4 = 0;
}
void loop()
{
if (SwallowNum1==0 && SwallowNum2==0 && SwallowNum3==0 && SwallowNum4==0)
{
digitalWrite(2, HIGH); // number 0 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
}
//Read flex sensor input
FlexValue = analogRead(0);
if (FlexValue > x || FlexValue == x)
{
delay (10);
}
if (FlexValue < x)
{ SwallowNum1 ++; //increases swallowNum by 1 when flexValue exceeds threshold
if (SwallowNum1 > 9)
{ SwallowNum2 ++;
SwallowNum1 = 0;
if (SwallowNum2 > 9)
{SwallowNum3 ++;
SwallowNum2 = 0;
if (SwallowNum3 > 9)
{SwallowNum4 ++;
SwallowNum3 = 0;}}}}
if (SwallowNum1 == 1)
{
digitalWrite(2, LOW); // number 0 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(12, LOW) ;
digitalWrite(3, HIGH); // number 1 on
digitalWrite(4, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 2)
{
digitalWrite(3, LOW); // number 1 off
digitalWrite(4, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 2 on
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 3)
{
digitalWrite(2, LOW); // number 2 off
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 3 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 4)
{
digitalWrite(2, LOW); // number 3 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(3, HIGH); // number 4 on
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 5)
{
digitalWrite(3, LOW); // number 4 off
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 5 on
digitalWrite(8, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 6)
{
digitalWrite(2, LOW); // number 5 off
digitalWrite(8, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite (12, LOW);
digitalWrite(6, HIGH); // number 6 on
digitalWrite(8, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 7)
{
digitalWrite(6, LOW); // number 6 off
digitalWrite(8, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 7 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 8)
{
digitalWrite(2, LOW); // number 7 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 8 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum1 == 9)
{
digitalWrite(2, LOW); // number 8 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 9 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 1)
{
digitalWrite(2, LOW); // number 0 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(12, LOW) ;
digitalWrite(3, HIGH); // number 1 on
digitalWrite(4, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 2)
{
digitalWrite(3, LOW); // number 1 off
digitalWrite(4, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 2 on
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 3)
{
digitalWrite(2, LOW); // number 2 off
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 3 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 4)
{
digitalWrite(2, LOW); // number 3 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(3, HIGH); // number 4 on
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 5)
{
digitalWrite(3, LOW); // number 4 off
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 5 on
digitalWrite(8, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 6)
{
digitalWrite(2, LOW); // number 5 off
digitalWrite(8, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite (12, LOW);
digitalWrite(6, HIGH); // number 6 on
digitalWrite(8, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 7)
{
digitalWrite(6, LOW); // number 6 off
digitalWrite(8, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 7 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 8)
{
digitalWrite(2, LOW); // number 7 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 8 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum2 == 9)
{
digitalWrite(2, LOW); // number 8 off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite (12, LOW);
digitalWrite(2, HIGH); // number 9 on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite (12, HIGH);
}
if (SwallowNum3 == 1)
{
digitalWrite(2, LOW); // number 0 off
digitalWrite(3, LOW);
digitalWrite(4,
There is a law in computing that says if you find yourself writing the same lines of code over and over there is a much shorter way of writing the code.
Just a hint.
Hi Mike,
Thanks.. yeah.. I figured.. I'm just doing it the way I know for now.
Do you have any hints for my cathode connection question?
How does one connect the cathodes (negative) to the arduino board
The data sheet shows this is a common cathode device.
The cathode should go to the positive supply with the anodes to the negative through a resistor. So connect the anodes to an output pin via a resistor. As the cathode is carrying the current for seven LEDs then it could possibly carry more current than an output pin could supply alone (40mA) so you have to power that through a transistor or FET. If you restricted the LED current to 5mA per segment (600R resistor) then you could connect it directly to the output.
The cathode should go to the positive supply
Are you sure on this ? I thought it was the Anode on an LED that went to Postive (+5V) - the cathode ('K' looking on the diagram) on a LED going to ground.
Like this ....
Yes your right sorry I always get those mixed up because I am a physicist and the solid state view of an LED is more in line with a reverse biased diode.
So in my post above for + read -.
Therefore for common -ve you have to pull it down through a transistor.