Code
#define BUTTON_PIN D9 // Push button connected to D9
#define LED_PINS {D0, D1, D2, D3, D4, D5, D6, D7, D8} // LEDs connected to D0 to D8
int ledPins[] = LED_PINS;
int buttonState = 0;
int lastButtonState = 0;
unsigned long lastPressTime = 0; // To track the last press time
const unsigned long debounceDelay = 3000; // 3-second delay between button presses
// Function prototypes
void showWelcomeMessage();
void clearLEDs();
void playAnimation();
void rollDice();
void displayDice(int roll);
void setup() {
// Initialize the LED pins as outputs
for (int i = 0; i < 9; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Initialize the button pin as input
pinMode(BUTTON_PIN, INPUT_PULLUP); // Use pull-up resistor for the button
// Show welcome message "Hello" on power-up
showWelcomeMessage();
}
void loop() {
// Read the button state
buttonState = digitalRead(BUTTON_PIN);
// Check if button is pressed and enough time has passed since last press
if (buttonState == LOW && lastButtonState == HIGH && (millis() - lastPressTime) > debounceDelay) {
// Button pressed, run the dice roll sequence with animation
playAnimation();
rollDice();
lastPressTime = millis(); // Update the last press time
delay(200); // Debounce delay for button press
}
lastButtonState = buttonState;
}
void showWelcomeMessage() {
// Display "H" using LEDs: D8, D3, D2, D6, D5, D0, D4
clearLEDs();
digitalWrite(D8, HIGH);
digitalWrite(D3, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D6, HIGH);
digitalWrite(D5, HIGH);
digitalWrite(D0, HIGH);
digitalWrite(D4, HIGH);
delay(1000); // Display "H" for 1000 ms
clearLEDs();
// Display "E" using LEDs: D8, D7, D6, D3, D4, D1, D2, D0
digitalWrite(D8, HIGH);
digitalWrite(D7, HIGH);
digitalWrite(D6, HIGH);
digitalWrite(D3, HIGH);
digitalWrite(D4, HIGH);
digitalWrite(D1, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D0, HIGH);
delay(500); // Display "E" for 500 ms
clearLEDs();
// Display "L" using LEDs: D0, D1, D2, D3, D8
digitalWrite(D0, HIGH);
digitalWrite(D1, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D3, HIGH);
digitalWrite(D8, HIGH);
delay(500); // Display "L" for 500 ms
clearLEDs();
// Display "O" using LEDs: D0, D1, D2, D3, D5, D6, D7, D8
digitalWrite(D0, HIGH);
digitalWrite(D1, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D3, HIGH);
digitalWrite(D5, HIGH);
digitalWrite(D6, HIGH);
digitalWrite(D7, HIGH);
digitalWrite(D8, HIGH);
delay(500); // Display "O" for 500 ms
clearLEDs();
}
void clearLEDs() {
// Turn off all LEDs
for (int i = 0; i < 9; i++) {
digitalWrite(ledPins[i], LOW);
}
}
void playAnimation() {
// Simple animation before showing dice result
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
digitalWrite(ledPins[j], HIGH);
delay(50);
digitalWrite(ledPins[j], LOW);
}
}
}
void rollDice() {
int roll = random(1, 7); // Get a random number between 1 and 6
displayDice(roll);
}
void displayDice(int roll) {
clearLEDs(); // Clear LEDs before displaying the dice face
// Display the dice number on the LEDs
switch (roll) {
case 1:
digitalWrite(ledPins[4], HIGH); // Center LED for 1
break;
case 2:
digitalWrite(ledPins[2], HIGH); // Top-left LED for 2
digitalWrite(ledPins[6], HIGH); // Bottom-right LED for 2
break;
case 3:
digitalWrite(ledPins[2], HIGH); // Top-left LED for 3
digitalWrite(ledPins[4], HIGH); // Center LED for 3
digitalWrite(ledPins[6], HIGH); // Bottom-right LED for 3
break;
case 4:
digitalWrite(ledPins[2], HIGH); // Top-left LED for 4
digitalWrite(ledPins[6], HIGH); // Bottom-right LED for 4
digitalWrite(ledPins[0], HIGH); // Top-right LED for 4
digitalWrite(ledPins[8], HIGH); // Bottom-left LED for 4
break;
case 5:
digitalWrite(ledPins[2], HIGH); // Top-left LED for 5
digitalWrite(ledPins[6], HIGH); // Bottom-right LED for 5
digitalWrite(ledPins[4], HIGH); // Center LED for 5
digitalWrite(ledPins[0], HIGH); // Top-right LED for 5
digitalWrite(ledPins[8], HIGH); // Bottom-left LED for 5
break;
case 6:
digitalWrite(ledPins[0], HIGH); // Top-right LED for 6
digitalWrite(ledPins[2], HIGH); // Top-left LED for 6
digitalWrite(ledPins[6], HIGH); // Bottom-right LED for 6
digitalWrite(ledPins[8], HIGH); // Bottom-left LED for 6
digitalWrite(ledPins[1], HIGH); // Middle-top LED for 6
digitalWrite(ledPins[7], HIGH); // Middle-bottom LED for 6
break;
}
}
Circuit diagram 👇🏻👇🏻👇🏻

0 Comments