#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++;
}
}
}