clock — Arduino Uno simulation

An interactive Arduino Uno 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

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

// pins
const int plusBtn = 2;
const int centerBtn = 3;
const int minusBtn = 4;
const int alarmLED = 13;
const int ledStripPin = 5;

// vars
const int NUM_LEDS = 10;
Adafruit_NeoPixel strip(NUM_LEDS, ledStripPin, NEO_GRB + NEO_KHZ800);

bool lastCenterBtnState = HIGH;
bool alarmScreen = false;
bool centerBtnState = 1;
bool centerPressed = false;

bool setAlarmScreen = false;
bool lastPlusBtnState = HIGH;
bool plusBtnState = 1;
bool plusPressed = false;
unsigned long plusPressStart = 0;
unsigned long lastPlusChange = 0;

bool minusBtnState = 1;
bool lastMinusBtnState = HIGH;
bool minusPressed = false;
unsigned long minusPressStart = 0;
unsigned long lastMinusChange = 0;
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 alarm = 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();
  /*for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, strip.Color(255, 255, 255));
  }
  strip.show();*/

  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 (alarm && nowSecTime == secLED && !alarmeTrigged) {

   for (int i = 0; i < NUM_LEDS; i++) {
        strip.setPixelColor(i, strip.Color(255, 255, 255));
    }
    strip.show();

  }*/

  if (alarm && nowSecTime == secAlarm && !alarmeTrigged) {

    alarmeTrigged = true;
    alarmStartTime = millis();

  }

  if (alarmeTrigge

More projects by melimelum586