Ноль в значении часов все равно не гаснет. Покажите, пожалуйста, эту строку в скетче, которая отвечает за эту функцию.
посмотрел код - комментарий такой есть, а самой функции нет, всегда выводятся все 4 цифры, насколько я вижу. Если захотите поменять - в принципе это не сложно, только менять надо не GetTime(). а процедуру TimetoArray()
Ноль в значении часов все равно не гаснет. Покажите, пожалуйста, эту строку в скетче, которая отвечает за эту функцию.
посмотрел код - комментарий такой есть, а самой функции нет, всегда выводятся все 4 цифры, насколько я вижу. Если захотите поменять - в принципе это не сложно, только менять надо не GetTime(). а процедуру TimetoArray()
Я тоже ничего подобного в коде не заметил, но "Одиночка" говорил, что у него все работает, ноль - гаснет.
Я тоже ничего подобного в коде не заметил, но "Одиночка" говорил, что у него все работает, ноль - гаснет.
Вы сможете с этим кодом помочь?
держите (если что - пишите, не проверял)
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;
}
if ( (i != 4) || (digit != 0)) BrightDigit(digits[digit], cursor);
if ( i == COLOR_CHANGE) {
if (digit != last_digit)
{
// cylon (); // цикличное изменение цветов
ledColor = ColorTable[random(NUM_COLORS)]; // цикличное изменение цветов
}
last_digit = digit;
}
Now /= 10;
};
};
ЗЫ проверьте, не будет ли при смене времени "23:59" -> "0:00" оставаться двойка в старшем разряде. Если будет - придется еще чуть подправить
Когда доходит до 00 часов отображается 24, до 01 - 21, 02 - 22 и так далее.
придется добавить еще строчку :)
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;
}
if ( (i != 4) || (digit != 0)) BrightDigit(digits[digit], cursor);
else BrightDigit(0, cursor);
if ( i == COLOR_CHANGE) {
if (digit != last_digit)
{
// cylon (); // цикличное изменение цветов
ledColor = ColorTable[random(NUM_COLORS)]; // цикличное изменение цветов
}
last_digit = digit;
}
Now /= 10;
};
};
Мне осталось решить проблему изменения яркости свечения светодиодов. Можете помочь?
Эта часть скетча у меня отказывается работать
Ваш код сопадает с кодом Odinochka, у которого регулировка яркости работает. так что, скорее всего, дело не в коде, а в подключении. Надеюсь вы пин датчика освещения в коде правильно задали?
Мне осталось решить проблему изменения яркости свечения светодиодов. Можете помочь?
Эта часть скетча у меня отказывается работать
Ваш код сопадает с кодом Odinochka, у которого регулировка яркости работает. так что, скорее всего, дело не в коде, а в подключении. Надеюсь вы пин датчика освещения в коде правильно задали?
Да, у меня пин датчика другой (аналоговый A6). В скетче я менял на свой, подключение проверял.
#define BRI_PIN A6 // PIN фоторезистора
#define auto_bright 1 // автоматическая подстройка яркости от уровня внешнего освещения (1 - включить, 0 - выключить)
#define max_bright 230 // максимальная яркость (0 - 255)
#define min_bright 1 // минимальная яркость (0 - 255)
#define bright_constant 1000 // константа усиления от внешнего света (0 - 1023), чем МЕНЬШЕ константа, тем "резче" будет прибавляться яркость
#define coef 0.8 // коэффициент фильтра (0.0 - 1.0), чем больше - тем медленнее меняется яркость
int new_bright, new_bright_f;
unsigned long bright_timer, off_timer;
Пробовал менять настройки константы и коэффициента. Такое ощущение, что что-то выключено или не туда включено. Затемнял датчик, дополнительно освещал, все равно не работает изменение яркости.
Сделал как в посте #265, как посоветовал Aleksis7. Изменил - на + и все заработало. :)
В качестве доброго совета, освойте сериал принт и вывод в монитор подозрительных значений, зачем на кофейной гуще гадать?
Спасибо за совет.
Я в мониторе порта видел изменения показания датчика от освещенности, но на деле ничего не происходило. После подсказки , хотя я в неё не верил, но попробовал ей воспользоваться - у меня все получилось.
Пытаюсь сделать большие часы на arduino nano, DS3231, BME280, ws 2812.
Спустя две недели ковыряния интернета в поисках подходящего кода, и не найдя, пришлось допиливать самому (с помощью рашпеля, и какой то матери) так кат в программирование я ноль. За основу был взят код от Одиночки пост #190. Сейчас все работает показывают часы, температуру, давление и влажность,что и требовалось, но кнопки тупят и точки как то медлено мигают. И еще один температурный датчик добавить надо. Может кто подправит код.
[code]
#include <Adafruit_BME280.h>
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>
#define LEDS_IN_SEGMENT 1 // Задаём сколько у нас светодиодов в сегменте.
#define COLOR_CHANGE 1 // ( 0 - НИКОГДА, 1 - каждую минуту, 2 - каждые 10 минут, 3 - каждый час, 4 - каждые 10 часов)
#define NUM_COLORS 17
#define COLOR_ORDER BGR // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 6 // подключение ленты
#define BRI_PIN A3 // фоторезистор
#define auto_bright 1 // автоматическая подстройка яркости от уровня внешнего освещения (1 - включить, 0 - выключить)
#define max_bright 230 // максимальная яркость (0 - 255)
#define min_bright 1 // минимальная яркость (0 - 255)
#define bright_constant 1010 // константа усиления от внешнего света (0 - 1023), чем МЕНЬШЕ константа, тем "резче" будет прибавляться яркость
#define coef 0.7 // коэффициент фильтра (0.0 - 1.0), чем больше - тем медленнее меняется яркость
int new_bright, new_bright_f;
unsigned long bright_timer, off_timer;
Adafruit_BME280 bme;
//DHT dht(8, DHT11); // к какому порту подключаем DHT11 для влажности PIN_8
//======================================= Вычислемые константы, НЕ РЕДАКТИРОВАТЬ!
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + 2) //86 количество светодиодов в ленте
#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 * градус 10
0b00011110, // Digit C 11
0b01111100, // Digit P 12
0b01111000, // Digit % знак % из двух частей 13
0b01000111, // Digit % знак % из двух частей 14
};
bool Dot = true;
bool DST = false;
bool TempShow = true;
bool PressureShow = true;
bool HumidityShow = true;
int last_digit = 0;
long ledColor = CRGB::Salmon; // Используемый цвет
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() {
LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
bme.begin();
//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() {
if (auto_bright) { // если включена адаптивная яркость
if (millis() - bright_timer > 100) { // каждые 100 мс
bright_timer = millis(); // сброить таймер
new_bright = map(analogRead(3), 1, bright_constant, min_bright, max_bright); // считать показания с фоторезистора пин А3, перевести диапазон
new_bright = constrain(new_bright, min_bright, max_bright);
new_bright_f = new_bright_f * coef - new_bright * (1 - coef);
LEDS.setBrightness(new_bright_f); // установить новую яркость
}
}
};
//=========================== Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 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;
}
// if ( (i != 4) || (digit != 0)) BrightDigit(digits[digit], cursor); //24:00 показывает 0:00
// else BrightDigit(0, cursor);
BrightDigit(digits[digit], cursor); //24:00 показывает 00:00
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;
bme.begin(0x76);
RTC.read(tm);
if (tm.Second != 15) { //через какое время показывать температуру
TempShow = false;
return; }
TempShow = true;
delay(3000);
int t = bme.readTemperature();
int celsius = t;
BrightDots(0); //разделительные мигающие точки выключены
BrightDigit(digits[11], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); //65 начало знака Цельсия (*) 4й блок
BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); //44 начало знака Градус (С) 3 блок
int digit = celsius % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2)); //21 2й блок вывода второго символа
celsius /= 10;
digit = celsius % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2)); //0 1й блок вывода первого символа
};
//================================================ Измеряем давление
void PressureToArray() {
tmElements_t tm;
bme.begin(0x76);
RTC.read(tm);
if (tm.Second != 30) { //через какое время показывать давление
PressureShow = false;
return; }
PressureShow = true;
delay(3000);
int p = bme.readPressure() / 133.322;
int Pressure = p;
BrightDots(0); //разделительные мигающие точки выключены
BrightDigit(digits[12], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2)); //0 начало знака Давления (Р) 1й блок
// Pressure /= 10;
int digit = Pressure % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 7 )); //65 4й блок вывода третьей цифры значения
Pressure /= 10;
digit = Pressure % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); //44 3й блок вывода второй цифры значения
Pressure /= 10;
digit = Pressure % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2 )); //21 2й блок вывода первой цифры значения
};
//================================================Вывод влажности
void HumidityToArray() {
tmElements_t tm;
bme.begin(0x76);
RTC.read(tm);
if (tm.Second != 45) { //через какое время показывать влажность
HumidityShow = false;
return; }
HumidityShow = true;
delay(3000);
int h = bme.readHumidity();
int humidity = h;
BrightDots(0); //разделительные мигающие точки выключены
BrightDigit(digits[14], (NUM_LEDS - LEDS_IN_SEGMENT * 7)); //65 конец знака процентов (%) 4й блок
BrightDigit(digits[13], (NUM_LEDS - LEDS_IN_SEGMENT * 14)); //44 начало знака процентов (%) 3 блок
int digit = humidity % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2)); //21 2й блок вывода второго символа
humidity /= 10;
digit = humidity % 10;
BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2)); //0 1й блок вывода первого символа
};
//========================================смена цвета ленты кнопкой DST Pin 4
void DSTcheck() {
int buttonDST = digitalRead(4);
if (buttonDST == LOW) {
ledColor = ColorTable[random(NUM_COLORS)];
};
delay(100);//время реакции на нажатие
};
//======================================= Массив управляет кнопками с часами и минутами
void TimeAdjust() {
int buttonH = digitalRead(2);
int buttonM = digitalRead(3);
if (buttonH == LOW || buttonM == LOW) {
delay(100);//время реакции на нажатие
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;
for (int i = 0; i < NUM_LEDS; i++) { // Сдвигаем один светодиод в любом направлении
leds[i] = CHSV(hue++, 255, 255); // Устанавливаем 1 светодиод на цвет красный
FastLED.show(); // Показываем светодиоды
fadeall();
delay(10); // Ждём немного и повторяем цикл
}
for (int i = (NUM_LEDS) - 1; i >= 0; i--) { // Сдвигаем один светодиод в любом направлении
leds[i] = CHSV(hue++, 255, 255); // Устанавливаем 1 светодиод на цвет красный
FastLED.show(); // Показываем светодиоды
fadeall();
delay(10); // Ждём немного и повторяем цикл
}
}
void loop()
{
BrightnessCheck(); // Проверяем датчик освещения
DSTcheck(); // Проверяем цветовые режимы
TimeAdjust(); // Проверяем время если сменилось на 1 цифру
TimeToArray(); // Проверяем часы если сменилось на 1 цифру
TempToArray(); // температура
PressureToArray(); //давление
HumidityToArray(); //если будет влажность
FastLED.show(); // Задаём массив светодиодов
if (TempShow == true) delay (4000); //время показа температуры
if (PressureShow == true) delay (4000);//время показа давления
if (HumidityShow == true) delay (4000);//время показа влажности
}
[/code]
Сейчас все работает показывают часы, температуру, давление и влажность,что и требовалось, но кнопки тупят и точки как то медлено мигают.
ну так зачем же вы в отлаженный код задержек напихали? Я смотрю, у вас программа ровно половину всего времени сидит в операторах delay() - по 7 секунд из каждых 15-ти. Неудивительно, что у вас кнопки тупят...
Как минимум в строчках 152, 173 и197 задержки абсолютно лишние, их надо просто выкинуть. А правильно было бы и строчки 273-275 без delay() переписать.
Как минимум в строчках 152, 173 и197 задержки абсолютно лишние, их надо просто выкинуть. А правильно было бы и строчки 273-275 без delay() переписать.
[/quote]
Да я бы переписал... если б знал как. Только метод научного тыка. По отдельности время и темп, время и давление, время и влажность работают, а вместе тупят.
Спустя две недели ковыряния интернета в поисках подходящего кода, и не найдя, пришлось допиливать самому (с помощью рашпеля, и какой то матери) так кат в программирование я ноль. За основу был взят код от Одиночки пост #190.
AyuOX. глянул код внимательнее - что-то я вообще не вижу, чем ваш код отличается от кода Одиночки из №190? И прошу прощения. что наехал за делеи - как оказалось, задержки в код тоже он натащил :) Надо бы этот код по нормальному переписать...
А ваше "двухнедельное ковыряние" в чем заключалось? - спрашиваю не для подкола, а чтобы понять, что вы в коде меняли и где ошибки искать.
Да в принципе не чего не менял, только закоментированные убрал и ,, сериал принт,, да попытался сделать что б с BME280 считывал показания. А ковыряния - это поиски прикрутки ВМЕ280 ))).
Всем доброго времени. Льстит конечно что "код Одиночки", но он был написан совместно. ТАк что это общий труд. Давно не заходил сюда, времени катастрофически не хватает. Пришли мне BME280 и DS1820. Как только появится время. Сразу займусь заменой 180 на 280. Ну и уличный надо поставить. А по поводу делеев, ну так получилось. Кстати за время экплуатации вылезли некоторые косяки. На домашних часах при выставленной максимально яркости, через некоторе время первые блок цифр зависает намертво. И цвет и последняя цифра. Лечится резетом и прикрытием датчика освещенности. Надо будет убрать максимальное значение яркости.
Здравствуйте. У меня на часах смена цвета стоит каждую минуту, и вот при смене три первые сразу меняются а последняя цифра и точки тупят ещё секунду.
И ещё вопрос, можно к часам добавить индикатор уровня громкости? На другой пин ещё ленту повесить?
Например: на 2А пин вешаем микрофон, а на 7 пин цепляем ленту. Музыка - орёт, диоды - мЫргают, часы - идут. Круто))).
Просто у меня часы будут вмонтированы в картину, и остается много свободного места хотелось бы заполнить. Завтра как раз лента придёт, второй раз заказывают, первую наша почта не довезла.
что мне поменять точнее убрать в коде чтоб получились не часы .а просто тебло с цифрами при нажатие на кнопки менялись цифры.
часы у меня получились заработали.
на предыдущей (если не ошибаюсь) странице есть вариант часов, где кнопками можно менять время. Думаю, это то, что Вам нужно. Остается только выкинуть из кода работу с реальным временем
Сидел с телефона, формы вставки картинки не видел. И если можно еще подсказать куда копать по изменению цвета.Хотел бы сделать отдельный цвет на день недели. Но поменять статичный цвет не выходит.
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>
#define NUM_LEDS 58 // 5 by segment + 6 in the middle
#define LED_TYPE WS2812
#define COLOR_ORDER BRG // Define color order for your strip
#define BRIGHTNESS 150
#define LED_PIN 13 // Data pin for led comunication
CRGB leds[NUM_LEDS]; // Define LEDs strip
byte digits[12][14] = {
{0,0,1,1,1,1,1,1,1,1,1,1,1,1 }, // Digit 0
{0,0,1,1,0,0,0,0,0,0,0,0,1,1 }, // Digit 1
{1,1,1,1,1,1,0,0,1,1,1,1,0,0 }, // Digit 2
{1,1,1,1,1,1,0,0,0,0,1,1,1,1 }, // Digit 3
{1,1,1,1,0,0,1,1,0,0,0,0,1,1 }, // Digit 4
{1,1,0,0,1,1,1,1,0,0,1,1,1,1 }, // Digit 5
{1,1,0,0,1,1,1,1,1,1,1,1,1,1 }, // Digit 6
{0,0,1,1,1,1,0,0,0,0,0,0,1,1 }, // Digit 7
{1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, // Digit 8
{1,1,1,1,1,1,1,1,0,0,1,1,1,1 },}; // Digit 9 | 2D Array for numbers on 7 segment
byte firstdigit[2][10] = {
{
0,0,0,0,0,0,0,0,0,0 }
, // Digit 0 first number
{
1,1,1,1,1,1,1,1,1,1 }
}; // Digit 1 first number | 2D Array for numbers on 7 segment
bool Dot = true; //Dot state
bool DST = false; //DST state
int last_digit = 0;
//long ledColor = CRGB::DarkOrchid; // Color used (in hex)
//long ledColor = CRGB::MediumVioletRed;
long ledColor = CRGB::Red;
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);
// FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness (75); //( BRIGHTNESS );
pinMode(2, INPUT_PULLUP); // Define DST adjust button pin
pinMode(4, INPUT_PULLUP); // Define Minutes adjust button pin
// pinMode(5, INPUT_PULLUP); // Define Hours adjust button pin
}
//// Check Light sensor and set brightness accordingly
//void BrightnessCheck(){
//const byte sensorPin = 3; // light sensor pin
//const byte brightnessLow = 75; // Low brightness value
//const byte brightnessHigh = 100; // High brightness value
//int sensorValue = digitalRead(sensorPin); // Read sensor
//if (sensorValue == 0) {
//Serial.println("Brightness High");
//LEDS.setBrightness(brightnessHigh);
//}
//else {
//Serial.println("Brightness Low");
//LEDS.setBrightness(brightnessLow);
//}
//};
// Get time in a single number
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 minutes=Now.Minute;
int second =Now.Second;
if (second % 2==0) {Dot = false;}
else {
Dot = true;
};
return (hour*100+minutes);
};
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);
};
}
// Convert time to array needet for display
void TimeToArray(){
int Now = GetTime(); // Get time
int cursor = 58; //90 //116
//Serial.print("Time is: ");
//Serial.println(Now);
if (Dot){
leds[28]=ledColor;
leds[29]=ledColor;
//leds[45]=ledColor;
//leds[46]=ledColor;
//leds[47]=ledColor;
//leds[48]=ledColor;
}
else {
leds[28]=0x000000;
leds[29]=0x000000;
//leds[45]=0x000000;
//leds[46]=0x000000;
//leds[47]=0x000000;
//leds[48]=0x000000;
};
for(int i=1;i<=4;i++){
int digit = Now % 10; // get last digit in time
if (i==1){
cursor = 44;//69 //82
//Serial.print("Digit 4 is : ");
//Serial.print(digit);
//Serial.print(", the array is : ");
for(int k=0; k<=13;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){
leds[cursor]=ledColor;
}
else if (digits[digit][k]==0){
leds[cursor]=0x000000;
};
cursor ++;
}; // fin for
//Serial.println();
if (digit != last_digit)
{ fadefonction();
ledColor = ColorTable[(14)];
}
last_digit = digit;
}// fin if
else if (i==2){
cursor =30; //48
//Serial.print("Digit 3 is : ");
//Serial.print(digit);
//Serial.print(", the array is : ");
for(int k=0; k<=13;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){
cursor =14;//21;
//Serial.print("Digit 2 is : ");
//Serial.print(digit);
//Serial.print(", the array is : ");
for(int k=0; k<=13;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){
cursor =0;
//Serial.print("Digit 1 is : ");
//Serial.print(digit);
//Serial.print(", the array is : ");
for(int k=0; k<=13;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;
};
};
void TimeAdjust(){
int buttonH = digitalRead(5);
int buttonM = digitalRead(4);
if (buttonH == LOW || buttonM == LOW){
delay(500);
tmElements_t Now;
RTC.read(Now);
int hour=Now.Hour;
int minutes=Now.Minute;
if (buttonH == LOW){
if (Now.Hour== 24){
Now.Hour=1;
}
else {
Now.Hour += 1;
};
}
else {
if (Now.Minute== 59){
Now.Minute=0;
}
else {
Now.Minute += 1;
};
};
RTC.write(Now);
}
}
void fadeall() {
for(int m = 0; m < NUM_LEDS; m++) {
leds[m].nscale8(250);
}
}
void fadefonction () {
static uint8_t hue = 0;
// First slide the led in one direction
for(int i = 0; i < NUM_LEDS; i++) {
// Set the i'th led to red
leds[i] = CHSV(hue++, 255, 255);
// Show the leds
FastLED.show();
// now that we've shown the leds, reset the i'th led to black
// leds[i] = CRGB::Black;
fadeall();
// Wait a little bit before we loop around and do it again
delay(10);
}
// Now go in the other direction.
for(int i = (NUM_LEDS)-1; i >= 0; i--) {
// Set the i'th led to red
leds[i] = CHSV(hue++, 255, 255);
// Show the leds
FastLED.show();
// now that we've shown the leds, reset the i'th led to black
// leds[i] = CRGB::Black;
fadeall();
// Wait a little bit before we loop around and do it again
delay(10);
}
}
void loop() // Main loop
{
/*BrightnessCheck(); // Check brightness
DSTcheck(); // Check DST
TimeAdjust(); // Check to se if time is geting modified*/
TimeToArray(); // Get leds array with required configuration
FastLED.show(); // Display leds array
/*float t = RTC.temperature();
float celsius = t / 4.0;
Serial.println();
Serial.print("Temp is : ");
Serial.print(celsius);
Serial.println();*/
}
табло сделал не очень понял с масивами пришлось каждый диод прописывать и не понял как сюда фото загрузить
с массивами там все просто - если битовые переменные понимаете. В каждом байте сразу все 7 сегментов, каждый диод отдельно прописывать - это пещерный век :)
Для загрузки фото есть кнопка вверху формы ввода - третья справа
фото на файло обменик только с телефона не выходит загрузить с масивами я только в бейсики работал и не понимаю как 0-1 считывать из масива можно пример какойнибуть вопрос
Вот такие часики получились. Осталься только один вопросик, по цветам. Перечень цветов есть где нибудь? В примерах к библиотеке ничего не увидел. Где можно глянуть?
Что означает "0" в этой строке?
Владимир, справка по языку Си - сноска "программирование" вверзу страницы
Что означает "0" в этой строке?
Владимир, справка по языку Си - сноска "программирование" вверзу страницы
Спасибо
Ноль в значении часов все равно не гаснет. Покажите, пожалуйста, эту строку в скетче, которая отвечает за эту функцию.
посмотрел код - комментарий такой есть, а самой функции нет, всегда выводятся все 4 цифры, насколько я вижу. Если захотите поменять - в принципе это не сложно, только менять надо не GetTime(). а процедуру TimetoArray()
Ноль в значении часов все равно не гаснет. Покажите, пожалуйста, эту строку в скетче, которая отвечает за эту функцию.
посмотрел код - комментарий такой есть, а самой функции нет, всегда выводятся все 4 цифры, насколько я вижу. Если захотите поменять - в принципе это не сложно, только менять надо не GetTime(). а процедуру TimetoArray()
Я тоже ничего подобного в коде не заметил, но "Одиночка" говорил, что у него все работает, ноль - гаснет.
Вы сможете с этим кодом помочь?
Ноль в значении часов все равно не гаснет. Покажите
Я тоже ничего подобного в коде не заметил, но "Одиночка" говорил, что у него все работает, ноль - гаснет.
Вы сможете с этим кодом помочь?
Я не говорил про 0.я говорил про датчик освещения. Ноль у меня светится. А вам столь принципиален этот знак ночью?
Ноль в значении часов все равно не гаснет. Покажите
Я тоже ничего подобного в коде не заметил, но "Одиночка" говорил, что у него все работает, ноль - гаснет.
Вы сможете с этим кодом помочь?
Я про ноль тоже спрашивал. Знак этот я хотел гасить ночью и утром. Он бесполезен.
Я тоже ничего подобного в коде не заметил, но "Одиночка" говорил, что у него все работает, ноль - гаснет.
Вы сможете с этим кодом помочь?
держите (если что - пишите, не проверял)
ЗЫ проверьте, не будет ли при смене времени "23:59" -> "0:00" оставаться двойка в старшем разряде. Если будет - придется еще чуть подправить
Хорошо, проверю, отпишусь.
Когда доходит до 00 часов отображается 24, до 01 - 21, 02 - 22 и так далее.
Когда доходит до 00 часов отображается 24, до 01 - 21, 02 - 22 и так далее.
придется добавить еще строчку :)
Ой, последний вариант работает, спасибо!
b707,
как Вас отблагодарить?
b707,
как Вас отблагодарить?
никак не надо, мне просто нравится этот проект
b707,
как Вас отблагодарить?
никак не надо, мне просто нравится этот проект
Это хорошо, что нравится, но я бы мог Вам пополнить хотя бы мобильный телефон. :)
Мне осталось решить проблему изменения яркости свечения светодиодов. Можете помочь?
Эта часть скетча у меня отказывается работать
Мне осталось решить проблему изменения яркости свечения светодиодов. Можете помочь?
Эта часть скетча у меня отказывается работать
Ваш код сопадает с кодом Odinochka, у которого регулировка яркости работает. так что, скорее всего, дело не в коде, а в подключении. Надеюсь вы пин датчика освещения в коде правильно задали?
Мне осталось решить проблему изменения яркости свечения светодиодов. Можете помочь?
Эта часть скетча у меня отказывается работать
Ваш код сопадает с кодом Odinochka, у которого регулировка яркости работает. так что, скорее всего, дело не в коде, а в подключении. Надеюсь вы пин датчика освещения в коде правильно задали?
Да, у меня пин датчика другой (аналоговый A6). В скетче я менял на свой, подключение проверял.
У меня так:
Пробовал менять настройки константы и коэффициента. Такое ощущение, что что-то выключено или не туда включено. Затемнял датчик, дополнительно освещал, все равно не работает изменение яркости.
У вас просто фоторезистор или платка с 3мя выводами?
Упс
Нет, как на вышеприведенном Вашем фото.
Все, заработало!
Сделал как в посте #265, как посоветовал Aleksis7. Изменил - на + и все заработало. :)
Все, заработало!
Сделал как в посте #265, как посоветовал Aleksis7. Изменил - на + и все заработало. :)
В качестве доброго совета, освойте сериал принт и вывод в монитор подозрительных значений, зачем на кофейной гуще гадать?
Все, заработало!
Сделал как в посте #265, как посоветовал Aleksis7. Изменил - на + и все заработало. :)
В качестве доброго совета, освойте сериал принт и вывод в монитор подозрительных значений, зачем на кофейной гуще гадать?
Спасибо за совет.
Я в мониторе порта видел изменения показания датчика от освещенности, но на деле ничего не происходило. После подсказки , хотя я в неё не верил, но попробовал ей воспользоваться - у меня все получилось.
Здравствуйте.
Пытаюсь сделать большие часы на arduino nano, DS3231, BME280, ws 2812.
Спустя две недели ковыряния интернета в поисках подходящего кода, и не найдя, пришлось допиливать самому (с помощью рашпеля, и какой то матери) так кат в программирование я ноль. За основу был взят код от Одиночки пост #190. Сейчас все работает показывают часы, температуру, давление и влажность,что и требовалось, но кнопки тупят и точки как то медлено мигают. И еще один температурный датчик добавить надо. Может кто подправит код.
В строке 114 поменяйте цифру 2, например на 1. Скорость мигания должна увеличиться в 2 раза.
Сейчас все работает показывают часы, температуру, давление и влажность,что и требовалось, но кнопки тупят и точки как то медлено мигают.
ну так зачем же вы в отлаженный код задержек напихали? Я смотрю, у вас программа ровно половину всего времени сидит в операторах delay() - по 7 секунд из каждых 15-ти. Неудивительно, что у вас кнопки тупят...
Как минимум в строчках 152, 173 и197 задержки абсолютно лишние, их надо просто выкинуть. А правильно было бы и строчки 273-275 без delay() переписать.
а код здесь качал https://community.alexgyver.ru/attachments/new_clock_temp_reloaded-rar.3122/
О, я смотрю Гайверовцы не только в иностранном мнете коды тырят...
Да и на драйве участник рекламирует код как свой :) "код полностью переписан и доведен до ума...."
Как минимум в строчках 152, 173 и197 задержки абсолютно лишние, их надо просто выкинуть. А правильно было бы и строчки 273-275 без delay() переписать.
[/quote]
Да я бы переписал... если б знал как. Только метод научного тыка. По отдельности время и темп, время и давление, время и влажность работают, а вместе тупят.
О, я смотрю Гайверовцы не только в иностранном мнете коды тырят...
а кто й та Гайверовцы? не хорошие гаишники =)
а кто й та Гайверовцы? не хорошие гаишники =)
Гайверовцы еще ладно, они хотя бы дали ссылку, откуда взяли код. А на драйве.ру кое-кто выложил его на Яндекс-диск и разрекламировал как свой....
Спустя две недели ковыряния интернета в поисках подходящего кода, и не найдя, пришлось допиливать самому (с помощью рашпеля, и какой то матери) так кат в программирование я ноль. За основу был взят код от Одиночки пост #190.
AyuOX. глянул код внимательнее - что-то я вообще не вижу, чем ваш код отличается от кода Одиночки из №190? И прошу прощения. что наехал за делеи - как оказалось, задержки в код тоже он натащил :) Надо бы этот код по нормальному переписать...
А ваше "двухнедельное ковыряние" в чем заключалось? - спрашиваю не для подкола, а чтобы понять, что вы в коде меняли и где ошибки искать.
b707 ..
Да в принципе не чего не менял, только закоментированные убрал и ,, сериал принт,, да попытался сделать что б с BME280 считывал показания. А ковыряния - это поиски прикрутки ВМЕ280 ))).
Всем доброго времени. Льстит конечно что "код Одиночки", но он был написан совместно. ТАк что это общий труд. Давно не заходил сюда, времени катастрофически не хватает. Пришли мне BME280 и DS1820. Как только появится время. Сразу займусь заменой 180 на 280. Ну и уличный надо поставить. А по поводу делеев, ну так получилось. Кстати за время экплуатации вылезли некоторые косяки. На домашних часах при выставленной максимально яркости, через некоторе время первые блок цифр зависает намертво. И цвет и последняя цифра. Лечится резетом и прикрытием датчика освещенности. Надо будет убрать максимальное значение яркости.
Здравствуйте. У меня на часах смена цвета стоит каждую минуту, и вот при смене три первые сразу меняются а последняя цифра и точки тупят ещё секунду.
И ещё вопрос, можно к часам добавить индикатор уровня громкости? На другой пин ещё ленту повесить?
так и задумано :) А разве это мешает?
уровень громкости чего? разве в этих часах есть какие-то звуки?
Например: на 2А пин вешаем микрофон, а на 7 пин цепляем ленту. Музыка - орёт, диоды - мЫргают, часы - идут. Круто))).
Просто у меня часы будут вмонтированы в картину, и остается много свободного места хотелось бы заполнить. Завтра как раз лента придёт, второй раз заказывают, первую наша почта не довезла.
ВСЕМ Добрый день!
помогите плиз
что мне поменять точнее убрать в коде чтоб получились не часы .а просто тебло с цифрами при нажатие на кнопки менялись цифры.
часы у меня получились заработали.
что мне поменять точнее убрать в коде чтоб получились не часы .а просто тебло с цифрами при нажатие на кнопки менялись цифры.
часы у меня получились заработали.
на предыдущей (если не ошибаюсь) странице есть вариант часов, где кнопками можно менять время. Думаю, это то, что Вам нужно. Остается только выкинуть из кода работу с реальным временем
Ребзя, всем доброго. Собрал. Переделал код под 2 диод на сегмент и по диод на точки. Все работает. Но, кнопки на D2 и D4 не меняют режимы и минуты. Что может быть. Кнопки на ноль повешены.
[URL=http://radikal.ru/fp/urft42qo037pq][IMG]https://d.radikal.ru/d10/1906/56/cf9cbb8de79dt.jpg[/IMG][/URL]
там ничего переделывать не надо, в ветке есть код, настраиваемый на нужное число диодов в сегменте
Картинки вставояйте прямо в форум, на всякие помойные сервисы типа радикала никто ходить не будет. А лучше, вместо картинок - вставляйте код.
Сидел с телефона, формы вставки картинки не видел. И если можно еще подсказать куда копать по изменению цвета.Хотел бы сделать отдельный цвет на день недели. Но поменять статичный цвет не выходит.
Sinopsis - вы какой-то старый код взяли, я это сразу вижу по массиву символов. В свежем коде массив в 8 раз короче.
Прочтите последние пару страниц ветки - участник Odinochka выкладывал несколько вариантов кода, где есть куча доработок и многие проблемы решены.
табло сделал не очень понял с масивами пришлось каждый диод прописывать и не понял как сюда фото загрузить
табло сделал не очень понял с масивами пришлось каждый диод прописывать и не понял как сюда фото загрузить
с массивами там все просто - если битовые переменные понимаете. В каждом байте сразу все 7 сегментов, каждый диод отдельно прописывать - это пещерный век :)
Для загрузки фото есть кнопка вверху формы ввода - третья справа
фото на файло обменик только с телефона не выходит загрузить с масивами я только в бейсики работал и не понимаю как 0-1 считывать из масива можно пример какойнибуть вопрос
не понимаю как 0-1 считывать из масива можно пример какойнибуть
ну так эту же программу посмотрите - как там массивы символов считываются. Например, код из сообщения 190
Вот такие часики получились. Осталься только один вопросик, по цветам. Перечень цветов есть где нибудь? В примерах к библиотеке ничего не увидел. Где можно глянуть?
Осталься только один вопросик, по цветам. Перечень цветов есть где нибудь?
В FastLED цвета задаются как в HTML - 0xRRGGBB. Например, CRGB::Amethyst = 0x9966CC, CRGB::Red=0xFF0000 и т.д.