/* Hello Wokwi! */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// LCD SDA = A0
// LCD SDA = A1
const int INPUT_BUTTON_LEFT = 2;
const int INPUT_BUTTON_RIGHT = A2;
const int ACTION_LED = A3;
// LCD SDA = A4
// LCD SDA = A5
const int barLEDCount = 10;
const int barLED[] = { 3, 4, 5, 6, 7, 8, 9 , 10, 11, 12 };
int CountMemory = 0;
int CurrentCode;
int timeLeft;
int binaryCode;
int lastButtonStateRight = 0;
int rightbuttonPushed = 0;
int left_buttonPushed = 0;
int buttonPushCounter = 0;
bool counterState = false;
bool islocked = true;
void setup()
{
Serial.begin(9600);
for(int i = 0; i < 10; i++)
{
pinMode(barLED[i],OUTPUT);
}
lcd.init();
lcd.backlight();
lcd.print("XXXX XXXXX");
lcd.setCursor(0, 2);
lcd.print(" XXXXXX");
lcd.setCursor(0, 3);
lcd.print(" XXXXXXX ");
delay(1000);
lcd.setCursor(0, 1);
lcd.print(" XXXX XXXX");
lcd.setCursor(0, 2);
lcd.print(" LOCKED ");
lcd.setCursor(0, 3);
lcd.print(" - PRESS ENTER -");
pinMode(INPUT_BUTTON_LEFT, INPUT);
pinMode(INPUT_BUTTON_RIGHT, INPUT);
pinMode(ACTION_LED, OUTPUT);
}
void loop() {
int rightbuttonPushed = digitalRead(INPUT_BUTTON_RIGHT);
int left_buttonPushed = digitalRead(INPUT_BUTTON_LEFT);
bool lockState = true;
if (rightbuttonPushed && left_buttonPushed)
{
// this is if the two buttons are pressed
if (islocked)
{
// this is locked
lcd.setCursor(0, 3);
lcd.print("------UNLOCKED------");
counterState = true;
lockState = false;
delay(1000);
}
else
{
// this is not locked
lcd.setCursor(0, 3);
lcd.print("------STOPPED------");
counterState = true;
lockState = false;
delay(1000);}
}
else if (rightbuttonPushed && left_buttonPushed && !lockState && counterState)
{
lcd.clear();
lcd.setCursor(0, 0); lcd.print(" TIME: 1024");
lcd.setCursor(0, 1); lcd.print(" [0000000000] ");
lcd.setCursor(0, 2); lcd.print(" CODE: 0 ");
lcd.setCursor(0, 3); lcd.print(" -RUNNING-");
for (byte counter =0; counter<=1023; counter++)
{
displayBinary(counter);
lcd.setCursor(9, 2);
lcd.print(counter);
delay(500); }
}
delay(50); // Delay for my own sake
}
void displayBinary(byte numToShow) { for (int i =0;i<10;i++)
{ if (bitRead(numToShow, i)==1) { digitalWrite(barLED[i], HIGH);
}
else { digitalWrite(barLED[i], LOW); }
}
}