#include <Bounce.h> //библиотека для обработки кнопок
#include <RTC.h> //библиотека часов реального времени
#include <Adafruit_NeoPixel.h> //библиотека светодиодной ленты
//часы реального времени:SCL-A5, SDA-A4
RTC time;
#define PIN 12 //этот пин управляет светодиодной лентой через резистор 200-400 Ом
#define NUMPIXELS 60 //количество светодиодов в ленте
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
uint8_t t_hour,t_min,t_sec; //текущие значения часов, минут, секунд
uint8_t o_sec; //предыдущее значение часов, минут, секунд
uint8_t set_sec, set_hour, set_min; //переданные в светодиодную ленту значения часов, минут, секунд
uint8_t status=0; //0-светильник, 1-часы
uint8_t l_status=0; //статус светильника
unsigned int finger; //переменная с значением данных от датчика приближения
#define BUTTON1 7 //кнопка + часов к пину 7
#define BUTTON2 8 //кнопка + минут к пину 8
#define BUTTON3 9 //кнопка - минут к пину 9
Bounce bouncer1 = Bounce(BUTTON1,30);
Bounce bouncer2 = Bounce(BUTTON2,30);
Bounce bouncer3 = Bounce(BUTTON3,30);
void setup() {
Serial.begin (9600);
time.begin(RTC_DS3231);
pixels.begin(); // инициализация NeoPixel library.
pixels.clear(); //очищаем данные ленты
pixels.show(); //разрешаем отображение
pinMode(A0, INPUT); //сигнал с датчика приближения, пин А0
pinMode(BUTTON1,INPUT_PULLUP); //включаем подтягивающие резисторы на пинах кнопок
pinMode(BUTTON2,INPUT_PULLUP);
pinMode(BUTTON3,INPUT_PULLUP);
finger=0; //таким образом инициируем при включении режим светильника
}
void loop() {
finger = analogRead(A0); //обработка пальца)))
//Serial.println(finger); //раскомментировать для подбора значения ниже
if (finger > 210) { //значение подбирается экспериментальным путем
status=1;
} else {
status=0;
}
if (status == 1){ //0-светильник, 1-часы
time_ring();}
else
light_on();
} //конец loop (мне так удобнее, привычка из 1С)
void time_ring(){ //функция отображения времени (режим часы)
time.gettime("d-m-Y, H:i:s, D");
t_min = time.minutes; //получили минуты
t_hour = time.Hours; //получили часы
set_hour = t_hour % 12; //переведем часы в 12-часовой формат
set_hour = set_hour * 5 + t_min / 12; //определим положение часовой "стрелки". Двигаем ее каждые 12 минут на одно деление
t_sec = time.seconds; //получили секунды
set_sec = t_sec + 30; //теперь переворачиваем часы на 180 градусов, у нас же тени - стрелки
if (set_sec >= 60)
set_sec = set_sec - 60;
set_min = t_min + 30;
if (set_min >= 60)
set_min = set_min - 60;
set_hour = set_hour + 30;
if (set_hour >= 60)
set_hour = set_hour - 60;
if (set_sec != o_sec) { //обновляем индикацию раз в секунду, чтобы не мерцала
//Serial.println(time.gettime("H:i:s")); //чисто-конкретно для контроля времени в мониторе порта (раскомментировать, если нужно)
pixels.clear();
pixels.setPixelColor(set_sec, pixels.Color(30,30,30)); // зажигаем светодиод секунд с яркостью 30 из 255
pixels.setPixelColor(set_hour, pixels.Color(180,180,180)); // зажигаем светодиод часов с яркостью 180 из 255
pixels.setPixelColor(set_min, pixels.Color(255,255,255)); // зажигаем светодиод минут с яркостью 255 из 255
pixels.show(); // разрешаем индикацию времени
o_sec = set_sec;
}
if ( bouncer1.update() ) { //установка часов +1
if ( bouncer1.read() == 0) {
if (t_hour == 23)
t_hour = 0;
else
t_hour = t_hour + 1;
time.settime(t_sec, t_min, t_hour);
}
}
if ( bouncer2.update() ) { //установка минут +1
if ( bouncer2.read() == 0) {
if (t_min == 59){
t_min = 0;}
t_min = t_min + 1;
time.settime(t_sec, t_min, t_hour);
}
}
if ( bouncer3.update() ) { //установка минут -1
if ( bouncer3.read() == 0) {
if (t_min == 0){
t_min = 59;}
t_min = t_min - 1;
time.settime(t_sec, t_min, t_hour);
}
}
l_status = 0;
} //конец time_ring()
void light_on() { //функция светильника
delay(500);
if ( l_status == 0){
for (int i=0; i <= 51; i += 3){
colorWipe(pixels.Color(i , i , i ), 0); // цвет белый
delay(30);
}
}
l_status = 1;
} //конец light_on()
void colorWipe(uint32_t c, uint8_t wait) { //функция для работы light_on()
for(uint16_t i=0; i<pixels.numPixels(); i++) {
pixels.setPixelColor(i, c);
}
pixels.show();
} //конец colorWipe()
+17 |
3654
102
|
Как видно из схемы, светодиоды подключаются отдельно, с внешним питание до 12 вольт. Так что можно оставить решение автора обзора, и использовать на драйвере светодиоды одного цвета. И тут уже будет программная регулировка яркости каждого светодиода. Драйверов понадобится 20 штук. А если добавить второй ярус, то можно уже играться как длинной тени так и яркостью каждого яруса. Вообще китайцы выпускали разные ревизии как светодиодов(4 пиновые и 6 пиновые) таки и отдельных драйверов. Около года назад брал себе на пробу такие драйвера, но у меня они были в корпусе soic16. Ждут на полке своего часа.
А почему Вы всё одним цветом сделали? (минуты часы секунды)
лента позволяет сделать разные цвета + разную яркость
и ещё можно было 12 часовых отметок добавить
Только зачем вы ее на стенку повесили? на исходном месте интересней должно быть. На стенке палец всовывать надо а там — сел и все сразу видно, плюс можно замутить вариативность подсветки в зависимости от длинны или результата.
для подсчета бабочек и спектра радуги прийдется допилить пару датчиков, но там ардуинка уже есть, дело за малым, на гиктаймсе на днях раз был обзор девайса для измерения скорости, можно воспользоваться…
Могу подкинуть идеек что можно улучшить:
1) Светящиеся СИДы видно лучше, чем тени, но вы захотели тени, хозяин — барин.
2) Попробуйте сделать разделения по цветам, например, часовой СИД — красным, минутный — синий, секундный блёкло-зелёным. А ещё лучше подсвечивать так, как вы, но вместо белого тенесоздающего СИДа зажигать его цветом на вроде Белый- (минус) зелёный, а с противоположной стороны зелёным. Так у вас получится более контрастная картинка. Для предотвращения эффекта зеркальной стрелки можно слегка подсветить (продолжу с теми же цветами) чуть зелёным светом около тенесоздающего СИДа.
Из видео этого, к сожалению, сделать невозможно :(
Значит просто остановлюсь на Ваших словах: они отличаются
п.с. отзывы также подняли настроение)))
ну или подешевле — простой съемный протезик ..))
Давайте обзор того, к чему ни язык, а руки и голову нужно приложить. Там и постебемся.
А кота не трогать грязными руками!
Редкий
проктологспециалист, по сильно ужатой фотографии, поставит коту такой диагноз.Коту уже семь лет, но зубы у него в полном порядке. Питание и уход у кота такие, что можете позавидовать.
Ну 7 лет, таки старый.
Завидовать питанию кота не буду, так как выпадение мелких передних зубов зависит не от питания, а от возраста:)
Да и как-то не обвинял я тебя в ненадлежащем уходе или в выбивании зубов котяре :)
На стене.
На холодильнике
часамэлементу интерьера, чтобы посмотреть время — обидно. Как раз время хочется увидеть с дивана и сразу! )Именно ваш вариант с удачно подобранным тазом натолкнул на идею сделать отображение времени просто цветом: на полупрозрачной рамке как раз бы смотрелось здорово, насколько мне отсюда видится. Какой цвет для минут и секунд — дело вкуса, а гости пусть гадают где минутная, где секундная стрелка ) Надобность отображения секунд только под вопросом тогда: часы таки должны успокаивать, а не показывать, как мерно, не быстро, но неумолимо утекает время… А неумолимо мерно движущийся огонёк быть может будет мешать картинке, возможно.
В общем минуты и часы отображать цветом, остальное так же белой подсветкой плюс в темноте гасить общую яркость. И, как мне отсюда видится, выйдет здорово. Спасибо за идею!