#include <SPI.h>
#include "Adafruit_NeoPixel.h"
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, 12, NEO_GRB + NEO_KHZ800);
#define keyHor 5 //кнопки
#define keyMin 4
const int RED = 10; //сделано для упрощения подбора цветов и яркости
const int GREEN = 10;
const int BLUE = 10;
const int FIRSTLEDID = 0;
const int LEDCOUNT = 60;
const unsigned int MINUTEPERIOD = 60000; // минута в ms
const unsigned int PAUSEPERIOD = 200;
const int PLUS = 50;
unsigned long currentMillis;
unsigned long timing; //для счетчика времени
unsigned long pause; //для обработки кнопок
int m = 0; //минуты
int h = 0; //часы
int hoursDelta = 0;
void setup() {
    strip.begin(); // Функция begin() настроит порт Arduino и выставит значения по умолчанию.
    strip.show(); // Функция show() передаст команду на выключение всем пикселям.
    pinMode(keyHor, INPUT_PULLUP);
    pinMode(keyMin, INPUT_PULLUP);
    timing = millis();
    pause = millis();
}
void fillLED(){
    int i = 0;
    for (i = 0; i < LEDCOUNT; i++)
        strip.setPixelColor(i, R, G, B); //заливаем контур (60 светодиодов)
    for (i = FIRSTLEDID%5; i < FIRSTLEDID%5+LEDCOUNT; i = i+5)
        strip.setPixelColor(i, 0, G + PLUS, B); // заливаем зеленые разделители
    hoursDelta = m/12;
    int currentHourLed;
    if (h == 0){
        currentHourLed = FIRSTLEDID + LEDCOUNT; //вот это для корректного отображения 12 часов
    } else {
        currentHourLed = FIRSTLEDID + h*5; //для всех остальных часов
    }
    strip.setPixelColor((currentHourLed - 1)% LEDCOUNT + hoursDelta, 250, 0, 0);
    strip.setPixelColor((currentHourLed )% LEDCOUNT + hoursDelta, 250, 0, 0);
    strip.setPixelColor((currentHourLed + 1)% LEDCOUNT + hoursDelta, 250 ,0 ,0);
    strip.setPixelColor((FIRSTLEDID+m) % LEDCOUNT, 250, 0, 250); //Рисуем "минуту"
    strip.show();
}
void loop() {
    currentMillis = millis();
    if (currentMillis - timing >= MINUTEPERIOD) {
        timing = currentMillis;
        m++;
        if (m > 59) {
            m = 0;
            h++;  
        }
        if (h>11) {
            h = 0;
        }
        fillLED();
    }
    // обработка кнопок
    currentMillis = millis();
    if (currentMillis - pause > PAUSEPERIOD) {
        pause = currentMillis;
        if (!digitalRead(keyHor)){
            h++;
        }
        if (!digitalRead(keyMin)){
            m++;
        }
    }
}