#include <LiquidCrystal.h>
const int buttonPin = 8;
LiquidCrystal lcdOne(22, 23, 4, 5, 6, 7);
LiquidCrystal lcdTwo(24, 25, 10, 11, 12, 13);
LiquidCrystal lcdThree(14, 15, 16, 17, 18, 19);
bool lcdOneCorrect = false;
bool lcdTwoCorrect = false;
bool lcdThreeCorrect = false;
bool allCorrect = false;
int buttonState = LOW;
int lastButtonState = LOW;
unsigned long lastTapTime = 0;
int tapCount = 0;
bool flag = true;
int targetSequence[] = {4,1,0};
int currentPosition = 0;
int randomNumOne, randomNumTwo, randomNumThree;
double moneyCount = 50;
void setup() {
Serial.begin(9600);
Serial.print("£");
Serial.println(moneyCount);
randomSeed(analogRead(A0));
pinMode(buttonPin, INPUT);
lcdOne.begin(16, 2);
lcdTwo.begin(16, 2);
lcdThree.begin(16, 2);
}
void loop() {
buttonState = digitalRead(buttonPin);
if(allCorrect == false){
if(buttonState == HIGH && flag == true && tapCount != 7){
singleClick();
delay(50);
flag = false;
checkSequence(randomNumOne, randomNumTwo, randomNumThree);
}
if(buttonState == LOW){
flag = true;
delay(50);
}
if (buttonState == LOW && lastButtonState == HIGH) {
// Check if taps are within 0.85s of each other
if (millis() - lastTapTime < 850) {
tapCount++;
} else {
tapCount = 1; // Reset if too slow
}
lastTapTime = millis(); // Update last tap time
}
if (tapCount == 7 && millis() - lastTapTime >= 850) {
showSeven();
tapCount = 0;
}
lastButtonState = buttonState;
}
else{
return;
}
}
//Diamond
void showSeven() {
if (currentPosition == 0){
lcdOne.clear();
int displayNumberOne = 7;
lcdOne.print(displayNumberOne);
if(displayNumberOne == targetSequence[0]){
lcdOneCorrect = true;
currentPosition = currentPosition + 1;
}
return;
}
if (currentPosition == 0){
lcdTwo.clear();
int displayNumberTwo = 7;
lcdTwo.print(displayNumberTwo);
if(displayNumberTwo == targetSequence[1]){
lcdTwoCorrect = true;
currentPosition = currentPosition + 1;
}
return;
}
if (currentPosition == 0){
lcdThree.clear();
int displayNumberThree = 7;
lcdThree.print(displayNumberThree);
if(displayNumberThree == targetSequence[2]){
lcdThreeCorrect = true;
currentPosition = currentPosition + 1;
}
return;
}
}
void singleClick(){
moneyCount = moneyCount - 1;
Serial.print("£"); // Try direct symbol (works in some IDEs)
Serial.println(moneyCount);
randomNumOne = random(0, 5);
randomNumTwo = random(0, 5); // Generates a number between 0-999
randomNumThree = random(0, 5); // Generates a number between 0-999
if(lcdOneCorrect == false){
lcdOne.clear();
lcdOne.setCursor(0, 1); // Move to 2nd line
lcdOne.print(randomNumOne);
}
if(lcdTwoCorrect == false){
lcdTwo.clear();
lcdTwo.setCursor(0, 1);
lcdTwo.print(randomNumTwo);
}
if(lcdThreeCorrect == false){
lcdThree.clear();
lcdThree.setCursor(0, 1);
lcdThree.print(randomNumThree);
}
}
void checkSequence(int one, int two, int three){
if (one == targetSequence[0] && two == targetSequence[1] && three == targetSequence[2]){
allCorrect = true;
Serial.println("You Win Collect £60");
moneyCount = moneyCount + 60;
Serial.print("£"); // Try direct symbol (works in some IDEs)
Serial.println(moneyCount);
}
}