//butonul rosu - reseteaza
//https://electronics-project-hub.com/arduino-7-segment-display-clock-with-and-without-rtc/
//A0 - hours
//A1 - minutes
#include "SevSeg.h"
#include <LiquidCrystal_I2C.h>
SevSeg Display;
const unsigned long period = 1000; //one second
const unsigned long led_period = 500; //LED blink millisecond
unsigned long startMillis;
unsigned long led_startMillis;
unsigned long currentMillis;
unsigned long led_currentMillis;
const int hrs_btn = A0;
const int min_btn = A1;
const int ledPin = A2;
int Hrs = 12;
int Min = 0;
int Sec = 0;
int Time;
int ledState = LOW;
#define I2C_ADDR 0X27
#define LCD_COLUMNS 20
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hello, world1!");
lcd.setCursor(0, 1);
lcd.print("Wokwi Online IoT");
delay(1000);
lcd.clear();
lcd.print("Hello, world!");
pinMode(hrs_btn, INPUT_PULLUP);
pinMode(min_btn, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6,7,8,9,10,11,12,13};
bool resistorsOnSegments = false;
bool updateWithDelays = false;
byte hardwareConfig = COMMON_ANODE;
bool leadingZeros = false;
bool disableDecPoint = false;
Display.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
Display.setBrightness(100);
}
void loop()
{
currentMillis = millis();
if (currentMillis - startMillis >= period)
{
Sec = Sec + 1;
startMillis = currentMillis;
}
led_currentMillis = millis();
if (led_currentMillis - led_startMillis >= led_period)
{
led_startMillis = led_currentMillis;
if (ledState == LOW)
{
ledState = HIGH;
if (digitalRead(hrs_btn) == LOW)
{
Hrs = Hrs + 1;
}
if (digitalRead(min_btn) == LOW)
{
Min = Min + 1;
Sec = 0;
}
}
else
{
ledState = LOW;
}
digitalWrite(ledPin, ledState);
}
if (Sec == 60)
{
Sec = 0;
Min = Min + 1;
}
if (Min == 60)
{
Min = 0;
Hrs = Hrs + 1;
}
if (Hrs == 13)
{
Hrs = 1;
}
Time = Hrs * 100 + Min;
Display.setNumber(Time);
Display.refreshDisplay();
}