Большие часы на адресных светодиодах WS2812B

12.01.2019
1
0
1
#21
Классная работа. Давно искал что то подобное. Собираюсь повторить. Автору респект. Да, не обгонит жало его паяльника! Собирал на матрицах, но уже не интересно.
 
05.02.2019
5
0
1
#22
хорошие часы получились.долго искал программу........нашёл спасибо пацаны.а то одна схема по ютубу гуляет,с ошибками.
 
17.02.2019
1
0
1
#23
Здравствуйте, ребят помогите, я код переделал под 3 светика но часы не запускаются, под 4 светика работают, вот переделанный мною код
 

Вложения

27.02.2019
11
0
1
#25
Доброго времени суток. Подскажите пожалуйста в чем может быть причина? 15513008845387078602556412797291.jpg 15513008845387078602556412797291.jpg 15513009579913280492586254265264.jpg Часы показывают текущий час и переключаются на продающий затем обратно текущий и снова последующий. С частотой раза 2 в секунду.
 
27.02.2019
11
0
1
#31
В программировании не то что "0" а скорее даже минус.
Может быть кто-то знающий поправит скетч на кнопки управления (убрать их вообще)


#include <DS3232RTC.h>
#include <TimeLib.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>


#define NUM_LEDS 114 // 4*7*4 +2 Number of LED controlled
#define COLOR_ORDER GRB // Define color order for your strip
#define LED_PIN 6 // Data pin for led comunication
#define DST_PIN 5 // Define DST adjust button pin
#define MIN_PIN 4 // Define Minutes adjust button pin
#define HUR_PIN 3 // Define Hours adjust button pin

CRGB leds[NUM_LEDS]; // Define LEDs strip
// 0,0,0,0
// 1,1,1,1
// 1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728
byte digits[12][28] = {{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 0
{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1}, // Digit 1
{1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0}, // Digit 2
{1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}, // Digit 3
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1}, // Digit 4
{1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1}, // Digit 5
{1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 6
{0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1}, // Digit 7
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 8
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1}, // Digit 9 | 2D Array for numbers on 7 segment
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0}, // Digit *0
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0}}; // Digit C

bool Dot = true; //Dot state
bool DST = false; //DST state
bool TempShow = true;
int last_digit = 0;

// int ledColor = 0x0000FF; // Color used (in hex)
long ledColor = CRGB::DarkOrchid; // Color used (in hex)
//long ledColor = CRGB::MediumVioletRed;
//Random colors i picked up
long ColorTable[16] = {
CRGB::Amethyst,
CRGB::Aqua,
CRGB::Blue,
CRGB::Chartreuse,
CRGB::DarkGreen,
CRGB::DarkMagenta,
CRGB::DarkOrange,
CRGB::DeepPink,
CRGB::Fuchsia,
CRGB::Gold,
CRGB::GreenYellow,
CRGB::LightCoral,
CRGB::Tomato,
CRGB::Salmon,
CRGB::Red,
CRGB::Orchid
};


void setup(){
Serial.begin(9600);
Wire.begin();
FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
LEDS.setBrightness(75); // Set initial brightness
pinMode(DST_PIN, INPUT_PULLUP); // Define DST adjust button pin
pinMode(MIN_PIN, INPUT_PULLUP); // Define Minutes adjust button pin
pinMode(HUR_PIN, INPUT_PULLUP); // Define Hours adjust button pin

}

// Get time in a single number, if hours will be a single digit then time will be displayed 155 instead of 0155
int GetTime(){
tmElements_t Now;
RTC.read(Now);
//time_t Now = RTC.Now();// Getting the current Time and storing it into a DateTime object
int hour=Now.Hour;
int minute=Now.Minute;
int second =Now.Second;
if (second % 2==0) {Dot = false;}
else {Dot = true;};
return (hour*100+minute);
};


// Convert time to array needet for display
void TimeToArray(){
int Now = GetTime(); // Get time

int cursor = 114; // last led number

// Serial.print("Time is: ");Serial.println(Now);
if (DST){ // if DST is true then add one hour
Now+=100;
// Serial.print("DST is ON, time set to : ");Serial.println(Now);
};
if (Dot){leds[57]=ledColor;
leds[56]=ledColor;}
else {leds[57]=0x000000;
leds[56]=0x000000;
};

for(int i=1;i<=4;i++){
int digit = Now % 10; // get last digit in time
if (i==1){
// Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");

cursor = 86;

for(int k=0; k<=27;k++){
// Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
// Serial.println();

if (digit != last_digit)
{
cylon();
ledColor = ColorTable[random(16)];
}
last_digit = digit;

}
else if (i==2){
// Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");

cursor =58;

for(int k=0; k<=27;k++){
// Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
// Serial.println();
}
else if (i==3){
// Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
cursor =28;
for(int k=0; k<=27;k++){
// Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
// Serial.println();
}
else if (i==4){
// Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
cursor =0;
for(int k=0; k<=27;k++){
// Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
// Serial.println();
}
Now /= 10;
};
};

// Convert temp to array needet for display
void TempToArray(){
tmElements_t tm;
RTC.read(tm);

if (tm.Second != 27) {
TempShow = false;
return;
}
TempShow = true;
int t = RTC.temperature();
int celsius = (t / 4.0) * 100;

Serial.print("Temp is: ");Serial.println(celsius);

int cursor = 114; // last led number

leds[57]=0x000000;
leds[56]=0x000000;

for(int i=1;i<=4;i++){
int digit = celsius % 10; // get last digit in time
if (i==1){
Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");

cursor = 86;

for(int k=0; k<=27;k++){
Serial.print(digits[11][k]);
if (digits[11][k]== 1){leds[cursor]=ledColor;}
else if (digits[11][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==2){
Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");

cursor =58;

for(int k=0; k<=27;k++){
Serial.print(digits[10][k]);
if (digits[10][k]== 1){leds[cursor]=ledColor;}
else if (digits[10][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==3){
Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
cursor =28;
for(int k=0; k<=27;k++){
Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==4){
Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
cursor =0;
for(int k=0; k<=27;k++){
Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
celsius /= 10;
};
};


void DSTcheck(){
int buttonDST = digitalRead(2);
// Serial.print("DST is: ");Serial.println(DST);
if (buttonDST == LOW){
if (DST){
DST=false;
// Serial.print("Switching DST to: ");Serial.println(DST);
}
else if (!DST){
DST=true;
// Serial.print("Switching DST to: ");Serial.println(DST);
};
delay(500);
};
}

void TimeAdjust(){
int buttonH = digitalRead(HUR_PIN);
int buttonM = digitalRead(MIN_PIN);
if (buttonH == LOW || buttonM == LOW){
delay(500);
tmElements_t Now;
RTC.read(Now);
int hour=Now.Hour;
int minutes=Now.Minute;
int second =Now.Second;
if (buttonH == LOW){
if (Now.Hour== 23){Now.Hour=0;}
else {Now.Hour += 1;};
}else {
if (Now.Minute== 59){Now.Minute=0;}
else {Now.Minute += 1;};
};
RTC.write(Now);
}
}

/* coool effect function*/
void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds.nscale8(250); } }


void cylon () {
static uint8_t hue = 0;
Serial.print("x");
// First slide the led in one direction
for(int i = 0; i < NUM_LEDS; i++) {
// Set the i'th led to red
leds = CHSV(hue++, 255, 255);
// Show the leds
FastLED.show();
// now that we've shown the leds, reset the i'th led to black
// leds = CRGB::Black;
fadeall();
// Wait a little bit before we loop around and do it again
delay(10);
}
Serial.print("x");

// Now go in the other direction.
for(int i = (NUM_LEDS)-1; i >= 0; i--) {
// Set the i'th led to red
leds = CHSV(hue++, 255, 255);
// Show the leds
FastLED.show();
// now that we've shown the leds, reset the i'th led to black
// leds = CRGB::Black;
fadeall();
// Wait a little bit before we loop around and do it again
delay(10);
}
}

void loop() // Main loop
{
DSTcheck(); // Check DST
TimeAdjust(); // Check to se if time is geting modified
TimeToArray(); // Get leds array with required configuration
TempToArray();
FastLED.show(); // Display leds array
if (TempShow == true) delay (8000);
}
 
31.01.2019
20
4
3
#36
Ну судя по названию ролика намекают на подключение. Поэтому наверное нужно их просто отключить тут
#define DST_PIN 5 // Define DST adjust button pin
#define MIN_PIN 4 // Define Minutes adjust button pin
#define HUR_PIN 3 // Define Hours adjust button pin

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

Wan-Derer

Модератор
Команда форума
31.07.2018
917
131
43
Москва
wan-derer.ru
#37
@Somikv, Здесь так. Либо ты тратишь своё время и изучаешь тему, либо идёшь в раздел "Ищу разработчика" и кто-то тратит своё время ради тебя.
 
31.01.2019
20
4
3
#38
Да ладно что уж так жестоко то. В какую тему не зайду везде на...уй шлют :) Нельзя же так. Если никто не отвечает то и понятно что не хотят ломать голову.

З.Ы. По по воду вопрос, я лично не совсем понимаю что нужно. Есть какая то проблема, что то надо искать в коде....сам понимаешь разбирать чей то код никто не хочет. Задай направляющие вопросы что бы тебе смогли помочь не делая всю работу за тебя и не тратя свое время более 5 минут скажем так.
 
27.02.2019
4
1
3
#39
Уважаемый автор, слёзно умоляю - выложите пожалуйста библиотеки , которые использовались в этом проекте. Перебрал их уже огромное количество, но постоянные ошибки, даже если не изменяю ваш код под себя. Буду вам очень признателен.
 
27.02.2019
11
0
1
#40
Проблема мигания была решена удаление DST. Кнопки настройки времени и переход летнее - зимнее время были удалены со схемы. Время выставляется отдельным скетчем. Библиотеки, скетч настройки времени, скетч основной программы часов прикрепляю. Вдруг кому пригодиться.
 

Вложения