I posted the code below for reference. It has a lot of Serial.print there just for my learning and understanding.
// Designate Pin Assignments
const int pinA1 = 2;
const int pinB1 = 3;
const int pinC1 = 4;
const int pinD1 = 5;
const int pinE1 = 6;
const int pinF1 = 7;
const int pinG1 = 8;
const int pinA2 = 9;
const int pinB2 = 10;
const int pinC2 = 11;
const int pinD2 = 12;
//const int pinE2 = A0; Analog pins not integers so written manually
//const int pinF2 = A1; Analog pins not integers so written manually
//const int pinG2 = A2; Analog pins not integers so written manually
//const int jamma = A5; Analog pins not integers so written manually
const int button = 13;
// Initialize Button & Counter States
int counter1 = 0; // Initial value of Digit 1
int counter2 = 0; // Initial value of Digit 2
int buttonState = 0; // Current Button State
int lastButtonState = 0; // Previous Button State
int buttonPressed = 0; // Start of Button Press
int buttonReleased = 0; // End of Button Press
int pressedTime = 0; // Duration of Button Press
int releasedTime = 0; // Duration of Released Button
int long_press = 1000; // Long Press duration
int short_press = 50; // Short Press duration
void setup()
{
Serial.begin(9600);
// Designate Pin Modes
pinMode(pinA1, OUTPUT);
pinMode(pinB1, OUTPUT);
pinMode(pinC1, OUTPUT);
pinMode(pinD1, OUTPUT);
pinMode(pinE1, OUTPUT);
pinMode(pinF1, OUTPUT);
pinMode(pinG1, OUTPUT);
pinMode(pinA2, OUTPUT);
pinMode(pinB2, OUTPUT);
pinMode(pinC2, OUTPUT);
pinMode(pinD2, OUTPUT);
pinMode(A0, OUTPUT); //pinE2
pinMode(A1, OUTPUT); //pinF2
pinMode(A2, OUTPUT); //pinG2
pinMode(button, INPUT_PULLUP);
pinMode(A5, INPUT); //JAMMA pin
// Initially Display 00
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, HIGH);
digitalWrite(pinF1, HIGH);
digitalWrite(pinG1, LOW);
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, HIGH); //pinE2
digitalWrite(A1, HIGH); //pinF2
digitalWrite(A2, LOW); //pinG2
}
// Updated Counter Code with Reset Function - In Progress
void loop()
{
buttonState = digitalRead(button); //Read Initial Button State
if (buttonState != lastButtonState) // Button State has changed
{
//Runs after Button Pressed
if (buttonState == LOW)
{
buttonPressed = millis();
releasedTime = buttonPressed - buttonReleased;
Serial.println("Button Pressed");
}
//Runs after Button Released
if (buttonState == HIGH)
{
buttonReleased = millis();
pressedTime = buttonReleased - buttonPressed;
Serial.println("Button Released");
Serial.print("Press Duration ");
Serial.print(pressedTime);
Serial.println("ms");
if (pressedTime > long_press)
// Reset counter to 00
{
counter1 = 0;
counter2 = 0;
changeNumber1(counter1);
changeNumber2(counter2);
Serial.print("Counter Reset to ");
Serial.print(counter2);
Serial.println(counter1);
//Delaying by 100 ms
//delay(100);
}
if ((pressedTime > short_press) && (pressedTime <long_press))
// Start Counting
{
//Restart Counting after 99
if((counter2 == 9) && (counter1 == 9))
{
counter2 = 0;
counter1 = 0;
}
//Increase the counter 2nd digit
if(counter1 == 9)
{
counter1 = -1;
counter2++;
}
//Increase the counter 1st digit
counter1++;
//Display The Current Number
changeNumber1(counter1);
changeNumber2(counter2);
Serial.print("Counter Incremented to ");
Serial.print(counter2);
Serial.println(counter1);
pinMode(A5, OUTPUT); //JAMMA pin set to output temporarily
Serial.println("Set JAMMA pin to Output");
digitalWrite(A5, LOW); //Pull JAMMA pin to ground
Serial.println("JAMMA pin LOW");
delay(50); //Duration pin is pulled to ground
pinMode(A5, INPUT);
Serial.println("Reset JAMMA pin to Input");
}
//Delay to avoid button bouncing
//delay(100);
}
lastButtonState = buttonState; // Update Button State for the next loop
}
}
//Basic Counter Code without Reset Function - Legacy Code
//void loop()
//{
// if (buttonState != lastButtonState)
// {
// if (buttonState == HIGH)
// {
// //Restart Counting
// if((counter2 == 9) && (counter1 == 9))
// {
// counter2 = 0;
// counter1 = 0;
// }
// if(counter1 == 9)
// {
// counter1 = -1;
// counter2++;
// }
// //Increase the counter by 1
// counter1++;
// //Display The Current Number
// Serial.println(counter1);
// changeNumber1(counter1);
// Serial.println(counter2);
// changeNumber2(counter2);
// //Delaying by 100 ms
// delay(100);
// }
// else
// {
// Serial.println("OFF");
// }
// //Delay to avoid button bouncing
// delay(100);
// lastButtonState = buttonState;
// }
//}
void changeNumber1(int buttonPress)
{
switch(buttonPress)
{
case 0:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, HIGH);
digitalWrite(pinF1, HIGH);
digitalWrite(pinG1, LOW);
break;
case 1:
digitalWrite(pinA1, LOW);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, LOW);
digitalWrite(pinE1, LOW);
digitalWrite(pinF1, LOW);
digitalWrite(pinG1, LOW);
break;
case 2:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, LOW);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, HIGH);
digitalWrite(pinF1, LOW);
digitalWrite(pinG1, HIGH);
break;
case 3:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, LOW);
digitalWrite(pinF1, LOW);
digitalWrite(pinG1, HIGH);
break;
case 4:
digitalWrite(pinA1, LOW);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, LOW);
digitalWrite(pinE1, LOW);
digitalWrite(pinF1, HIGH);
digitalWrite(pinG1, HIGH);
break;
case 5:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, LOW);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, LOW);
digitalWrite(pinF1, HIGH);
digitalWrite(pinG1, HIGH);
break;
case 6:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, LOW);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, HIGH);
digitalWrite(pinF1, HIGH);
digitalWrite(pinG1, HIGH);
break;
case 7:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, LOW);
digitalWrite(pinE1, LOW);
digitalWrite(pinF1, LOW);
digitalWrite(pinG1, LOW);
break;
case 8:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, HIGH);
digitalWrite(pinF1, HIGH);
digitalWrite(pinG1, HIGH);
break;
case 9:
digitalWrite(pinA1, HIGH);
digitalWrite(pinB1, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinD1, HIGH);
digitalWrite(pinE1, LOW);
digitalWrite(pinF1, HIGH);
digitalWrite(pinG1, HIGH);
break;
}
}
void changeNumber2(int buttonPress)
{
switch(buttonPress)
{
case 0:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
break;
case 1:
digitalWrite(pinA2, LOW);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, LOW);
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
break;
case 2:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, LOW);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
break;
case 3:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
break;
case 4:
digitalWrite(pinA2, LOW);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, LOW);
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
break;
case 5:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, LOW);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
break;
case 6:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, LOW);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
break;
case 7:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, LOW);
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
break;
case 8:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
break;
case 9:
digitalWrite(pinA2, HIGH);
digitalWrite(pinB2, HIGH);
digitalWrite(pinC2, HIGH);
digitalWrite(pinD2, HIGH);
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
break;
}
}