I'm new in the Arduino world and I want to make a counter with two common anode 7-segment displays. The wiring for the pushbutton I'm using is with pull-up resistors. The wiring I'm using is shown in the images. The wiring is fine, no problem with that, but I need help with the programming.
For this program, I used the code from section 5.3 of the Arduino Cookbook for the debounce function and the code from secction 7.11 of the same Cookbook. Everything went fine, the project can count from 00 to 99, but I wanted to count with every push, but it only counts when I press the button for certain time. I want that if I press the button, no matter how long, it only counts one time. If I press the button 5 times, it counts five times, no matter how fast I push the button. I've been trying a lot with the code, but I can't seem to make it right. I will really appreaciate the help. The code I'm using is below:
/*
- SevenSegmentMpx sketch
- Shows numbers ranging from 0 through 99 on a two-digit display
*/
// bits representing segments A through G (and decimal point) for numerals 0-9
int value = 0;
const int inputPin = 12; // the number of the input pin
const int ledPin = 13; // the number of the output pin
const int debounceDelay = 100;
const int numeral[10] = {
//ABCDEFG /dp
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B00111110, // 6
B11100000, // 7
B11111110, // 8
B11100110, // 9
};
// pins for decimal point and each segment
// dp,G,F,E,D,C,B,A
const int segmentPins[] = { 4,7,8,6,5,3,2,9};
const int nbrDigits= 2; // the number of digits in the LED display
//dig 1 2 3 4
const int digitPins[nbrDigits] = {10, 11};
boolean debounce(int pin)
{
boolean state;
boolean previousState;
previousState = digitalRead(pin); // store switch state
for(int counter=0; counter < debounceDelay; counter++)
{
delay(1); // wait for 1 millisecond
state = digitalRead(pin); // read the pin
if( state != previousState)
{
counter = 0; // reset the counter if the state changes
previousState = state; // and save the current state
}
}
// here when the switch state has been stable longer than the debounce period
if(state == LOW) // LOW means pressed (because pull-ups are used)
return true;
else
return false;
return state;
}
void setup()
{
for(int i=0; i < 8; i++)
pinMode(segmentPins*, OUTPUT); // set segment and DP pins to output*
for(int i=0; i < nbrDigits; i++)
pinMode(digitPins*, OUTPUT);*
pinMode(inputPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
//int value = analogRead(0);
if ( digitalRead(12) == LOW)
{
* if(debounce(inputPin))*
* {*
* value = value++;*
* }*
* while(digitalRead(12)==HIGH){*
* showNumber(value);*
* }*
}
showNumber(value);
}
void showNumber( int number)
{
if(number == 0)
showDigit( 0, nbrDigits-1) ; // display 0 in the rightmost digit
else
{
// display the value corresponding to each digit
// leftmost digit is 0, rightmost is one less than the number of places
for( int digit = nbrDigits-1; digit >= 0; digit--)
{
if(number > 0)
{
showDigit( number % 10, digit) ;
number = number / 10;
}
}
}
}
// Displays given number on a 7-segment display at the given digit position
void showDigit( int number, int digit)
{
* delay(5);*
* digitalWrite( digitPins[digit], HIGH );*
* for(int segment = 1; segment < 8; segment++)*
* {*
* boolean isBitSet = bitRead(numeral[number], segment);*
* // isBitSet will be true if given bit is 1*
* isBitSet = ! isBitSet; // remove this line if common cathode display*
* digitalWrite( segmentPins[segment], isBitSet);*
* }*
* delay(5);*
* digitalWrite( digitPins[digit], LOW );*
}


