Go Down

### Topic: Controlling 5 digit 7 segment display (Read 583 times)previous topic - next topic

#### leventeincze

##### Feb 17, 2012, 10:30 am
Hi! I made a program using this tutorial: http://tronixstuff.wordpress.com/2010/05/14/getting-started-with-arduino-chapter-six/.
Using analog read is working good, but after changing this with an algoritm using debounce, to count the number of impulses under x time, it displays only the last digit, and only if serial is started, but in serial monitor I can see the whole number.So please help me! This is my code:
#include <Bounce.h>
#define BUTTON 7
Bounce bouncer = Bounce( BUTTON,50 );

int j=0;

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
int k = 0;
int lhd = 0;
int mhd = 0;
int mhd2 = 0;
int mhd3 = 0;
int rhd = 0;
float a = 0;
int b = 0;
int c= 0;
int d = 0;
int e=0;
int g=0;
int f=0;
int h=0;

int segdisp[10] = {
252,96,202,242,38,182,190,224,254,246}; // base 10 equivalents for digits 0~9
int posdisp[5] = {
1,2,4,8,16}; // base 10 equivalents to close cathodes on display 0~3 on module

void setup()
{
pinMode(latchpin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(datapin, OUTPUT);
pinMode(BUTTON, INPUT);
Serial.begin(9600);
}

void cleardisplay()
// turns off all segments of all digits
{
for (int aa=0; aa<5; aa++)
{
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, MSBFIRST, posdisp[aa]); // sets the digit to address
shiftOut(datapin, clockpin, MSBFIRST, 0); // clears the digit
digitalWrite(latchpin, HIGH);
}
}

void digitdisplay(int digit, int location)
// displays "digit" on display "location" 0~3
{
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, MSBFIRST, posdisp[location]); // sets the digit to address
shiftOut(datapin, clockpin, MSBFIRST, segdisp[digit]); // clears the digit
digitalWrite(latchpin, HIGH);
}

void digitpointdisplay(int digit, int location)
// displays "digit" on display "location" 0~3 with the decimal point
{
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, MSBFIRST, posdisp[location]); // sets the digit to address
shiftOut(datapin, clockpin, MSBFIRST, segdisp[digit]+1); // clears the digit
digitalWrite(latchpin, HIGH);
}

void onedigitnumber(int subject)
// displays a one-digit number on the display module with leading zeroes
{
cleardisplay();
{
digitdisplay(0,0);
digitdisplay(0,1);
digitdisplay(0,2);
digitdisplay(0,3);
}
digitdisplay(subject,4);
}

void twodigitnumber(int subject)
// displays a two-digit number on the display module with leading zeroes
{
cleardisplay();
rhd = subject % 10;
a = subject/10;
lhd = int(a);
{
digitdisplay(0,0);
digitdisplay(0,1);
digitdisplay(0,2);
}
digitdisplay(lhd,3);
digitdisplay(rhd,4);
}

void threedigitnumber(int subject)
// displays a three-digit number on the display module with leading zeroes
{
cleardisplay();
a = subject/100;
lhd = int(a);
a = subject/10;
b = int(a);
mhd = b % 10;
b=subject%100;
rhd=b%10;
{
digitdisplay(0,0);
digitdisplay(0,1);
}
digitdisplay(lhd,2);
digitdisplay(mhd,3);
digitdisplay(rhd,4);
}

void fourdigitnumber(int subject)
// displays a four-digit number on the display module with leading zeros
{
cleardisplay();
a = subject/1000;
lhd = int(a);
b=lhd*1000;
c=subject-b;
a = c/100;
mhd = int(a);
a = c/10;
b = int(a);
mhd2 = b % 10;
b=subject%1000;
c=b%100;
rhd=c%10;
{
digitdisplay(0,0);

}
digitdisplay(lhd,1);
digitdisplay(mhd,2);
digitdisplay(mhd2,3);
digitdisplay(rhd,4);
}
void fivedigitnumber(int subject)
// displays a four-digit number on the display module with leading zeros
{
cleardisplay();
a = subject/10000;
lhd = int(a);
b=lhd*10000;
c=subject-b;
d = c/1000;
mhd = int(d);
b=mhd*1000;
e=a*10000;
f=b+e;
c=subject-f;
e = c/100;
mhd2 = int(e);
a=lhd*10000;
b=mhd*1000;
e=mhd2*100;
g=a+b;
h=g+e;
b=subject-h;
e = b / 10;
mhd3=int(e);
a=lhd*10000;
b=mhd*1000;
c=mhd2*100;
d=mhd3*10;
rhd=subject-a-b-c-d;
digitdisplay(lhd,0);
digitdisplay(mhd,1);
digitdisplay(mhd2,2);
digitdisplay(mhd3,3);
digitdisplay(rhd,4);
}

void displaynumber(int rawnumber)
// takes an integer and displays it on our 4-digit LED display module
{
if (rawnumber>=0 && rawnumber<10)
{
onedigitnumber(rawnumber);
}
else if (rawnumber>=10 && rawnumber<100)
{
twodigitnumber(rawnumber);
}
else if (rawnumber>=100 && rawnumber<1000)
{
threedigitnumber(rawnumber);
}
else if (rawnumber>=1000 && rawnumber<10000)
{
fourdigitnumber(rawnumber);
}
else if (rawnumber>=10000)
{
fivedigitnumber(rawnumber);
}
}

void loop()
{

for(int x=0; x<=1000;x++)
{
bouncer.update();

if(bouncer.risingEdge())
{

j++;

}

Serial.println(j);

}

k=j;
Serial.print("j=");
Serial.println(k);
displaynumber(k);
j=0;
}

Go Up

Please enter a valid email to subscribe