Есть предположение что строки 168 и 169 должны выглядеть вот так leds[14]=0x000000;leds[15]=0x000000;
Несомненно. Значения 42 и 43 остались от варианта с 86 диодами. Еще один пример того, о чем я писал в сообщении #85. Номера диодов для точек тоже надо определить константами
По поводу отключения, возможно перегрев. Вы питаете диоды отдельно от ардуино? У меня, когда питание идет через USB ардуино, она начинает сильно греться и глючить.
Забудьте о питании силовых нагрузок (а много LED это уже силовая) от USB и(или) ардуины. Сгорит стаб на ардуине, хрен с ним, но если спалите порт, это совсем другие деньги на ремонт. Питайте на здоровье датчики, несколько светиков 5мм, экранчик LCD, но не больше. ИМХО.
Питаю от бП 5в 1а, паралельно на дуино и на ленту, поставил кондер 1000мф и резик на линию данных 340 Ом. лента врядли перегревается, тактильно она холодная да и каждые 1-2 мин меняется цвет. Светодиодов всего 30, я сначала думл что будет тускло но нет, пол комнаты ночью освещает, не понимаю для чего 3-5 ставят, разве что на часы на всю стену.
Покажу что у меня получилось в итоге. За основу взяты часы Электроника 7. У них газорязрядные трубки. Они сели от времени и уже прктически ничего не разглядеть на циферблате. А почему бы не реанимировать его под современные технологии. К тому же дома этот проект уже работает. И так
1. Долой устаревшие потроха
2. Заменяем кучу всего, несколькими платами и датчиками
3. Кнопки оставил родные. Идеально сохранились и работют как надо. И концы удачно входят в боард. Единственно что, это встроил гнездо для блока питания рядом с управляющим тех. разъёмом.
4. Несколько неустранимых и не особо значимых минусов сего "творения". На экране шло зеленое стекло. В СССР разноцветное стекло было особой фишкой всего. От витрины магазина до защитного козырька от солнца в Москвиче. Стекло это оказалось ещё и закрашено черной краской для выделения цифры и точки. Краску я конечно сцарапал для мигающих точек, но не особо ровно (думаю исправлю). Материал подложки, вспененный полистирол 0,5мм тонковат и светопрозрачен. Я конечно попытался его заматовать черной краской из балона, но не очень получилось. Краска осыпается от долгого вошканья. Дома я делал из утеплителя пеноплекса. В итоге у меня получилось это
Далее начались маянья с кодом. Почти все потуги были запрошены на этом чудном форуме. Спасибо Доброму человеку который помогал и подсказывал. Код приведен в действие и отображает тот минимум за которым я сюда и пришел. Конечно в ходе работы захотелось большего. Был прилеплен BMP180 и попытка внедрить код хотя бы приблизительно, довела до того, что код перестал компилироваться. А что и где изменял и добавлял, я не всегда коментировал. В итоге взял последний рабочий с температурой от модуля времени. Потом уже роя инет я наткнулся на какой то форум где тоже пытались объеденить несколько кодов. И кто то из умников сказал что эти коды не совместимы из за (кажется) условия delay. Ну в общем не мне судить. Нет так нет. Жаль. Попытаюсь хотя бы DHT прикрутить. Потом здесь появился ещё один "часовщик" и ему подсказали ответ на вопрос который и меня давно мучал: Как отключить моргалики каждую минуту. Спасибо. Смена цвета отключена. Конечный код я смогу разместить только завтра. Он как и часы, на работе
Позже если будет можно выложу фото домашних часов.
Извиняюсь что так много получилось, не нашел кнопку спойлер
Одиночка, что касается смены цвета - я думаю совсем от него отказаться не стоит - будет скучно. Предлагаю оставить смену цвета, но сделать ее пореже - раз в час или раз в сутки...
Если еще какие простенькие модификации кода нужны - пишите, если не сложно - поправлю.
смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой. или сделать на эту кнопку что то вроде меню, в котором можно выбрать к примеру один из 10 или 20 предустановленных цветов, там же в меню выбрать время отображения температуры, даты,дня недели и пр... выбрать режим регулировки яркости (от датчика освещения, в ручную или по времени)
смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой. или сделать на эту кнопку что то вроде меню, в котором можно выбрать к примеру один из 10 или 20 предустановленных цветов, там же в меню выбрать время отображения температуры, даты,дня недели и пр... выбрать режим регулировки яркости (от датчика освещения, в ручную или по времени)
Вот и я того же хочу. DST не нужна. Перехода на летнее/зимнее нету.
Для вашей коллекции фото выше. Окончательный код который работает и выполняет минимум прилагаю
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>
#define NUM_LEDS 86 // Задаём значение сколько у нас светодиодов.
#define COLOR_ORDER BGR // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13
//#define BRIGHTNESS 150
CRGB leds[NUM_LEDS]; //Задаём значение светодиодов
byte digits[13][21] = {
{0,0,0, 1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1}, // Digit 0
{0,0,0, 1,1,1 ,0,0,0 ,0,0,0 ,0,0,0 ,0,0,0 ,1,1,1}, // Digit 1
{1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,1,1,1 ,1,1,1 ,0,0,0}, // Digit 2
{1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,0,0,0 ,1,1,1 ,1,1,1}, // Digit 3
{1,1,1 ,1,1,1 ,0,0,0 ,1,1,1 ,0,0,0 ,0,0,0 ,1,1,1}, // Digit 4
{1,1,1 ,0,0,0 ,1,1,1 ,1,1,1 ,0,0,0 ,1,1,1 ,1,1,1}, // Digit 5
{1,1,1 ,0,0,0 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1}, // Digit 6
{0,0,0 ,1,1,1 ,1,1,1 ,0,0,0 ,0,0,0 ,0,0,0 ,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}, // Digit 8
{1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,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 ,0,0,0 ,0,0,0 ,0,0,0}, // Digit *0
{0,0,0 ,0,0,0 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,0,0,0}, // Digit C
{1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,0,0,0}}; // Digit P
bool Dot = true;
//bool DST = false; // DCT false
bool TempShow = true;
int last_digit = 0;
long ledColor = CRGB::Salmon; // Используемый цвет
//long ledColor = CRGB::MediumVioletRed;
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,
CRGB::DarkOrchid
};
void setup(){
Serial.begin(9600);
Wire.begin();
LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
//LEDS.setBrightness(75); // Задаём яркость
// pinMode(4, INPUT_PULLUP); // Кнопка регулировки режимов изменилась привязка
pinMode(3, INPUT_PULLUP); // Кнопка регулировки минут изменилась привязка
pinMode(2, INPUT_PULLUP); // Кнопка регулировки часов изменилась привязка
}
// снова датчик света
//Массив управляет яркостью
void BrightnessCheck()
{
const byte sensorPin = 6; //BRI_PIN
//const byte brightnessLow = 50;
//const byte brightnessHigh = 255;
int sensorValue = analogRead(sensorPin);
Serial.print("Ambient is: ");
Serial.println(sensorValue);
sensorValue = map(sensorValue,255, 0, 10, 254);
LEDS.setBrightness(sensorValue);
// if (sensorValue <= 10) {LEDS.setBrightness(brightnessLow);}//если темно то минимум
// else {LEDS.setBrightness(brightnessHigh);}//если светло то максимум
};
// Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155 вместо 0155
int GetTime(){
tmElements_t Now;
RTC.read(Now);
//time_t Now = RTC.Now();// Получаем данные текущего времени и его хранение
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);
};
// Преобразуем время в массив для отображание
void TimeToArray() {
int Now = GetTime(); // Получаем время
int cursor = NUM_LEDS;// Задаём значение сколько у нас светодиодов
if (Dot) {
leds[42] = ledColor; //координаты мигающих точек
leds[43] = ledColor; //координаты мигающих точек
}
else {
leds[42] = 0x000000; //координаты мигающих точек
leds[43] = 0x000000; //координаты мигающих точек
};
for(int i=1;i<=4;i++){
int digit = Now % 10; // Получаем последнюю цифру в времени
if (i==1){
cursor = 65;
for(int k=0; k<=20;k++){
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
if (digit != last_digit)
{
// cylon (); // цикличное изменение цветов
// ledColor = ColorTable[random(16)]; // цикличное изменение цветов
}
last_digit = digit;
}
else if (i==2){
cursor =44;
for(int k=0; k<=20;k++){
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
}
else if (i==3){
cursor =21;
for(int k=0; k<=20;k++){
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
}
else if (i==4){
cursor =0;
for(int k=0; k<=20;k++){
// Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
}
Now /= 10;
};
};
// Преобразуем всё это в массив для отображение
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 = NUM_LEDS; // Задаём значение сколько у нас светодиодов
leds[42]=0x000000;
leds[43]=0x000000;
for(int i=1;i<=4;i++){
int digit = celsius % 10; // Получаем последнюю цифру во времени
if (i==1){
Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
cursor = 65;
for(int k=0; k<=20;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 =44;
for(int k=0; k<=20;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 =21;
for(int k=0; k<=20;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<=20;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 TimeAdjust(){
int buttonH = digitalRead(2);
int buttonM = digitalRead(3);
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);
}
}
//Меняем эффекты
void fadeall() {
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } }
// массив отвечает за цикличное изменение цветов
void cylon () {
static uint8_t hue = 0;
Serial.print("x");
// Сдвигаем один светодиод в любом направлении
for(int i = 0; i < NUM_LEDS; i++) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
Serial.print("x");
// Сдвигаем один светодиод в любом направлении
for(int i = (NUM_LEDS)-1; i >= 0; i--) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
}
void loop()
{
BrightnessCheck(); // Проверяем датчик
// DSTcheck(); // Проверяем режимы, не нужен
TimeAdjust(); // Проверяем время если сменилось на 1 цифру
TimeToArray(); // Проверяем часы если сменилось на 1 цифру
TempToArray();
FastLED.show(); // Задаём массив светодиодов
if (TempShow == true) delay (8000);
}
OdinochkA. dj-toha , Taras9696 - пересписал ваш код, что бы работал независимо от числа светиков в ленте. У меня не на чем проверить, кто-нибудь сможет залить в свои часы и посмотреть, все ли работает?
OdinochkA. dj-toha , Taras9696 - пересписал ваш код, что бы работал независимо от числа светиков в ленте. У меня не на чем проверить, кто-нибудь сможет залить в свои часы и посмотреть, все ли работает?
За основу взят код из сообщения №109. По идее, единственный параметр, которые нуждается в настройке - это число светодиодов в сегменте(строка 6) - у Одиночки оно должно быть 3, а у Тараса - 1
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>
#define LEDS_IN_SEGMENT 3 // Задаём сколько у нас светодиодов в сегменте.
#define COLOR_CHANGE 0 // ( 0 - NEVER, 1 - once a minute, 2 - every 10 min, 3 - hourly, 4 - every 10 hrs)
#define NUM_COLORS 16
#define COLOR_ORDER BGR // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13
//#define BRIGHTNESS 150
// Вычислемые константы, НЕ РЕДАКТИРОВАТЬ!
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + 2)
#define DOT1 (LEDS_IN_SEGMENT * 14)
#define DOT2 (LEDS_IN_SEGMENT * 14 + 1)
CRGB leds[NUM_LEDS]; //Задаём значение светодиодов
uint8_t digits[] = {
0b00111111, // Digit 0
0b00100001, // Digit 1
0b01110110, // Digit 2
0b01110011, // Digit 3
0b01101001, // Digit 4
0b01011011, // Digit 5
0b01011111, // Digit 6
0b00110001, // Digit 7
0b01111111, // Digit 8
0b01111011, // Digit 9
0b01111000, // Digit *0
0b00011110, // Digit C
0b01111100, // Digit P
};
bool Dot = true;
//bool DST = false; // DCT false
bool TempShow = true;
int last_digit = 0;
long ledColor = CRGB::Salmon; // Используемый цвет
//long ledColor = CRGB::MediumVioletRed;
long ColorTable[NUM_COLORS] = {
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,
CRGB::DarkOrchid
};
void setup(){
Serial.begin(9600);
Wire.begin();
LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
//LEDS.setBrightness(75); // Задаём яркость
// pinMode(4, INPUT_PULLUP); // Кнопка регулировки режимов изменилась привязка
pinMode(3, INPUT_PULLUP); // Кнопка регулировки минут изменилась привязка
pinMode(2, INPUT_PULLUP); // Кнопка регулировки часов изменилась привязка
}
void BrightDots (boolean Dot_On) {
leds[DOT1]=(Dot_On) ? ledColor : 0;
leds[DOT2]=(Dot_On) ? ledColor : 0;
}
void BrightDigit (uint8_t digit, uint8_t cursor) {
for (uint8_t mask = 0b01000000; mask >0; mask = mask >> 1){
for (uint8_t i =0; i <LEDS_IN_SEGMENT; i++) {
leds[cursor]=(digit & mask) ? ledColor : 0;
cursor ++;
}
}
}
// снова датчик света
//Массив управляет яркостью
void BrightnessCheck()
{
const byte sensorPin = 6; //BRI_PIN
//const byte brightnessLow = 50;
//const byte brightnessHigh = 255;
int sensorValue = analogRead(sensorPin);
Serial.print("Ambient is: ");
Serial.println(sensorValue);
sensorValue = map(sensorValue,255, 0, 10, 254);
LEDS.setBrightness(sensorValue);
// if (sensorValue <= 10) {LEDS.setBrightness(brightnessLow);}//если темно то минимум
// else {LEDS.setBrightness(brightnessHigh);}//если светло то максимум
};
// Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155 вместо 0155
int GetTime(){
tmElements_t Now;
RTC.read(Now);
//time_t Now = RTC.Now();// Получаем данные текущего времени и его хранение
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);
};
// Преобразуем время в массив для отображание
void TimeToArray() {
int Now = GetTime(); // Получаем время
BrightDots(Dot);
for(int i=1;i<=4;i++){
int digit = Now % 10; // Получаем последнюю цифру в времени
int cursor = NUM_LEDS - i * LEDS_IN_SEGMENT * 7;
if (i > 2){ cursor -= 2; }
BrightDigit(digits[digit],cursor);
if ( i == COLOR_CHANGE) {
if (digit != last_digit)
{
cylon (); // цикличное изменение цветов
ledColor = ColorTable[random(NUM_COLORS)]; // цикличное изменение цветов
}
last_digit = digit;
}
Now /= 10;
};
};
// Преобразуем Temp в массив для отображение
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);
BrightDots(0);
BrightDigit(digits[11],(NUM_LEDS - LEDS_IN_SEGMENT * 7));
BrightDigit(digits[10],(NUM_LEDS - LEDS_IN_SEGMENT * 14));
int digit = celsius % 10;
BrightDigit(digits[digit],(NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2));
celsius /= 10;
digit = celsius % 10;
BrightDigit(digits[digit],(NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2));
};
// Массив управляет кнопками с часами и минутами
void TimeAdjust(){
int buttonH = digitalRead(2);
int buttonM = digitalRead(3);
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);
}
}
//Меняем эффекты
void fadeall() {
for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } }
// массив отвечает за цикличное изменение цветов
void cylon () {
static uint8_t hue = 0;
Serial.print("x");
// Сдвигаем один светодиод в любом направлении
for(int i = 0; i < NUM_LEDS; i++) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
Serial.print("x");
// Сдвигаем один светодиод в любом направлении
for(int i = (NUM_LEDS)-1; i >= 0; i--) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
}
void loop()
{
BrightnessCheck(); // Проверяем датчик
// DSTcheck(); // Проверяем режимы, не нужен
TimeAdjust(); // Проверяем время если сменилось на 1 цифру
TimeToArray(); // Проверяем часы если сменилось на 1 цифру
TempToArray();
FastLED.show(); // Задаём массив светодиодов
if (TempShow == true) delay (8000);
}
За основу взят код из сообщения №109. По идее, единственный параметр, которые нуждается в настройке - это число светодиодов в сегменте(строка 6) - у Одиночки оно должно быть 3, а у Тараса - 1
Код рабочий. Часы идут. Выставил смену цвета на час. Это радует. Благодарю Вас за помощь.
Осталось одно НО. При ручной корректировке минут кнопкой, часы снова идут в радугу по кругу как при смене цвета. Т.е. нет такого что нажал и минуты побежали. ДЛя убирания этого эффекта нужно закоментировать блок со строки 186 по 216. Минуты начинают щёлкаться без радуги
case0: установка цветовой схемы (задаём цвет всех элементов или цветового режима 0,1,2 менять цвет каждую мин, час, 12час и 4,5,6,7....18,19 16 цветов на выбор)
case1: установка яркости (меняем яркость от автояркости по датчику освещения A, до выбранного в ручную 0-255 с шагом +/-5) А-0-255
case2: установка времени отображения температуры (время показа температуры с шагом +/-1 сек)
case3: установка времени час (с шагом +/-1 час)
case4: установка времени минуты (с шагом +/-1 минута)
Осталось одно НО. При ручной корректировке минут кнопкой, часы снова идут в радугу по кругу как при смене цвета. Т.е. нет такого что нажал и минуты побежали. ДЛя убирания этого эффекта нужно закоментировать блок со строки 186 по 216. Минуты начинают щёлкаться без радуги
Поясните пожалуйста - радуга при смене времени - это проблема появилась только в моем коде или в коде из #109 было так же? - просто я ничего, касающегося установки времени - не менял, оставил так же, как было в вашем скетче.
а если от сюда позимствовать и портануть меню с настройками часов в наш скетч
Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)
а если от сюда позимствовать и портануть меню с настройками часов в наш скетч
Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)
Поздравляю, Шарик, ты попал... Теперь будешь все дикие идеи в скретче реализовывать.
Поясните пожалуйста - радуга при смене времени - это проблема появилась только в моем коде или в коде из #109 было так же? - просто я ничего, касающегося установки времени - не менял, оставил так же, как было в вашем скетче.
НЕт. Я изначально выложил закоментированным блоком, но пока часы висели появился какой то глюк. Часы убегали сами собой. Я подумал, что из-за этого блока. И раскоментировал его. НО видимо проблема была в железе. Провода кнопочные в боарде плохо держались. Поправил и глюк ушёл. И я снова у себя закоментировал блок. А тут забыл внести изменения.
Под радугой я принимал смену цветности при нажатии кнопки минуты. Получалось: нажал минуту-радуга пробежала-цвет сменился-минута прибавилась, ещё раз нажал, снова радуга, и т.д.
Под радугой я принимал смену цветности при нажатии кнопки минуты. Получалось: нажал минуту-радуга пробежала-цвет сменился-минута прибавилась, ещё раз нажал, снова радуга, и т.д.
Так будет, если смена цвета выставлена раз в минуту. Если раз в час - с минутами так быть не должно, зато будет при смене часов :)
Ну это логичное поведение... тут нет ошибки. Может быть придумаю, как исправить на следующем этапе :)
Дальше я планировал переписать вывод времени на экран - чтобы перерисовывать картинку раз в минуту, а не 10 раз секунду выводить одно и то же, как сейчас. Заодно и интервал показа температуры можно будет задавать произвольно, и может и проблема с радугой решится.
Ну это логичное поведение... тут нет ошибки. Может быть придумаю, как исправить на следующем этапе :)
Дальше я планировал переписать вывод времени на экран - чтобы перерисовывать картинку раз в минуту, а не 10 раз секунду выводить одно и то же, как сейчас. Заодно и интервал показа температуры можно будет задавать произвольно, и может и проблема с радугой решится.
Не стоит заморачиваться. Просто мне допустим это не нравилось, допустим часы далеко от компа нужно поправить минут 20-25, остаётся только вариант с кнопкой, но пока с этой радугой выставишь, некоторое время потеряешь. Вот я и убрал этот блок. Минуты теперь бегут быстро. А другим может это в самый раз.
Если у вас есть время и возможность подскажите лучше как всё таки перенести сменность цвета кнопкой. Чтоб не от времени зависеть, а как сказал dj-toxa
dj-toxa пишет:
смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой............
Я вроде все для кнопки нашел, а как привязать к переменной по смене цвета не получается ((
И интервал с температурой у нас сейчас Вывод температуры раз в минуту.
Если у вас есть время и возможность подскажите лучше как всё таки перенести сменность цвета кнопкой. Чтоб не от времени зависеть, а как сказал dj-toxa
dj-toxa пишет:
смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой............
честно говоря, я вообще в вашем коде никакой кнопки DST не вижу, наверно слепой - можете строчку подсказать?
Сделать на кнопку не должно быть сложно - посмотрю. Если у вас уже есть наработки - выкладывайте, может там всего пару строк осталось поправить.
а если от сюда позимствовать и портануть меню с настройками часов в наш скетч
Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)
ну к примеру вместо первой цифры выводить либо номер раздела меню, либо рисуем буквы. например так нажал кнопку menu попал в первый раздел menu, кнопками +/- вибираем нужное.
case0: установка цветовой схемы (задаём цвет всех элементов или цветового режима 0,1,2 менять цвет каждую мин, час, 12час и 4,5,6,7....18,19 16 цветов на выбор)
цветовая схема рисуем на экране С_00 например для первого цветого режима, С_01 для второго и т.д. далее еще раз жмем menu попадаем в установки яркости
case1: установка яркости (меняем яркость от автояркости по датчику освещения A, до выбранного в ручную 0-255 с шагом +/-5) А-0-255
установки яркости рисуем на экране Br_A автоматический режим яркости, жмем + переходим в ручной режим выбора яркости от В__0 до В255. далее еще раз жмем menu попадаем в установки времени отображения температуры
case2: установка времени отображения температуры (время показа температуры с шагом +/-1 сек)
установки времени отображения температуры рисуем на экране t_00 и к примеру до t_10 и т.д. далее еще раз жмем menu попадаем в установки часов
case3: установка времени час (с шагом +/-1 час)
установка часов рисуем H_00 от 00 до 24
и еще раз menu установки минут
case4: установка времени минуты (с шагом +/-1 минута)
Теперь получается, что цвет может меняться по времени. Если закоментировать блок смены цвета, время будет меняться только по кнопке. Кнопка смены цвета на Pin 4. Прям огромнейшее спасибо всем участвовашим в этом (безобразии) ПРОЕКТЕ
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>
#define LEDS_IN_SEGMENT 3 // Задаём сколько у нас светодиодов в сегменте.
#define COLOR_CHANGE 0 // ( 0 - NEVER, 1 - once a minute, 2 - every 10 min, 3 - hourly, 4 - every 10 hrs)
#define NUM_COLORS 16
#define COLOR_ORDER BGR // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13
//#define BRIGHTNESS 150
// Вычислемые константы, НЕ РЕДАКТИРОВАТЬ!
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + 2)
#define DOT1 (LEDS_IN_SEGMENT * 14)
#define DOT2 (LEDS_IN_SEGMENT * 14 + 1)
CRGB leds[NUM_LEDS]; //Задаём значение светодиодов
uint8_t digits[] = {
0b00111111, // Digit 0
0b00100001, // Digit 1
0b01110110, // Digit 2
0b01110011, // Digit 3
0b01101001, // Digit 4
0b01011011, // Digit 5
0b01011111, // Digit 6
0b00110001, // Digit 7
0b01111111, // Digit 8
0b01111011, // Digit 9
0b01111000, // Digit *0
0b00011110, // Digit C
0b01111100, // Digit P
};
bool Dot = true;
bool DST = false; // DCT false
bool TempShow = true;
int last_digit = 0;
long ledColor = CRGB::Salmon; // Используемый цвет
//long ledColor = CRGB::MediumVioletRed;
long ColorTable[NUM_COLORS] = {
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,
CRGB::DarkOrchid
};
void setup() {
Serial.begin(9600);
Wire.begin();
LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
//LEDS.setBrightness(75); // Задаём яркость
pinMode(4, INPUT_PULLUP); // Кнопка смены цветов
pinMode(3, INPUT_PULLUP); // Кнопка регулировки минут
pinMode(2, INPUT_PULLUP); // Кнопка регулировки часов
}
void BrightDots (boolean Dot_On) {
leds[DOT1] = (Dot_On) ? ledColor : 0;
leds[DOT2] = (Dot_On) ? ledColor : 0;
}
void BrightDigit (uint8_t digit, uint8_t cursor)
{
for (uint8_t mask = 0b01000000; mask > 0; mask = mask >> 1)
{
for (uint8_t i = 0; i < LEDS_IN_SEGMENT; i++)
{
leds[cursor] = (digit & mask) ? ledColor : 0;
cursor ++;
}
}
}
// снова датчик света
//Массив управляет яркостью
void BrightnessCheck()
{
const byte sensorPin = 6;
//const byte brightnessLow = 50;
//const byte brightnessHigh = 255;
int sensorValue = analogRead(sensorPin);
Serial.print("Ambient is: ");
Serial.println(sensorValue);
sensorValue = map(sensorValue, 255, 0, 10, 254);
LEDS.setBrightness(sensorValue);
// if (sensorValue <= 10) {LEDS.setBrightness(brightnessLow);}//если темно то минимум
// else {LEDS.setBrightness(brightnessHigh);}//если светло то максимум
};
// Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155 вместо 0155
int GetTime()
{
tmElements_t Now;
RTC.read(Now);
//time_t Now = RTC.Now();// Получаем данные текущего времени и его хранение
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);
};
// Преобразуем время в массив для отображание
void TimeToArray() {
int Now = GetTime(); // Получаем время
BrightDots(Dot);
for (int i = 1; i <= 4; i++) {
int digit = Now % 10; // Получаем последнюю цифру в времени
int cursor = NUM_LEDS - i * LEDS_IN_SEGMENT * 7;
if (i > 2) {
cursor -= 2;
}
BrightDigit(digits[digit], cursor);
if ( i == COLOR_CHANGE) {
if (digit != last_digit)
{
cylon (); // цикличное изменение цветов
ledColor = ColorTable[random(NUM_COLORS)]; // цикличное изменение цветов
}
last_digit = digit;
}
Now /= 10;
};
};
// Преобразуем Temp в массив для отображение
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);
BrightDots(0);
BrightDigit(digits[11], (NUM_LEDS - LEDS_IN_SEGMENT * 7));
BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 14));
int digit = celsius % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2));
celsius /= 10;
digit = celsius % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2));
};
//смена цвета ленты кнопкой DST Pin 4
void DSTcheck() {
int buttonDST = digitalRead(4);
if (buttonDST == LOW) {
ledColor = ColorTable[random(NUM_COLORS)];
};
delay(500);
};
// Массив управляет кнопками с часами и минутами
void TimeAdjust() {
int buttonH = digitalRead(2);
int buttonM = digitalRead(3);
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);
}
}
//Меняем эффекты
void fadeall() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].nscale8(250);
}
}
// массив отвечает за цикличное изменение цветов
void cylon () {
static uint8_t hue = 0;
Serial.print("x");
// Сдвигаем один светодиод в любом направлении
for (int i = 0; i < NUM_LEDS; i++) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
Serial.print("x");
// Сдвигаем один светодиод в любом направлении
for (int i = (NUM_LEDS) - 1; i >= 0; i--) {
// Устанавливаем 1 светодиод на цвет красный
leds[i] = CHSV(hue++, 255, 255);
// Показываем светодиоды
FastLED.show();
fadeall();
// Ждём немного и повторяем цикл
delay(10);
}
}
void loop()
{
BrightnessCheck(); // Проверяем датчик
DSTcheck(); // Проверяем режимы, не нужен
TimeAdjust(); // Проверяем время если сменилось на 1 цифру
TimeToArray(); // Проверяем часы если сменилось на 1 цифру
TempToArray();
FastLED.show(); // Задаём массив светодиодов
if (TempShow == true) delay (8000);
}
Теперь получается, что цвет может меняться по времени. Если закоментировать блок смены цвета, время будет меняться только по кнопке. Кнопка смены цвета на Pin 4.
Хорошо что работает.
А зачем блок смены цвета комментировать? - просто ставьте "COLOR_CHANGE 0" в строке 7 . А нежелательную радугу при настройке времени я уберу - там все тоже не сложно, просто не одна строчка, а чуть больше. Будет свободное время - сделаю.
У вы, но я выхожу из игры( Ардуино или лента выйшла из строя, сначала отрубались часы каждые 20 минут, потом каждые 10, сейчас захожу и наблюдаю что сигменты или не горят или горят не теми цветами, библиотека неопиксель вообще творит неизвестно что) Я так понимаю что это лента, ардуино скорее всего жива( Что самое интересное цвета все горят, что можете посоветовать, как проверить ардуино на всякий?
Беда еще в том что они не разборные, а дырки в стене просверлены, обратного пути нет(
Так, на новой прошивке горит L красным, на старой все пашет, но пашет как показано выше и зависает через 10 мин, что то не уверен что именно лента виновник
а с меню не поможешь? понимаю что хотелок много,но хочется уже сделать эти часы универсальными, с мнеобходимым минимумом настроек, но в то же время что бы каждый мог настроить под себя при желании.
а с меню не поможешь? понимаю что хотелок много,но хочется уже сделать эти часы универсальными, с мнеобходимым минимумом настроек, но в то же время что бы каждый мог настроить под себя при желании.
Ну для начала надо разобраться, почему у Тараса не работает. Может лента, а может в моем коде косяк. Без этого двигаться вперед рано.
У меня лента скорее всего сдохла, на всех прошивких полная ахинея, наверное буду заказывать на 12в(
Отключите от ардуины всё. Оставьте только ленту. Её подключите к своему пину на ардуине через резистор 100-400Ом (у меня идет из набора 220 Ом). Питание подавать сразу и на ленту и на дуню с одного блока.
Далее в Arduino зайдите Файл-Примеры-EEPROM-eeprom_clear. Этим вы очистите всю память. Загрузите скетч в дуню. После этого загружайте скетч который я вам дал для проверки ленты в сообщении №138. Там должна бежать змейка со сменой цветов и другие эффекты. Если лента будет продолжать вести себя не нормально, значит она накрылась и стоит искать другую. Если цвета меняются нормально и по порядку, значит смотрите проблемы в часовом скетче. Проверьте правильность пайки и направления светодиодов.
А если использовать ленту на 12 В, вам ещё придется понижающий модуль ставить, потому как дуне нужно 5 в.
У меня лента ws2812b 5 в. Питаю всё своё хозяство китайским блоком 5в 3 а (хотя можно и побольше ампер с запасом). Блок чуть тёплый, часы светятся на яркости 200. Вы писали что у вас блок на 5в 1а. Не может быть в этом проблема? Мало тока? И попробуйте убрать конденсаторы про которые вы писали. Только лента с резистором, ардуино и питание и код для проверки ленты
подскажите надежную ленту под которую есть прошивки
тут особо не подскажешь и у хороших продовцов бывает попадаются не удачные (косячные) партии лент. но по моему личному опыту 2811 лучше чем 2812 (с 2812 лично мне не везло), но с 2811 есть свои нюансы, а вместо 2812 сейчас появилась 2813, вроде лучше, но тут тоже не знаю возможно лотерея как и с 2812
Если лента будет продолжать вести себя не нормально, значит она накрылась и стоит искать другую.
не обязательно менять всё возможно вылетел первы-второй диод (статика, брак и пр..) и после замены всё будет норм. по питанию обычно 2811 12в, 2812 5в. для подобных часов блока питания 12в 2А хватает за глаза (для 2812 если много диодов (4-5) на сегмент, 3А с небольшим запасиком). самое оптимальное собирать такие часы на 2811 сразу три диода (1 пиксель) на сегмент. единственное что у них цветовая палитра вроде отличается не RGB, а GBR
В общем такие дела, разобрал часы и поменял первые 7 сегментом и последние и все заработало, в трех диодах не пашет синий и в одном остался только зеленый, так что поставил что б только зеленым пахали часы, сейчас часы пашут без перерыва и не выключаются, хочу протестить занутся или нет, что б зря не обклеивать снова.
Поставил на вход ленты резик, так как его там нет, там только конденсатор, питаю от бп на 2а, бп вообще не греется, что еще посоветуете, я так понимаю что рас подохли первые сигменты то это из-за тока, именно в первой восьмерке первые 4 штуки. Хз как еще уберечь попытаться
Я чего думал 2811 тк ток то меньше в этом наверное и надежноть, а дуню можно и через ЛМ317 запитать
Мне думается, что БП вам гадил (был 5В 1А?). Они есть от зарядок с поганой стабилизацией. Ток устанавливается чипом в диоде, здесь вы ничего сделать не сможете, а прыгающее напряжение может и пожечь.
Как, кстати, питающая разводка по лентам сделана, какое сечение провода?
Мне думается, что БП вам гадил (был 5В 1А?). Они есть от зарядок с поганой стабилизацией. Ток устанавливается чипом в диоде, здесь вы ничего сделать не сможете, а прыгающее напряжение может и пожечь.
Как, кстати, питающая разводка по лентам сделана, какое сечение провода?
Да скорее всего БП, тк замерял на слабом просадки 5-3в, сейчас вроде стабильно пашет, но пашет только один день, послежу дня три, да хз какое сечение) на входе провода с комплекта толстые, остальное провода с магнитофона, но все же думаю на источник
Есть предположение что строки 168 и 169 должны выглядеть вот так leds[14]=0x000000;leds[15]=0x000000;
Несомненно. Значения 42 и 43 остались от варианта с 86 диодами. Еще один пример того, о чем я писал в сообщении #85. Номера диодов для точек тоже надо определить константами
По поводу отключения, возможно перегрев. Вы питаете диоды отдельно от ардуино? У меня, когда питание идет через USB ардуино, она начинает сильно греться и глючить.
Забудьте о питании силовых нагрузок (а много LED это уже силовая) от USB и(или) ардуины. Сгорит стаб на ардуине, хрен с ним, но если спалите порт, это совсем другие деньги на ремонт. Питайте на здоровье датчики, несколько светиков 5мм, экранчик LCD, но не больше. ИМХО.
Питаю от бП 5в 1а, паралельно на дуино и на ленту, поставил кондер 1000мф и резик на линию данных 340 Ом. лента врядли перегревается, тактильно она холодная да и каждые 1-2 мин меняется цвет. Светодиодов всего 30, я сначала думл что будет тускло но нет, пол комнаты ночью освещает, не понимаю для чего 3-5 ставят, разве что на часы на всю стену.
30шт белым на максимуме - 1,8А. Одним цветом на максимуме - 0,6А. Для китайского БП, типа на 1А, это уже серьезная нагрузка, помониторьте.
Покажу что у меня получилось в итоге. За основу взяты часы Электроника 7. У них газорязрядные трубки. Они сели от времени и уже прктически ничего не разглядеть на циферблате. А почему бы не реанимировать его под современные технологии. К тому же дома этот проект уже работает. И так
1. Долой устаревшие потроха
2. Заменяем кучу всего, несколькими платами и датчиками
3. Кнопки оставил родные. Идеально сохранились и работют как надо. И концы удачно входят в боард. Единственно что, это встроил гнездо для блока питания рядом с управляющим тех. разъёмом.
4. Несколько неустранимых и не особо значимых минусов сего "творения". На экране шло зеленое стекло. В СССР разноцветное стекло было особой фишкой всего. От витрины магазина до защитного козырька от солнца в Москвиче. Стекло это оказалось ещё и закрашено черной краской для выделения цифры и точки. Краску я конечно сцарапал для мигающих точек, но не особо ровно (думаю исправлю). Материал подложки, вспененный полистирол 0,5мм тонковат и светопрозрачен. Я конечно попытался его заматовать черной краской из балона, но не очень получилось. Краска осыпается от долгого вошканья. Дома я делал из утеплителя пеноплекса. В итоге у меня получилось это
Далее начались маянья с кодом. Почти все потуги были запрошены на этом чудном форуме. Спасибо Доброму человеку который помогал и подсказывал. Код приведен в действие и отображает тот минимум за которым я сюда и пришел. Конечно в ходе работы захотелось большего. Был прилеплен BMP180 и попытка внедрить код хотя бы приблизительно, довела до того, что код перестал компилироваться. А что и где изменял и добавлял, я не всегда коментировал. В итоге взял последний рабочий с температурой от модуля времени. Потом уже роя инет я наткнулся на какой то форум где тоже пытались объеденить несколько кодов. И кто то из умников сказал что эти коды не совместимы из за (кажется) условия delay. Ну в общем не мне судить. Нет так нет. Жаль. Попытаюсь хотя бы DHT прикрутить. Потом здесь появился ещё один "часовщик" и ему подсказали ответ на вопрос который и меня давно мучал: Как отключить моргалики каждую минуту. Спасибо. Смена цвета отключена. Конечный код я смогу разместить только завтра. Он как и часы, на работе
Позже если будет можно выложу фото домашних часов.
Извиняюсь что так много получилось, не нашел кнопку спойлер
Одиночка, что касается смены цвета - я думаю совсем от него отказаться не стоит - будет скучно. Предлагаю оставить смену цвета, но сделать ее пореже - раз в час или раз в сутки...
Если еще какие простенькие модификации кода нужны - пишите, если не сложно - поправлю.
давсё верно это точки отключенные во время показа температуры. лента естественно должна питаться отдельно от arduino иначе дуню спалите
смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой. или сделать на эту кнопку что то вроде меню, в котором можно выбрать к примеру один из 10 или 20 предустановленных цветов, там же в меню выбрать время отображения температуры, даты,дня недели и пр... выбрать режим регулировки яркости (от датчика освещения, в ручную или по времени)
смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой. или сделать на эту кнопку что то вроде меню, в котором можно выбрать к примеру один из 10 или 20 предустановленных цветов, там же в меню выбрать время отображения температуры, даты,дня недели и пр... выбрать режим регулировки яркости (от датчика освещения, в ручную или по времени)
Вот и я того же хочу. DST не нужна. Перехода на летнее/зимнее нету.
Для вашей коллекции фото выше. Окончательный код который работает и выполняет минимум прилагаю
OdinochkA. dj-toha , Taras9696 - пересписал ваш код, что бы работал независимо от числа светиков в ленте. У меня не на чем проверить, кто-нибудь сможет залить в свои часы и посмотреть, все ли работает?
OdinochkA. dj-toha , Taras9696 - пересписал ваш код, что бы работал независимо от числа светиков в ленте. У меня не на чем проверить, кто-нибудь сможет залить в свои часы и посмотреть, все ли работает?
да выкладывай)
Интересно проверить. )))
Держите
За основу взят код из сообщения №109. По идее, единственный параметр, которые нуждается в настройке - это число светодиодов в сегменте(строка 6) - у Одиночки оно должно быть 3, а у Тараса - 1
Держите
За основу взят код из сообщения №109. По идее, единственный параметр, которые нуждается в настройке - это число светодиодов в сегменте(строка 6) - у Одиночки оно должно быть 3, а у Тараса - 1
Код рабочий. Часы идут. Выставил смену цвета на час. Это радует. Благодарю Вас за помощь.
Осталось одно НО. При ручной корректировке минут кнопкой, часы снова идут в радугу по кругу как при смене цвета. Т.е. нет такого что нажал и минуты побежали. ДЛя убирания этого эффекта нужно закоментировать блок со строки 186 по 216. Минуты начинают щёлкаться без радуги
а если от сюда позимствовать и портануть меню с настройками часов в наш скетч
pinMode(4, INPUT_PULLUP);
// кнопка -
pinMode(3, INPUT_PULLUP);
// кнопка menu
pinMode(2, INPUT_PULLUP);
// кнопка +
case
0:
установка цветовой схемы (задаём цвет всех элементов или цветового режима 0,1,2 менять цвет каждую мин, час, 12час и 4,5,6,7....18,19 16 цветов на выбор)case
1:
установка яркости (меняем яркость от автояркости по датчику освещения A, до выбранного в ручную 0-255 с шагом +/-5) А-0-255case
2: у
становка времени отображения температуры (время показа температуры с шагом +/-1 сек)case
3:
установка времени час (с шагом +/-1 час)case
4:
установка времени минуты (с шагом +/-1 минута)остальные не столь нужны
case
5:
установка дня (0-31)case
5:
установка месяца (0-12)case
5:
установка года (2018 +/-1)case
5:
установка дня неделиОсталось одно НО. При ручной корректировке минут кнопкой, часы снова идут в радугу по кругу как при смене цвета. Т.е. нет такого что нажал и минуты побежали. ДЛя убирания этого эффекта нужно закоментировать блок со строки 186 по 216. Минуты начинают щёлкаться без радуги
Поясните пожалуйста - радуга при смене времени - это проблема появилась только в моем коде или в коде из #109 было так же? - просто я ничего, касающегося установки времени - не менял, оставил так же, как было в вашем скетче.
а если от сюда позимствовать и портануть меню с настройками часов в наш скетч
Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)
а если от сюда позимствовать и портануть меню с настройками часов в наш скетч
Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)
Поздравляю, Шарик, ты попал... Теперь будешь все дикие идеи в скретче реализовывать.
Поясните пожалуйста - радуга при смене времени - это проблема появилась только в моем коде или в коде из #109 было так же? - просто я ничего, касающегося установки времени - не менял, оставил так же, как было в вашем скетче.
НЕт. Я изначально выложил закоментированным блоком, но пока часы висели появился какой то глюк. Часы убегали сами собой. Я подумал, что из-за этого блока. И раскоментировал его. НО видимо проблема была в железе. Провода кнопочные в боарде плохо держались. Поправил и глюк ушёл. И я снова у себя закоментировал блок. А тут забыл внести изменения.
Под радугой я принимал смену цветности при нажатии кнопки минуты. Получалось: нажал минуту-радуга пробежала-цвет сменился-минута прибавилась, ещё раз нажал, снова радуга, и т.д.
Под радугой я принимал смену цветности при нажатии кнопки минуты. Получалось: нажал минуту-радуга пробежала-цвет сменился-минута прибавилась, ещё раз нажал, снова радуга, и т.д.
Так будет, если смена цвета выставлена раз в минуту. Если раз в час - с минутами так быть не должно, зато будет при смене часов :)
Ну это логичное поведение... тут нет ошибки. Может быть придумаю, как исправить на следующем этапе :)
Дальше я планировал переписать вывод времени на экран - чтобы перерисовывать картинку раз в минуту, а не 10 раз секунду выводить одно и то же, как сейчас. Заодно и интервал показа температуры можно будет задавать произвольно, и может и проблема с радугой решится.
OdinochkA - спасибо за проверку кода!
Ну это логичное поведение... тут нет ошибки. Может быть придумаю, как исправить на следующем этапе :)
Дальше я планировал переписать вывод времени на экран - чтобы перерисовывать картинку раз в минуту, а не 10 раз секунду выводить одно и то же, как сейчас. Заодно и интервал показа температуры можно будет задавать произвольно, и может и проблема с радугой решится.
Не стоит заморачиваться. Просто мне допустим это не нравилось, допустим часы далеко от компа нужно поправить минут 20-25, остаётся только вариант с кнопкой, но пока с этой радугой выставишь, некоторое время потеряешь. Вот я и убрал этот блок. Минуты теперь бегут быстро. А другим может это в самый раз.
Если у вас есть время и возможность подскажите лучше как всё таки перенести сменность цвета кнопкой. Чтоб не от времени зависеть, а как сказал dj-toxa
Я вроде все для кнопки нашел, а как привязать к переменной по смене цвета не получается ((
И интервал с температурой у нас сейчас Вывод температуры раз в минуту.
Если у вас есть время и возможность подскажите лучше как всё таки перенести сменность цвета кнопкой. Чтоб не от времени зависеть, а как сказал dj-toxa
честно говоря, я вообще в вашем коде никакой кнопки DST не вижу, наверно слепой - можете строчку подсказать?
Сделать на кнопку не должно быть сложно - посмотрю. Если у вас уже есть наработки - выкладывайте, может там всего пару строк осталось поправить.
честно говоря, я вообще в вашем коде никакой кнопки DST не вижу, наверно слепой - можете строчку подсказать?
Сделать на кнопку не должно быть сложно - посмотрю. Если у вас уже есть наработки - выкладывайте, может там всего пару строк осталось поправить.
В коде который выложил я строки 37, 70(указание на кнопку) и 222. Раньше был ещё такой блок , сообщение №58
В коде который выложил я строки 37, 70(указание на кнопку) и 222. Раньше был ещё такой блок , сообщение №58
как-то так:
только проверьте номера пинов кнопок, по-моему там должно быть не 2, а 4. Ну и иннициализацию кнопки в СЕТАПе надо восстановить.
а если от сюда позимствовать и портануть меню с настройками часов в наш скетч
Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)
ну к примеру вместо первой цифры выводить либо номер раздела меню, либо рисуем буквы. например так нажал кнопку menu попал в первый раздел menu, кнопками +/- вибираем нужное.
case
0:
установка цветовой схемы (задаём цвет всех элементов или цветового режима 0,1,2 менять цвет каждую мин, час, 12час и 4,5,6,7....18,19 16 цветов на выбор)цветовая схема рисуем на экране С_00 например для первого цветого режима, С_01 для второго и т.д. далее еще раз жмем menu попадаем в установки яркости
case
1:
установка яркости (меняем яркость от автояркости по датчику освещения A, до выбранного в ручную 0-255 с шагом +/-5) А-0-255установки яркости рисуем на экране Br_A автоматический режим яркости, жмем + переходим в ручной режим выбора яркости от В__0 до В255. далее еще раз жмем menu попадаем в установки времени отображения температуры
case
2: у
становка времени отображения температуры (время показа температуры с шагом +/-1 сек)установки времени отображения температуры рисуем на экране t_00 и к примеру до t_10 и т.д. далее еще раз жмем menu попадаем в установки часов
case
3:
установка времени час (с шагом +/-1 час)установка часов рисуем H_00 от 00 до 24
и еще раз menu установки минут
case
4:
установка времени минуты (с шагом +/-1 минута)установка минут m_00 от 00 до 60
и еще раз menu установки минут
case
4:
установка времени минуты (с шагом +/-1 минута)установка минут m_00 от 00 до 60
тут немного не так m_00, а что то вроде гп00, т.к. на одном семисегментнике m не выведешь =)
РАБОТАЕТ )))))))))))))))))))
Теперь получается, что цвет может меняться по времени. Если закоментировать блок смены цвета, время будет меняться только по кнопке. Кнопка смены цвета на Pin 4. Прям огромнейшее спасибо всем участвовашим в этом (безобразии) ПРОЕКТЕ
РАБОТАЕТ )))))))))))))))))))
Теперь получается, что цвет может меняться по времени. Если закоментировать блок смены цвета, время будет меняться только по кнопке. Кнопка смены цвета на Pin 4.
Хорошо что работает.
А зачем блок смены цвета комментировать? - просто ставьте "COLOR_CHANGE 0" в строке 7 . А нежелательную радугу при настройке времени я уберу - там все тоже не сложно, просто не одна строчка, а чуть больше. Будет свободное время - сделаю.
У вы, но я выхожу из игры( Ардуино или лента выйшла из строя, сначала отрубались часы каждые 20 минут, потом каждые 10, сейчас захожу и наблюдаю что сигменты или не горят или горят не теми цветами, библиотека неопиксель вообще творит неизвестно что) Я так понимаю что это лента, ардуино скорее всего жива( Что самое интересное цвета все горят, что можете посоветовать, как проверить ардуино на всякий?
Беда еще в том что они не разборные, а дырки в стене просверлены, обратного пути нет(
Очень странно, сейчас грузанул новый скетч, и при подключении то загорается один светодиод то 0
Так, на новой прошивке горит L красным, на старой все пашет, но пашет как показано выше и зависает через 10 мин, что то не уверен что именно лента виновник
Taras9696 - вы в новой прошивке число диодов на сегмент в строке 6 выставили ? - у вас вроде 1 диод должен быть
Да все выставил, с 3 поменял на 1, просто что-то у меня поламалось) некоторые сегменты мигают, некоторые не горят, а иногда вместо одного цвета радуга
для начала прогони любой тестовый скетч из фаст лед или адафрута и убедись что точно лента косячит
Хорошо что работает.
а с меню не поможешь? понимаю что хотелок много,но хочется уже сделать эти часы универсальными, с мнеобходимым минимумом настроек, но в то же время что бы каждый мог настроить под себя при желании.
Да все выставил, с 3 поменял на 1, просто что-то у меня поламалось) некоторые сегменты мигают, некоторые не горят, а иногда вместо одного цвета радуга
а с меню не поможешь? понимаю что хотелок много,но хочется уже сделать эти часы универсальными, с мнеобходимым минимумом настроек, но в то же время что бы каждый мог настроить под себя при желании.
Ну для начала надо разобраться, почему у Тараса не работает. Может лента, а может в моем коде косяк. Без этого двигаться вперед рано.
У меня лента скорее всего сдохла, на всех прошивких полная ахинея, наверное буду заказывать на 12в(
подскажите надежную ленту под которую есть прошивки
У меня лента скорее всего сдохла, на всех прошивких полная ахинея, наверное буду заказывать на 12в(
Отключите от ардуины всё. Оставьте только ленту. Её подключите к своему пину на ардуине через резистор 100-400Ом (у меня идет из набора 220 Ом). Питание подавать сразу и на ленту и на дуню с одного блока.
Далее в Arduino зайдите Файл-Примеры-EEPROM-eeprom_clear. Этим вы очистите всю память. Загрузите скетч в дуню. После этого загружайте скетч который я вам дал для проверки ленты в сообщении №138. Там должна бежать змейка со сменой цветов и другие эффекты. Если лента будет продолжать вести себя не нормально, значит она накрылась и стоит искать другую. Если цвета меняются нормально и по порядку, значит смотрите проблемы в часовом скетче. Проверьте правильность пайки и направления светодиодов.
А если использовать ленту на 12 В, вам ещё придется понижающий модуль ставить, потому как дуне нужно 5 в.
У меня лента ws2812b 5 в. Питаю всё своё хозяство китайским блоком 5в 3 а (хотя можно и побольше ампер с запасом). Блок чуть тёплый, часы светятся на яркости 200. Вы писали что у вас блок на 5в 1а. Не может быть в этом проблема? Мало тока? И попробуйте убрать конденсаторы про которые вы писали. Только лента с резистором, ардуино и питание и код для проверки ленты
подскажите надежную ленту под которую есть прошивки
тут особо не подскажешь и у хороших продовцов бывает попадаются не удачные (косячные) партии лент. но по моему личному опыту 2811 лучше чем 2812 (с 2812 лично мне не везло), но с 2811 есть свои нюансы, а вместо 2812 сейчас появилась 2813, вроде лучше, но тут тоже не знаю возможно лотерея как и с 2812
Если лента будет продолжать вести себя не нормально, значит она накрылась и стоит искать другую.
не обязательно менять всё возможно вылетел первы-второй диод (статика, брак и пр..) и после замены всё будет норм. по питанию обычно 2811 12в, 2812 5в. для подобных часов блока питания 12в 2А хватает за глаза (для 2812 если много диодов (4-5) на сегмент, 3А с небольшим запасиком). самое оптимальное собирать такие часы на 2811 сразу три диода (1 пиксель) на сегмент. единственное что у них цветовая палитра вроде отличается не RGB, а GBR
Далее в Arduino зайдите Файл-Примеры-EEPROM-eeprom_clear. Этим вы очистите всю память.
это не нужно, скетч из сообщения #138 не использует ЕЕПРОМ
Далее в Arduino зайдите Файл-Примеры-EEPROM-eeprom_clear. Этим вы очистите всю память.
это не нужно, скетч из сообщения #138 не использует ЕЕПРОМ
Просто очистить дуню от всего шлака, что там мог накопиться. Я всегда делаю если начинаются какие то гоны
В общем такие дела, разобрал часы и поменял первые 7 сегментом и последние и все заработало, в трех диодах не пашет синий и в одном остался только зеленый, так что поставил что б только зеленым пахали часы, сейчас часы пашут без перерыва и не выключаются, хочу протестить занутся или нет, что б зря не обклеивать снова.
Поставил на вход ленты резик, так как его там нет, там только конденсатор, питаю от бп на 2а, бп вообще не греется, что еще посоветуете, я так понимаю что рас подохли первые сигменты то это из-за тока, именно в первой восьмерке первые 4 штуки. Хз как еще уберечь попытаться
Я чего думал 2811 тк ток то меньше в этом наверное и надежноть, а дуню можно и через ЛМ317 запитать
Мне думается, что БП вам гадил (был 5В 1А?). Они есть от зарядок с поганой стабилизацией. Ток устанавливается чипом в диоде, здесь вы ничего сделать не сможете, а прыгающее напряжение может и пожечь.
Как, кстати, питающая разводка по лентам сделана, какое сечение провода?
Мне думается, что БП вам гадил (был 5В 1А?). Они есть от зарядок с поганой стабилизацией. Ток устанавливается чипом в диоде, здесь вы ничего сделать не сможете, а прыгающее напряжение может и пожечь.
Как, кстати, питающая разводка по лентам сделана, какое сечение провода?
Да скорее всего БП, тк замерял на слабом просадки 5-3в, сейчас вроде стабильно пашет, но пашет только один день, послежу дня три, да хз какое сечение) на входе провода с комплекта толстые, остальное провода с магнитофона, но все же думаю на источник
В общем такие дела, разобрал часы и поменял первые 7 сегментом и последние и все заработало
Уточните, плиз - работает новый код или старый?