#include <LiquidCrystal.h> // Include the LCD library
const int buttonPinSpin = 8;
const int buttonPinLockIn = 20;
unsigned long startTime = 0; // Timer start time
unsigned long stopTime = 0; // Timer stop time
int pressCount = 0; // Tracks button A presses
bool timerActive = false; // True while timer is running
bool buttonState = false;
bool lastButtonState = false;
// Initialize the LCD (adjust pins if not using I2C)
LiquidCrystal lcdOne(0, 2, 4, 5, 6, 7);
LiquidCrystal lcdTwo(1, 9, 10, 11, 12, 13);
LiquidCrystal lcdThree(14, 15, 16, 17, 18, 19);
// // Cherry
// byte name1x8[] = { B00010, B00100, B01000, B10000, B00000, B00000, B00000, B0000 };
// byte name0x6[] = { B00000, B00000, B00001, B00011, B00011, B00010, B00011, B00001 };
// byte name0x7[] = { B00000, B11100, B11110, B11111, B11111, B11111, B00110, B11100 };
// byte name0x8[] = { B00000, B00000, B00000, B00000, B10000, B01000, B00100, B00011 };
// byte name1x6[] = { B00001, B00011, B00011, B00010, B00011, B00001, B00000, B00000 };
// byte name1x7[] = { B11100, B11110, B11111, B11111, B00111, B11110, B11100, B00000 };
// byte name1x9[] = { B10000, B01000, B01000, B00000, B00000, B00000, B00000, B00000 };
// // Dollar
// byte name1x8[] = { B01100, B11111, B01100, B01100, B01100, B11100, B11000, B00000 };
// byte name0x6[] = { B00000, B00110, B01110, B01100, B01100, B01100, B11111, B01100 };
// byte name0x7[] = { B00000, B00011, B00111, B01100, B01100, B01100, B11111, B01100 };
// byte name0x8[] = { B00000, B10000, B11000, B01100, B01100, B01100, B11111, B01100 };
// byte name1x6[] = { B01100, B11111, B01100, B01100, B01100, B00111, B00011, B00000 };
// byte name1x7[] = { B01100, B11111, B01100, B01100, B01100, B11000, B10000, B00000 };
void setup() {
Serial.begin(9600);
pinMode(buttonPinSpin, INPUT); // Set the button as input
pinMode(buttonPinLockIn, INPUT); // Set the button as input
Serial.println("Ready. Press Button A to start.");
lcdOne.begin(16, 2); // Set up the LCD's number of columns and rows
lcdTwo.begin(16, 2); // Set up the LCD's number of columns and rows
lcdThree.begin(16, 2); // Set up the LCD's number of columns and rows
// lcdOne.print("Hello World");
// lcdTwo.print("Hello World");
// lcdThree.print("Hello World");
// // Cherry for lcdOne
// lcdOne.createChar(1, name1x8);
// lcdOne.setCursor(8, 1);
// lcdOne.write(1);
// lcdOne.createChar(2, name0x6);
// lcdOne.setCursor(6, 0);
// lcdOne.write(2);
// lcdOne.createChar(3, name0x7);
// lcdOne.setCursor(7, 0);
// lcdOne.write(3);
// lcdOne.createChar(4, name0x8);
// lcdOne.setCursor(8, 0);
// lcdOne.write(4);
// lcdOne.createChar(5, name1x6);
// lcdOne.setCursor(6, 1);
// lcdOne.write(5);
// lcdOne.createChar(6, name1x7);
// lcdOne.setCursor(7, 1);
// lcdOne.write(6);
// lcdOne.createChar(7, name1x9);
// lcdOne.setCursor(9, 1);
// lcdOne.write(7);
// // Dollar for lcdOne
// lcdOne.createChar(1, name1x8);
// lcdOne.setCursor(8, 1);
// lcdOne.write(1);
// lcdOne.createChar(2, name0x6);
// lcdOne.setCursor(6, 0);
// lcdOne.write(2);
// lcdOne.createChar(3, name0x7);
// lcdOne.setCursor(7, 0);
// lcdOne.write(3);
// lcdOne.createChar(5, name0x8);
// lcdOne.setCursor(8, 0);
// lcdOne.write(5);
// lcdOne.createChar(6, name1x6);
// lcdOne.setCursor(6, 1);
// lcdOne.write(6);
// lcdOne.createChar(7, name1x7);
// lcdOne.setCursor(7, 1);
// lcdOne.write(7);
// // Dollar for lcdTwo
// lcdTwo.createChar(1, name1x8);
// lcdTwo.setCursor(8, 1);
// lcdTwo.write(1);
// lcdTwo.createChar(2, name0x6);
// lcdTwo.setCursor(6, 0);
// lcdTwo.write(2);
// lcdTwo.createChar(3, name0x7);
// lcdTwo.setCursor(7, 0);
// lcdTwo.write(3);
// lcdTwo.createChar(5, name0x8);
// lcdTwo.setCursor(8, 0);
// lcdTwo.write(5);
// lcdTwo.createChar(6, name1x6);
// lcdTwo.setCursor(6, 1);
// lcdTwo.write(6);
// lcdTwo.createChar(7, name1x7);
// lcdTwo.setCursor(7, 1);
// lcdTwo.write(7);
// // Dollar for lcdThree
// lcdThree.createChar(1, name1x8);
// lcdThree.setCursor(8, 1);
// lcdThree.write(1);
// lcdThree.createChar(2, name0x6);
// lcdThree.setCursor(6, 0);
// lcdThree.write(2);
// lcdThree.createChar(3, name0x7);
// lcdThree.setCursor(7, 0);
// lcdThree.write(3);
// lcdThree.createChar(5, name0x8);
// lcdThree.setCursor(8, 0);
// lcdThree.write(5);
// lcdThree.createChar(6, name1x6);
// lcdThree.setCursor(6, 1);
// lcdThree.write(6);
// lcdThree.createChar(7, name1x7);
// lcdThree.setCursor(7, 1);
// lcdThree.write(7);
}
void loop() {
// Handle Button A (start/increment)
if (digitalRead(buttonPinSpin) == LOW) {
delay(50); // Debounce
if (!timerActive) {
// First press: start timer
startTime = millis();
timerActive = true;
pressCount = 1;
Serial.println("Timer started! Press Button A again to increment.");
} else {
// Subsequent presses: increment count
pressCount++;
Serial.print("Count: ");
Serial.println(pressCount);
}
while (digitalRead(buttonPinSpin) == LOW); // Wait for release
}
// Handle Button B (stop/print)
if (digitalRead(buttonPinLockIn) == LOW && timerActive) {
delay(50); // Debounce
stopTime = millis();
timerActive = false;
Serial.println("\n----- RESULTS -----");
Serial.print("Total presses: ");
Serial.println(pressCount);
Serial.print("Total time (ms): ");
Serial.println(stopTime - startTime);
while (digitalRead(buttonPinLockIn) == LOW); // Wait for release
}
}