Оглавление:

Загадочные настенные часы: 27 шагов (с изображениями)
Загадочные настенные часы: 27 шагов (с изображениями)

Видео: Загадочные настенные часы: 27 шагов (с изображениями)

Видео: Загадочные настенные часы: 27 шагов (с изображениями)
Видео: Охрана Путина 🫵🏻 2024, Июль
Anonim
Загадочные настенные часы
Загадочные настенные часы

Течение времени - это то, что мы не можем контролировать. Это происходит с той же скоростью, когда мы спим, бодрствуем, скучаем или заняты. Что касается текущих событий, важно помнить, что время пройдет. Пока мы ждем, пока пройдет время, почему бы не сделать что-то, что делает течение времени более привлекательным для наблюдения.

Эти часы были вдохновлены Mengenlehreuhr, найденным в Берлине, Германия, и их можно читать таким же образом. Как и в оригинале, он показывает время с помощью подсвеченных цветных полей.

Он оснащен 96 светодиодами, которые подсвечивают 52 «разрядные» области. В отличие от оригинала, он имеет круглую форму с секундным кольцом вместо горизонтальной полосы. Внешняя полоса указывает секунды вместе со средней точкой, следующие две полосы указывают минуты, а последние внутренние полосы указывают часы.

Если у вас есть немного подручного материала и дополнительное время, почему бы не использовать это время, чтобы сделать что-нибудь, что это продемонстрирует!

Есть несколько изменений, которые я бы внес в этот проект, если бы я сделал его снова. Во-первых, я бы покрасил рамку и плату светодиодов в белый цвет, а не в черный. Это позволит отражать больше света через большую линзу спереди. Я бы тоже дождался конца, чтобы вставить светодиоды. Мне нужно было закончить доску раньше, чтобы она могла помочь мне с написанием кода. Разобравшись с этим, давайте сначала научимся читать!

Изображение
Изображение

Шаг 1. Как читать часы

Часы читаются от внутренних кругов к внешним. Внутреннее кольцо из четырех полей обозначает пять полных часов каждое, рядом со вторым кольцом также четыре поля, которые обозначают по одному полному часу каждое, отображая значение часа в 24-часовом формате. Третье кольцо состоит из одиннадцати полей, каждое из которых обозначает пять полных минут, в следующем кольце есть еще четыре поля, каждое из которых отмечает одну полную минуту. Наконец, внешнее кольцо из 29 полей обозначает четные секунды, а индикатор в центре мигает для обозначения нечетных (когда горит) или четных (когда не горит) секунд.

Изображение
Изображение

Например, на изображении выше 1 из пяти цифр, 3 из цифр одного часа, 8 из пятиминутных цифр, 4 из минутных цифр, 23 из двух секундных цифр и средняя вторая цифра горят.

1x5 + 3x1: 8x5 + 4x1: 23x2 + 1x1 = 8:44:47 = 8:44:47 утра

Изображение
Изображение

Время, показанное выше: 3x5 + 0x1: 3x5 + 2x1: 5x2 + 1x1 = 15:17:11 = 15:17:11 PM.

Изображение
Изображение

Время, показанное выше: 3x5 + 2x1: 3x5 + 3x1: 16x2 + 1x1 = 17:18:33 = 17:18:33 PM.

Шаг 2: Инструменты и материалы

Инструменты и материалы
Инструменты и материалы
Инструменты и материалы
Инструменты и материалы
Инструменты и материалы
Инструменты и материалы

Материалы электроники:

  • Ардуино Нано
  • Часы реального времени
  • Адресные светодиоды
  • Разъем питания
  • Силовой кабель
  • Разъем питания USB
  • Светозависимый резистор и симметричный резистор (если вы хотите, чтобы он приглушался ночью)
  • Проволока

Деревообрабатывающие материалы:

  • Фанера 3/4 дюйма
  • Тонкая фанера
  • Древесина из лома (я использовал 2х4, но подойдет и твердая древесина)
  • Покрасить
  • Акриловый лист 30 x 36 дюймов (можно купить в местном магазине товаров для дома)
  • Оттенок окна (попробуйте получить локальный источник. Если его нет, вы можете найти здесь достаточно большой лист)
  • Window Tint Application Fluid (я использовала воду, смешанную с детским шампунем в бутылке с распылителем)
  • Windex
  • Бумага для мясников
  • Винты
  • Клей-спрей
  • Клей
  • Клей-карандаш

Инструменты:

  • Правитель
  • Xacto Knife
  • Лента
  • Двухсторонний скотч
  • Компас
  • Приспособление для резки круга
  • Головоломка
  • Ленточная пила
  • Шпиндельный шлифовальный станок
  • Пальмовый шлифовальный станок
  • Дисковый шлифовальный станок
  • Таблица маршрутизатора
  • Шило
  • Сверла и сверла / отвертки
  • Зажимы
  • Паяльник
  • Припой
  • Инструмент для зачистки проводов

Шаг 3. Соберите шаблоны

Собрать шаблоны
Собрать шаблоны
Собрать шаблоны
Собрать шаблоны

Для большого шаблона распечатайте его, используя настройку плаката в Adobe Reader. Обрежьте поля для каждой бумаги и скотчите их вместе. Вертикальные, горизонтальные и диагональные линии помогут выровнять шаблон. На всех страницах есть небольшие номера, чтобы они были организованы, если они выходят из строя.

Все необходимые шаблоны и файлы находятся на шаге 26.

Шаг 4: круги грубого нарезания

Круги грубого нарезания
Круги грубого нарезания
Круги грубого нарезания
Круги грубого нарезания

Разложив два шаблона на листе фанеры 3/4 дюйма, нарисуйте циркулем круги немного больше, чем нужно. Лобзиком вырежьте грубую форму.

Шаг 5: обрезать по размеру

Вырезать по размеру
Вырезать по размеру
Вырезать по размеру
Вырезать по размеру

Используя приспособление для резки кругов на ленточной пиле, вырежьте круги до окончательного размера.

Шаг 6. Примените шаблон

Применить шаблон
Применить шаблон
Применить шаблон
Применить шаблон
Применить шаблон
Применить шаблон

Используя аэрозольный клей, нанесите каждый шаблон на круг. Вставьте гвоздь в центр шаблона, чтобы отцентрировать его на окружности.

Шаг 7: вырезать шаблон

Вырезать шаблон
Вырезать шаблон
Вырезать шаблон
Вырезать шаблон
Вырезать шаблон
Вырезать шаблон

Лобзиком вырежьте каждое отдельное окошко шаблона. Если у вас есть доступ к ЧПУ, этот шаг будет намного проще! Я просверлил отверстие в каждом окне, чтобы облегчить этот процесс. Когда вы начнете вырезать, шаблон может начать отслаиваться. В этом случае вы можете закрепить его небольшими кусочками ленты.

Шаг 8: шлифование

Шлифование
Шлифование
Шлифование
Шлифование
Шлифование
Шлифование

Используя наждачную бумагу, наложенную на палку, шпиндельный шлифовальный станок и пальмовую шлифовальную машину, отшлифуйте и сгладьте грубый срез, оставленный лобзиком.

Шаг 9: Держатели для сверл для светодиодов

Держатели для сверл для светодиодов
Держатели для сверл для светодиодов
Держатели для сверл для светодиодов
Держатели для сверл для светодиодов
Держатели для сверл для светодиодов
Держатели для сверл для светодиодов
Держатели для сверл для светодиодов
Держатели для сверл для светодиодов

Отметьте центр каждого отверстия шилом и просверлите отверстия для светодиодов. Я использовал направляющую, чтобы держать сверло перпендикулярно моей заготовке, и заднюю стенку, чтобы не выдувать дерево сзади.

Шаг 10: объедините доски

Объединить доски
Объединить доски
Объединить доски
Объединить доски
Объединить доски
Объединить доски

Поменяйте местами переднюю и заднюю платы и обведите части рамы на задней стороне платы светодиодов. Переместите рамку обратно к передней части светодиодной панели, просверлите отверстия и скрутите детали вместе.

См. Примечания к изображениям для получения дополнительной информации.

Шаг 11: вставьте светодиоды

Вставить светодиоды
Вставить светодиоды
Вставить светодиоды
Вставить светодиоды

Протолкните светодиоды через заднюю часть платы светодиодов. Отверстия должны быть расположены на достаточном расстоянии, чтобы вам не нужно было обрезать какие-либо провода, кроме перехода от одного круга к другому.

Сзади светодиоды начинаются в центре, затем идут против часовой стрелки, затем до следующего кольца.

Шаг 12: прикрепите сегмент 1

Присоединить сегмент 1
Присоединить сегмент 1
Присоединить сегмент 1
Присоединить сегмент 1
Присоединить сегмент 1
Присоединить сегмент 1

Вырежьте 9 сегментов из шаблона «Сегмент 1», прикрепленного к фанере 3/4 дюйма (найденной на шаге 26). Прикрепите к светодиодной плате с помощью клея и зажимов. Если вы нетерпеливы, вы также можете зажать его гвоздями.

После высыхания отшлифуйте край дисковой шлифовальной машиной.

Шаг 13: покрасьте

Покрасить
Покрасить
Покрасить
Покрасить
Покрасить
Покрасить
Покрасить
Покрасить

Распылите краску как на светодиодную плату, так и на раму. Если бы я делал это снова, я бы использовал белую краску вместо черной, так как она будет лучше отражать через линзу.

Шаг 14: сегмент 2

Сегмент 2
Сегмент 2
Сегмент 2
Сегмент 2
Сегмент 2
Сегмент 2

Вырежьте 9 сегментов из шаблона «Сегмент 2», прикрепленного из дерева, толщиной 2 3/8 дюйма (найденного на шаге 26). Я использовал лом 2х4 из магазина. Насухо установите сегменты и убедитесь, что они хорошо прилегают, с помощью ленточного зажима. Если все в порядке, заклейте внешнюю поверхность малярным скотчем, чтобы клей не прилипал, и дайте высохнуть не менее часа, прежде чем переходить к следующему шагу.

Шаг 15: сегмент 3

Сегмент 3
Сегмент 3
Сегмент 3
Сегмент 3
Сегмент 3
Сегмент 3

Вырежьте 9 сегментов из шаблона «Сегмент 3», прикрепленного из обрезков древесины толщиной 3/8 дюйма (найденного на шаге 26). Склейте их так, чтобы швы из сегмента 2 находились посередине каждого сегмента 3. Это укрепит кольцо.

Шаг 16: сгладьте кольцо и покрасьте

Гладкое кольцо и краска
Гладкое кольцо и краска
Гладкое кольцо и краска
Гладкое кольцо и краска

Я сделал индивидуальный шлифовальный блок из обрезки большого кольца. Зашлифуйте внутреннюю и внешнюю стороны кольца и заполните все трещины, которые могли появиться в процессе склеивания.

После получения однородной массы нанесите несколько слоев черной краски и прозрачного покрытия.

Шаг 17: вырезать акрил

Вырезать акрил
Вырезать акрил
Вырезать акрил
Вырезать акрил
Вырезать акрил
Вырезать акрил
Вырезать акрил
Вырезать акрил

Вырежьте из акрила квадрат размером 30 x 30 дюймов и отметьте центр. Прикрепите акрил двусторонним скотчем. С помощью фрезы для обрезки заподлицо удалите излишки акрила.

Шаг 18: примените Window Tint

Применить оттенок окна
Применить оттенок окна
Применить оттенок окна
Применить оттенок окна
Применить оттенок окна
Применить оттенок окна

В непыльной среде удалите защитную пленку с акрила. Нанесите спрей и удалите защитную пленку с оконного оттенка. Нанесите оконный оттенок липкой стороной вниз. С помощью ракеля или кредитной карты выдавите всю жидкость из-под оконной краски. После того, как все пузырьки и морщины будут удалены, срежьте излишки оттенка окна с помощью острого ножа.

Шаг 19: прикрепите Defuser

Присоединить Defuser
Присоединить Defuser
Присоединить Defuser
Присоединить Defuser

Я использовал большой кусок мясной бумаги, чтобы обезопасить себя. Разложите бумагу на ровной поверхности. Покройте лицевую часть каркаса клеем из клеевого стержня. Прежде чем клей высохнет, положите часы на бумагу лицевой стороной вниз и обрежьте излишки. После высыхания используйте острый нож для смыва.

Шаг 20: нанесите изоляцию

Применить изоляцию
Применить изоляцию

Я использовал изоленту, чтобы разделить линии питания и передачи данных.

Шаг 21: соберите

Собрать
Собрать
Собрать
Собрать
Собрать
Собрать

Другой защитный слой снимаем с акрила. Поместите акрил внутрь кольца окошком вверх. Вставьте оставшуюся часть часов в кольцо. С помощью зажима слегка надавите, просверлив отверстие в кольце в плате светодиода. Это должно быть примерно 1 1/8 дюйма от спины. Будьте осторожны, чтобы не просверлить светодиод. Вверните в отверстие винт с анкерной головкой. Повторите, в общей сложности, восемь винтов по периметру часов.

Шаг 22: прикрепите точки привязки

Присоединить точки привязки
Присоединить точки привязки

Приклейте точки крепления к задней части часов, чтобы прикрепить к ним заднюю крышку. Они имеют толщину 3/4 дюйма и длину около 2 дюймов.

Шаг 23: Просверлите отверстия датчика мощности и LDR

Отверстия датчика мощности сверления и датчика LDR
Отверстия датчика мощности сверления и датчика LDR

Просверлите отверстие питания в нижней части часов для вилки питания и отверстие в верхней части для датчика светозависимого резистора (LDR).

Шаг 24: Установите держатель электроники

Установите держатель электроники
Установите держатель электроники
Установите держатель электроники
Установите держатель электроники

Установите 3D-печатный держатель для RTC и Arduino Nano. Подключите всю электронику, как показано на схеме.

Шаг 25: задняя крышка

Задняя обложка
Задняя обложка
Задняя обложка
Задняя обложка
Задняя обложка
Задняя обложка
Задняя обложка
Задняя обложка

Вырежьте заднюю крышку из тонкой фанеры размером чуть меньше, чем внешняя сторона часов. Просверлите отверстия в анкерных точках. Найдите центр спинки и отмерьте 8 дюймов в любом направлении, чтобы вырезать замочные скважины (стандартные 16 дюймов в центрах для шпилек в США). Я просверлил основное отверстие размером чуть больше головки шурупов, которые собираюсь использовать, и проделал отверстие большего размера в одном направлении. Покрасьте в черный цвет и прикрепите крышку на место.

Шаг 26: Код и файлы

Опять же, я новичок в использовании многих используемых здесь библиотек Arduino, поэтому уверен, что есть более эффективные способы их использования.

Я написал код, который легко обновляется в зависимости от того, сколько светодиодов вы используете, если масштаб проекта увеличивается или уменьшается. Все, что вам нужно сделать, это обновить начальную и конечную позиции светодиодов, а также количество светодиодов, входящих в каждую цифру.

Я добавил несколько анимаций, которые воспроизводятся как при запуске, так и в час. Они являются sudo random на основе имеющегося у него генератора случайных чисел.

Вы можете настроить часы так, чтобы они циклически менялись по цвету или оставались неизменными на одном. Вы даже можете выделить цифру индикатора, чтобы облегчить считывание времени, как показано во введении.

Не стесняйтесь редактировать и изменять код по своему усмотрению.

#include "RTClib.h"

#include #define NUM_LEDS 96 #define DATA_PIN 3 #define LDR A0 RTC_DS1307 rtc; логическое timeChange = false; логическое printTime = false; // Установите значение true, если вы хотите видеть вывод в консоли. Полезно для отладки. логическое redDown = true; логическое значение greenDown = false; логическое blueDown = false; логический цикл = ложь; // Устанавливаем true, если вы хотите, чтобы цвета часов менялись boolean highlight = true; // Установите true, чтобы выделить «последнюю цифру». // Расположение начала и конца каждой группы времени const int SECOND_1_LOCATION = 0; const int HOUR_2_START_LOCATION = 1; const int HOUR_2_END_LOCATION = 8; const int HOUR_1_START_LOCATION = 9; const int HOUR_1_END_LOCATION = 20; const int MINUTE_2_START_LOCATION = 21; const int MINUTE_2_END_LOCATION = 42; const int MINUTE_1_START_LOCATION = 43; const int MINUTE_1_END_LOCATION = 66; const int SECOND_2_START_LOCATION = 67; const int SECOND_2_END_LOCATION = 95; const int LEDS_PER_HOUR_1 = 3; const int LEDS_PER_HOUR_2 = 2; const int LEDS_PER_MINUTE_1 = 6; const int LEDS_PER_MINUTE_2 = 2; // Множители, используемые для разделения времени const int MULTIPLIER_FIVE = 5; const int MULTIPLIER_TWO = 2; const int START_UP_DELAY = 1; // Измените это, чтобы ускорить или замедлить анимацию запуска const int CYCLE_SPEED = 1; // Здесь меняем частоту для цикла смены цвета (должно быть больше 1) // Объявление переменных int lastSecond = 0; int currentHour = 0; int currentMinute = 0; int currentSecond = 0; int hour1 = 0; int час2 = 0; int минута1 = 0; int минута2 = 0; int second1 = 0; int second2 = 0; int cycleCount = 1; float fadeValue = 255; float fadeCheck = 255; uint8_t bright = 255; int numberOfAnimations = 5; int randomness = 0; // Устанавливаем цвета uint8_t red = 0; uint8_t зеленый = 0; uint8_t синий = 255; uint8_t highlight_red = 60; uint8_t highlight_green = 60; uint8_t highlight_blue = 255; // Определяем массив светодиодов CRGB leds [NUM_LEDS]; void setup () {Serial.begin (19200); FastLED.addLeds (светодиоды, NUM_LEDS); LEDS.setBrightness (яркий); FastLED.clear (); rtc.begin (); // Раскомментируйте строку ниже, чтобы установить время. // rtc.adjust (DateTime (2020, 2, 19, 23, 59, 50)); // rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); // Анимация запуска animate (случайность); } void loop () {// Получить время DateTime now = rtc.now (); currentHour = now.hour (); currentMinute = now.minute (); currentSecond = now.second (); timeChange = false; // Используйте их, чтобы вручную установить время без RTC. Полезно для отладки // currentHour = 5; // currentMinute = 30; // currentSecond = 30; // Сбрасываем все биты в ноль для (int i = SECOND_1_LOCATION; i <= SECOND_2_END_LOCATION; i ++) {leds = CRGB:: Black; } // Установить час // Установить час 1 hour1 = (currentHour% MULTIPLIER_FIVE) * LEDS_PER_HOUR_1; // Это подсчитает общее количество светодиодов единицы времени, которые должны загореться для (int i = HOUR_1_START_LOCATION; i 0) // && hour1 <12) {for (int i = (HOUR_1_START_LOCATION + hour1 - 1); i> = (HOUR_1_START_LOCATION + hour1 - LEDS_PER_HOUR_1); i--) {leds = CRGB (светлый_красный, светлый_зеленый, светлый_синий); }} // Устанавливаем час 2 hour2 = (currentHour / MULTIPLIER_FIVE) * LEDS_PER_HOUR_2; // Это подсчитает общее количество светодиодов единицы времени, которые должны загореться для (int i = HOUR_2_START_LOCATION; i 0) // && hour2 <8) {for (int i = (HOUR_2_START_LOCATION + hour2-1); i> = (HOUR_2_START_LOCATION + hour2 - LEDS_PER_HOUR_2); i--) {leds = CRGB (светлый_красный, светлый_зеленый, светлый_синий); }} // Установить минуту // Установить минуту 1 minute1 = (currentMinute% MULTIPLIER_FIVE) * LEDS_PER_MINUTE_1; // Это подсчитает общее количество светодиодов единицы времени, которые должны загореться для (int i = MINUTE_1_START_LOCATION; i 0) // && minute1 <24) {for (int i = (MINUTE_1_START_LOCATION + minute1 - 1); i> = (MINUTE_1_START_LOCATION + minute1 - LEDS_PER_MINUTE_1); i--) {leds = CRGB (светлый_красный, светлый_зеленый, светлый_синий); }} // Установить минуту 2 minute2 = (currentMinute / MULTIPLIER_FIVE) * LEDS_PER_MINUTE_2; // Это подсчитает общее количество светодиодов единицы времени, которые должны загореться для (int i = MINUTE_2_START_LOCATION; i 0) // && minute2 <22) {for (int i = (MINUTE_2_START_LOCATION + minute2 - 1); i> = (MINUTE_2_START_LOCATION + minute2 - LEDS_PER_MINUTE_2); i--) {leds = CRGB (светлый_красный, светлый_зеленый, светлый_синий); }} // Устанавливаем секунду if (currentSecond! = LastSecond) {timeChange = true; } // Устанавливаем секунду 1 second1 = currentSecond% MULTIPLIER_TWO; if (second1 == 1) {светодиоды [SECOND_1_LOCATION] = CRGB (красный, зеленый, синий); } // Устанавливаем секунды 2 секунды2 = currentSecond / MULTIPLIER_TWO; for (int i = SECOND_2_START_LOCATION; i 0) // && second2 <29) {for (int i = (SECOND_2_START_LOCATION + second2-1); i> = (SECOND_2_START_LOCATION + second2-1); i--) {светодиоды = CRGB (светлый_красный, светлый_зеленый, светлый_синий); }} lastSecond = currentSecond; // Подсчет циклов программы и вызов функции setColor для изменения цвета светодиодов при каждом цикле CYCLE_SPEED. если (cycleCount яркий) // {// fadeValue = bright; //} // иначе if (fadeValue <150) // {// fadeValue = 150; //} // LEDS.setBrightness (fadeValue); FastLED.show (); // Выводит текущее время на консоль if (timeChange == true && printTime == true) {printToConsole (); }} // Функция анимации добавляет сюда дополнительные анимации, если вы хотите void animate (int select) {if (select == 0) {for (int i = SECOND_1_LOCATION; i <= SECOND_2_END_LOCATION; i ++) {leds = CRGB (красный, зеленый, синий); FastLED.show (); задержка (START_UP_DELAY); } for (int i = SECOND_2_END_LOCATION; i> = SECOND_1_LOCATION; i--) {leds = CRGB:: Black; FastLED.show (); задержка (START_UP_DELAY); }} else if (select == 1) {для (int i = 0; i <250; i ++) {int light = random (95); светодиоды [свет] = CRGB (красный, зеленый, синий); FastLED.show (); }} else if (select == 2) {leds [0] = CRGB (красный, зеленый, синий); for (int i = 0; i <= SECOND_2_END_LOCATION - SECOND_2_START_LOCATION; i ++) {светодиоды [SECOND_2_START_LOCATION + i] = CRGB (красный, зеленый, синий); if (i <= (MINUTE_1_END_LOCATION - MINUTE_1_START_LOCATION)) {светодиоды [MINUTE_1_START_LOCATION + i] = CRGB (красный, зеленый, синий); } if (i <= (MINUTE_2_END_LOCATION - MINUTE_2_START_LOCATION)) {светодиоды [MINUTE_2_START_LOCATION + i] = CRGB (красный, зеленый, синий); } if (i <= (HOUR_1_END_LOCATION - HOUR_1_START_LOCATION)) {светодиоды [HOUR_1_START_LOCATION + i] = CRGB (красный, зеленый, синий); } if (i <= (HOUR_2_END_LOCATION - HOUR_2_START_LOCATION)) {светодиоды [HOUR_2_START_LOCATION + i] = CRGB (красный, зеленый, синий); } задержка (34); FastLED.show (); }} else if (select == 3) {светодиоды [0] = CRGB (красный, зеленый, синий); for (int i = 0; i <= SECOND_2_END_LOCATION - SECOND_2_START_LOCATION; i ++) {светодиоды [SECOND_2_END_LOCATION - i] = CRGB (красный, зеленый, синий); if (i <= (MINUTE_1_END_LOCATION - MINUTE_1_START_LOCATION)) {светодиоды [MINUTE_1_END_LOCATION - i] = CRGB (красный, зеленый, синий); } if (i <= (MINUTE_2_END_LOCATION - MINUTE_2_START_LOCATION)) {светодиоды [MINUTE_2_END_LOCATION - i] = CRGB (красный, зеленый, синий); } if (i <= (HOUR_1_END_LOCATION - HOUR_1_START_LOCATION)) {светодиоды [HOUR_1_END_LOCATION - i] = CRGB (красный, зеленый, синий); } if (i <= (HOUR_2_END_LOCATION - HOUR_2_START_LOCATION)) {светодиоды [HOUR_2_END_LOCATION - i] = CRGB (красный, зеленый,синий); } задержка (34); FastLED.show (); }} else if (select == 4) {for (int i = SECOND_2_END_LOCATION; i> = SECOND_1_LOCATION; i--) {leds = CRGB:: Black; } FastLED.show (); задержка (200); for (int i = SECOND_1_LOCATION; i <= SECOND_2_END_LOCATION; i ++) {светодиоды = CRGB (красный, зеленый, синий); } FastLED.show (); задержка (200); for (int i = SECOND_2_END_LOCATION; i> = SECOND_1_LOCATION; i--) {leds = CRGB:: Black; } FastLED.show (); задержка (200); for (int i = SECOND_1_LOCATION; i <= SECOND_2_END_LOCATION; i ++) {светодиоды = CRGB (красный, зеленый, синий); } FastLED.show (); задержка (200); for (int i = SECOND_2_END_LOCATION; i> = SECOND_1_LOCATION; i--) {leds = CRGB:: Black; } FastLED.show (); задержка (200); }} // Функция смены цвета void setColor (boolean cycleColors) {if (cycleColors == true) {if (redDown == true && greenDown == false) {red ++; зеленый--; если (зеленый <= 0) {красный = 255; redDown = ложь; greenDown = true; }} else if (greenDown == true && blueDown == false) {зеленый ++; синий--; если (синий <= 0) {зеленый = 255; greenDown = ложь; blueDown = true; }} иначе, если (blueDown == true && redDown == false) {blue ++; красный--; если (красный <= 0) {синий = 255; blueDown = false; redDown = true; }}} еще {красный = 0; зеленый = 0; синий = 255; }} // Печать в Serial Monitor function void printToConsole () {Serial.print ("Текущее время:"); Serial.print (текущий час); Serial.print (":"); Serial.print (currentMinute); Serial.print (":"); Serial.println (currentSecond); Serial.println (""); for (int i = HOUR_2_START_LOCATION; i <= HOUR_2_END_LOCATION; i ++) {Serial.print (leds ); если (я% 2 == 0) {Serial.print (""); }} Serial.println (""); for (int i = HOUR_1_START_LOCATION; i <= HOUR_1_END_LOCATION; i ++) {Serial.print (leds ); если (((i - ЧАС_1_START_LOCATION + 1)% 3) == 0) {Serial.print (""); }} Serial.println (""); for (int i = MINUTE_2_START_LOCATION; i <= MINUTE_2_END_LOCATION; i ++) {Serial.print (leds ); если (((i - MINUTE_2_START_LOCATION) + 1)% 2 == 0) {Serial.print (""); }} Serial.println (""); for (int i = MINUTE_1_START_LOCATION; i <= MINUTE_1_END_LOCATION; i ++) {Serial.print (leds ); если (((i - MINUTE_1_START_LOCATION) + 1)% 6 == 0) {Serial.print (""); }} Serial.println (""); for (int i = SECOND_2_START_LOCATION; i <= SECOND_2_END_LOCATION; i ++) {Serial.print (leds ); Serial.print (""); } Serial.println (""); Serial.println (светодиоды [SECOND_1_LOCATION]); Serial.println (); for (int i = 0; i <NUM_LEDS; i ++) {Serial.print (светодиоды ); } Serial.println (); Serial.println (); }

Шаг 27: наслаждайтесь

Изображение
Изображение

В заключение, эти часы замечательно смотреть, и как только вы освоите их, их относительно легко читать. Если вы делаете свой собственный проект часов, дайте мне знать!

Рекомендуемые: