#include <Keypad.h>
#include <LiquidCrystal.h>
// Define the LCD pins
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //must have 6 I/O pins
// Define the keypad pins
const byte ROWS = 4, COLS = 4; //Total 8 I/O pins
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Define the LED, buzzer, and 7-segment display pins
const int led = 10, buzzer = 10;//1 I/O pins
const int segA = A0, segB = A1, segC = A2, segD = A3, segE = A4, segF = A5, segG = A6; //7 I/O pins
int numDice = 1;
void setup() {
// Initialize the LCD
lcd.begin(16, 2);
lcd.print("Digital Dice");
lcd.setCursor(0, 1);
lcd.print("Num Dice: 1");
// Initialize the LED and buzzer pins
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
// Initialize the 7-segment display pins
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
}
void loop() {
// Check for keypad input
char key = keypad.getKey();
if (key != NO_KEY) {
if (key == 'A') {
numDice = 1;
lcd.clear();
lcd.print("Digital Dice");
lcd.setCursor(0, 1);
lcd.print("Num Dice: 1");
} else if (key == 'B') {
numDice = 2;
lcd.clear();
lcd.print("Digital Dice");
lcd.setCursor(0, 1);
lcd.print("Num Dice: 2");
} else if (key == 'C') {
numDice = 3;
lcd.clear();
lcd.print("Digital Dice");
lcd.setCursor(0, 1);
lcd.print("Num Dice: 3");
} else if (key == 'D') {
rollDice();
}
}
}
void rollDice() {
int totalValue = 0;
for (int i = 0; i < numDice; i++) {
int value = random(1, 7);
displaySegment(value);
totalValue += value;
tone(buzzer, 1000); // Play a tone on the buzzer
digitalWrite(led, HIGH); // Turn on the LED
delay(200);
noTone(buzzer); // Stop the tone
digitalWrite(led, LOW); // Turn off the LED
delay(500);
}
lcd.clear();
lcd.print("Total Value:");
lcd.setCursor(0, 1);
lcd.print(totalValue);
delay(2000);
lcd.clear();
lcd.print("Digital Dice");
lcd.setCursor(0, 1);
lcd.print("Num Dice: ");
lcd.print(numDice);
}
void displaySegment(int value) {
if(value==1){
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
}else if (value==2){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
}else if (value==3){
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
}else if (value==4){
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}else if (value==5){
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}else if (value==6){
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}
}