#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialize the LCD (address 0x27, 16 columns and 2 rows)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin assignments for the 7-segment display
int A = 2; // Segment A
int B = 3; // Segment B
int C = 4; // Segment C
int D = 5; // Segment D
int DP = 6; // Decimal Point
int E = 7; // Segment E
int F = 8; // Segment F
int G = 9; // Segment G
// Button pin for incrementing the displayed digit
int switchUpPin = 10;
int counter = 6; // Start with the default value 6
int buttonUpState = 0;
int lastButtonUpState = 0;
void setup() {
Serial.begin(9600);
// Set pin modes for the 7-segment display
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(DP, OUTPUT);
pinMode(switchUpPin, INPUT);
digitalWrite(DP, HIGH); // DP (Decimal Point) ON by default
// Initialize the LCD and print the default message
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0); // Set the cursor to the first line
lcd.print("WIN the Game"); // Print the game message on the first line
// Display "6" on both the 7-segment and LCD at startup
changeNumber(6); // Display "6" on the 7-segment display
lcd.setCursor(0, 1); // Set the cursor to the second line
lcd.print("Digit: 6"); // Display "Digit: 6" on the second line
}
void loop() {
buttonUpState = digitalRead(switchUpPin);
if (buttonUpState != lastButtonUpState) {
if (buttonUpState == HIGH) {
counter++;
if (counter > 9) {
counter = 0;
}
Serial.println(counter);
changeNumber(counter);
// Print the current number to the second line of the LCD
lcd.setCursor(0, 1); // Set the cursor to the second line
lcd.print("Digit: "); // Display "Digit: "
lcd.print(counter); // Display the current counter value
lcd.print(" "); // Clear any extra digits
delay(300); // Debouncing delay
} else {
Serial.println("OFF");
}
lastButtonUpState = buttonUpState;
}
delay(50); // Minor delay to avoid fast polling
}
void changeNumber(int buttonPress) {
// Set the segments according to the digit to be displayed
switch (buttonPress) {
case 0:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH); // Only G on for "0"
break;
case 1:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH); // Only B and C on for "1"
break;
case 2:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, LOW); // Correct combination for "2"
break;
case 3:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW); // Correct combination for "3"
break;
case 4:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW); // Correct combination for "4"
break;
case 5:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW); // Correct combination for "5"
break;
case 6:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW); // Correct combination for "6"
break;
case 7:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH); // Correct combination for "7"
break;
case 8:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW); // Correct combination for "8"
break;
case 9:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW); // Correct combination for "9"
break;
}
}