5 уникальных ламповых часов, которые дополнят любой интерьер

Исходный код

Прошей Iskra Mini кодом программы.

ledClock.ino
// библиотека для работы с адресными светодиодами
#include <Adafruit_NeoPixel.h>
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с часами реального времени
#include "TroykaRTC.h"
// библиотека для работы с кнопками
#include "TroykaButton.h"
 
// инициализируем подключенную кнопку
TroykaButton button(10);
 
// номер пина, к которому подключена RGB-матрица
#define MATRIX_PIN    11
 
// количество светодиодов в матрице
#define LED_COUNT 40
 
// инициализация цепочки светодиодов подсветки цифр
Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, MATRIX_PIN, NEO_GRB + NEO_KHZ800);
 
// инициализация светодиода разграничителя
Adafruit_NeoPixel dot = Adafruit_NeoPixel(1, 12, NEO_GRB + NEO_KHZ800);
 
// размер массива для времени
#define LEN_TIME 12
// размер массива для даты
#define LEN_DATE 12
// размер массива для дня недели
#define LEN_DOW 12
 
// создаём объект для работы с часами реального времени
RTC clock;
 
// переменные для мигания
int ledState = ;
unsigned long previousMillis = ; 
unsigned long currentMillis ;
 
// массив для хранения текущего времени
char timeLEN_TIME;
// массив для хранения текущей даты
char dateLEN_DATE;
// массив для хранения текущего дня недели
char weekDayLEN_DOW;
 
int hour;
int minute;
 
int one;
int two;
int three;
int four;
 
int displaysettings=;
 
int red=150;
int green=200;
int blue= 50;
 
 
void setup()
{
// инициализация
  button.begin();
  matrix.begin();
  dot.begin();
  clock.begin();
 
  // метод установки времени и даты в модуль вручную
  // clock.set(hour,minute,0,27,07,2005,THURSDAY);    
  // метод установки времени и даты автоматически при компиляции
  clock.set(__TIMESTAMP__);
  // что бы время не менялось при прошивки или сбросе питания
  // закоментируйте оба метода clock.set();
 
  pinMode(10, INPUT_PULLUP);
}
 
void loop()
{
  // считываем состояние кнопки
  button.read();
  // запрашиваем данные с часов  
  clock.read();
 
 
 
  // считаем нажатия чтоб переходить из режима в режим  
  if (button.justPressed()){
    displaysettings = displaysettings + 1;
  }
 
  if(displaysettings==){
    // сохраняем текущее время 
    hour = clock.getHour();
    minute = clock.getMinute();
  }
 
  if(displaysettings == 1){
    // присваиваем значение считываемое с потенциометра
    hour = map (analogRead(A0),2, 1020, , 23);
    clock.set(hour,minute,,27,07,2005,THURSDAY);
  }
 
  if(displaysettings == 2){
    // присваиваем значение считываемое с потенциометра
    minute = map (analogRead(A0), 2, 1018, , 59);
    clock.set(hour,minute,,27,07,2005,THURSDAY);
  }
 
  if(displaysettings == 3){
    // присваиваем значение считываемое с потенциометра
    red = map (analogRead(A0),, 1023, , 255);
  }
 
  if(displaysettings == 4){
    // присваиваем значение считываемое с потенциометра
    green = map (analogRead(A0),, 1023, , 255);
  }
 
  if(displaysettings == 5){
    // присваиваем значение считываемое с потенциометра
    blue = map (analogRead(A0),, 1023, , 255);
  }
 
  if(displaysettings == 6){
    displaysettings = ;
  }
 
  // делим минуты и часы на разряды
  one = hour  10;
  two = hour % 10;
  three = minute  10;
  four = minute % 10;
 
  matrix.clear();
 
  // зажигаем нужные светодиоды
  matrix.setPixelColor(four, red, green, blue);
  matrix.setPixelColor(three + 10,  red, green, blue);
  matrix.setPixelColor(two + 20,  red, green, blue);
  matrix.setPixelColor(one + 30,  red, green, blue);
  matrix.show();
 
  // ждём одну секунду
  delay(10);
 
  // мигание разделителя
  blinking();
}
 
void blinking(){
  if (millis() - previousMillis >= 1000) {
    previousMillis = millis();
    if (ledState == ) {
      ledState = 1;
      dot.setPixelColor(, red, green, blue);
    } else {
      ledState = ;
      dot.setPixelColor(, , , );
      }
     dot.show();
    }
}

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий