#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define buttonPin 15
#define dice 14
#define resett 15
#define trigPin 10
#define echoPin 11
char digit[6] = {0x02, 0x79, 0x24, 0x30, 0x19, 0x12};
int pin[7] = {6, 5, 4, 3, 2, 1, 0};
Servo myservo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void checkDistance();
void setup()
{
lcd.begin(16, 2);
lcd.print("Please Push");
lcd.setCursor(0, 1);
lcd.print("The Button");
myservo.attach(8);
for (int i = 0; i < 7; i++)
pinMode(pin[i], OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(dice, INPUT);
pinMode(resett, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
int temp = 0x40;
for (int i = 0; i < 7; i++)
{
int temp1 = temp & 0x01;
digitalWrite(pin[i], temp1);
temp = temp >> 1;
}
delay(10000);
lcd.clear();
}
void loop()
{
static bool buttonState = HIGH;
static bool lastButtonState = HIGH;
static unsigned long lastDebounceTime = 0;
static unsigned long debounceDelay = 50;
int reading = digitalRead(buttonPin);
if (reading != lastButtonState)
{
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay)
{
if (reading != buttonState)
{
buttonState = reading;
if (buttonState == LOW)
{
int temp = rand();
int k = temp % 6;
temp = digit[k];
wait();
for (int i = 0; i < 7; i++)
{
int temp1 = temp & 0x01;
digitalWrite(pin[i], temp1);
temp = temp >> 1;
}
delay(200);
openServo();
}
}
}
checkDistance();
lastButtonState = reading;
}
void wait()
{
for (int m = 0; m < 10; m++)
{
for (int k = 0; k < 6; k++)
{
int ch = digit[k];
for (int l = 0; l < 7; l++)
{
char tem2 = ch & 0x01;
digitalWrite(pin[l], tem2);
ch = ch >> 1;
}
delay(50);
}
}
}
void openServo()
{
myservo.write(0);
delay(1000);
myservo.write(90);
}
void checkDistance()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
int servoAngle = map(distance, 2, 400, 0, 180);
myservo.write(servoAngle);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
delay(500);
}