clock_v2 — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by melimelum586.

Components

Sketch code

#include <Wire.h> // for I2C
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h> // for rtc
#include <Adafruit_NeoPixel.h> // for led strip


// pins
const int plusBtn = 12;
const int centerBtn = 14;
const int minusBtn = 27;
const int alarmLED = 13;
const int ledStripPin = 18;


const int NUM_LEDS = 60;


// add-ons
Adafruit_SSD1306 display(128, 64, &Wire, -1); // ширина, висота, використовуємо I2C (обмін даних по двох сигнальних дротах - SDA(передаємо дані), SCL (зчитуємо дані), немає окремого пін для ресет у дісплея
RTC_DS3231 rtc;
Adafruit_NeoPixel strip(NUM_LEDS, ledStripPin, NEO_GRB + NEO_KHZ800);


// center btn vars
bool lastCenterBtnState = HIGH;
bool centerBtnState = 1;
bool centerPressed = false;


// plus btn vars
bool lastPlusBtnState = HIGH;
bool plusBtnState = 1;
bool plusPressed = false;
unsigned long plusPressStart = 0;
unsigned long lastPlusChange = 0;


// screens
bool alarmScreen = false;
bool setAlarmScreen = false;
bool clearAlarmScreen = false;


// minus btn state
bool minusBtnState = 1;
bool lastMinusBtnState = HIGH;
bool minusPressed = false;
unsigned long minusPressStart = 0;
unsigned long lastMinusChange = 0;


// alarm vars
unsigned long alarmStartTime = 0;
int setAlarmHour = 6;
int setAlarmMinute = 0;
int alarmEditStep = 0;
int alarmHour = 0;
int alarmMinute = 0;
int ledHour = 0;
int ledMinute = 0;
bool alarmEnabled  = false;


bool clearAlarmScreen = false;
bool noYesBtns = false; // no - false, yes - true for underline


bool alarmeTrigged = false;
bool show24 = true;
unsigned long secAlarm = -1;
unsigned long nowSecTime  = -1;
unsigned long timeToSec(int hour = -1, int minute = -1, int second = -1);
unsigned long secLED = -1;


void setup() {
  Wire.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  rtc.begin();
  strip.begin();
  Serial.begin(9600);


  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
 
  pinMode(plusBtn, INPUT_PULLUP);
  pinMode(centerBtn, INPUT_PULLUP);
  pinMode(minusBtn, INPUT_PULLUP);
  pinMode(alarmLED, OUTPUT);
  delay(1000);


  lastCenterBtnState = digitalRead(centerBtn);
  lastPlusBtnState = digitalRead(plusBtn);
  lastMinusBtnState = digitalRead(minusBtn);
}


void loop() {
  // check center btn
  // 1 = HIGH = NOT pressed
  // 0 = LOW = pressed
  /*DateTime now = rtc.now();
  if (alarm && now.hour() == alarmHour && now.minute() == alarmMinute && now.second() == 0 && !alarmeTrigged) {
    alarmeTrigged = true;
    alarmStartTime = millis();
  }
  if (alarmeTrigged && millis() - alarmStartTime >= 10000) {
    digitalWrite(alarmLED, LOW);
    alarmeTrigged = false;
  }*/
  nowSecTime = timeToSec();

  if (alarmEnabled && nowSecTime == secLED && !alarmeTrigged) {
   for (int i = 0; i < NUM_LEDS; i++) {
        strip.setPixelColor(i, strip.Color(255, 255, 255));
    }
    strip.show();
  }

  if (alarmEnabled && nowSecTime == secAlarm && !alarmeTrigged) {
    alarmeTrigged = true;
    alarmStartTime = millis();
  }

  if (

More projects by melimelum586