Обсуждаем электронику на колесах. Нужен увлажнитель воздуха для Камаза? Вам сюда.
Ответить

часы ардуино ds3231 max7219 ds18b20

Сб фев 08, 2020 17:33:05

нашел на просторах интернета простые в изготовлении (ни каких плат рисовать-травить не надо, собирается из готовых плат проводками за 10 мин) , но интересные по функционалу часы
http://forum.amperka.ru/threads/%D0%A7% ... %BA.12793/
немного переделал для себя . получилось хорошо
в часах три шрифта
музыкальные будильники
термометр
поздравительные плюшки ....
был приемник, но я его за ненадобностью вырезал :facepalm:
автор часов потрудился хорошо над ними...


очень хочется сделать ,чтоб цифры вот так отрисовывались https://www.radiokot.ru/forum/viewtopic ... 3733b8eb3c
буду рад любой помощи или совету.:)
Вложения
Czasy8x32_ds18b20_data_EEPROM.zip
(416.24 KiB) Скачиваний: 950

Re: часы ардуино ds3231 max7219 ds18b20

Пн фев 10, 2020 13:19:22

Эти часы для АвтоМотоВело?

Re: часы ардуино ds3231 max7219 ds18b20

Пн фев 10, 2020 14:58:15

Хоть на лоб . Неважно главное даже плату травить не надо

Re: часы ардуино ds3231 max7219 ds18b20

Пн фев 10, 2020 15:58:02

печалька - под ESP12 компилиться не хочет(с прерываниями лажа какая то).. :(

Вопрос сэнсэям Ардуины :) - сложно ли програмно, вывод индикации сделать не в i2c а в UART ? (а то что то эта матрица внешне прямо не "фонтан", а в наличии есть с UART посимпатичнее) :)

Re: часы ардуино ds3231 max7219 ds18b20

Вт фев 11, 2020 11:48:53

если хоца на ESP то тебе суда http://forum.amperka.ru/threads/%D0%A7% ... %81.12767/
тут просто ардуина

Re: часы ардуино ds3231 max7219 ds18b20

Вт фев 11, 2020 15:25:09

Хоть на лоб . Неважно главное даже плату травить не надо

На лоб возможно пойдёт, а в АвтоМотоВело не пойдёт.
Плата на проволочках, на механических контактах долго не проживёт.
Только плата вытравленная, спаяная, и покрытая лаком :)))

Re: часы ардуино ds3231 max7219 ds18b20

Вт фев 11, 2020 16:25:03

Плата на проволочках, на механических контактах долго не проживёт.

кто мешает припаять проводочки? и окунуть в лак? :tea:

Re: часы ардуино ds3231 max7219 ds18b20

Чт фев 13, 2020 21:08:43

урезанный вариант для отладки эффекта
Вложения
Moi_Czasy8x32_VYZHIMKA.zip
(22.19 KiB) Скачиваний: 533

Re: часы ардуино ds3231 max7219 ds18b20

Сб фев 15, 2020 11:27:44

обалденно цифры рисуются :)))
теперь это надо облагородить :tea:
Вложения
Moi_Czasy8x32.zip
(41.94 KiB) Скачиваний: 529

Re: часы ардуино ds3231 max7219 ds18b20

Чт фев 20, 2020 19:31:20

вот :))
сделал отрисовку цифр. получилось как хотел.;)
не получается мигать точками (точнее очень быстро мигают) может кто поможет ? :idea:

и вопрос: поставил в часах на 190 строчке delay(30);
в интернете пишут delay это плохо. тады как? :dont_know:
Вложения
Moi_Czasy8x32.zip
(62.35 KiB) Скачиваний: 495

Re: часы ардуино ds3231 max7219 ds18b20

Пт фев 21, 2020 08:34:01

и вопрос: поставил в часах на 190 строчке delay(30);
в интернете пишут delay это плохо. тады как? :dont_know:
Это нормально. Заменить его можно пустым циклом, но зачем? Там только я бы сделал немного другой порядок строк:
Код:
    refreshAll();
    delay(30);
    clrAll();
Т.е. сначала обновить, потом подождать, а потом очистить и повторять вывод.

не получается мигать точками (точнее очень быстро мигают) может кто поможет ? :idea:
Может увеличить задержку в delay с 30 мс до ~500? В сам код не вникал глубоко, может и ошибаюсь...

Re: часы ардуино ds3231 max7219 ds18b20

Пт фев 21, 2020 09:11:50

Т.е. сначала обновить, потом подождать, а потом очистить и повторять вывод.

спасибо, исправлю
Может увеличить задержку в delay с 30 мс до ~500? В сам код не вникал глубоко, может и ошибаюсь...

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

Re: часы ардуино ds3231 max7219 ds18b20

Вт фев 25, 2020 21:31:30

я здаюсь... куда эту ... :oops: millis() поставить чтобы цифра отрисовывалась за 0,9 милсек
помогите, пожалуйста.
Вложения
Moi_Czasy8x32.zip
(62.39 KiB) Скачиваний: 413

Re: часы ардуино ds3231 max7219 ds18b20

Чт фев 27, 2020 16:15:10

"if (millis()%100==0) {..." -- это значит поймать момент, когда число милисекунд будет делиться на 100 без остатка, а по времени длится это событие всего 1 мс. из 100. Мне кажется, это поймать невозможно, будут сплошные пропуски по этому условию. Лучше бы просто там вставил delay(100), без всяких проверок условий.

Добавлено after 25 minutes 34 seconds:
Я бы попробовал сделать этот кусок так, если что:
Код:
    delay(100); // ждём 0,1 с
    clrAll();  // это же очистка всего? Можно ли её делать один раз перед выводом, или обязательно в цикле?

    for (int q = 0; q < 12; q++ ) { // теперь цикл вывода значений, как я понимаю...
      // секунды, судя по переменной
      if (s0 != lasts0){showDigit( s0 * 12 + q, 28, dig3x7q);}
        else showDigit(s0, 28, dig3x7s);
      // десятки секунд
      if (s1 != lasts1) showDigit( s1 * 12 + q, 24, dig3x7q);
        else showDigit(s1, 24, dig3x7s);
      // минуты
      if (m0 != lastm0) showDigit( m0 * 12 + q, 17, dig4x8q);
        else showDigit(m0, 17, dig4x8);
      // десятки минут
      if (m1 != lastm1) showDigit( m1 * 12 + q, 12, dig4x8q);
        else  showDigit(m1, 12, dig4x8);
      // часы
      if (h0 != lasth0) showDigit( h0 * 12 + q, 5, dig4x8q);
        else showDigit(h0, 5, dig4x8);
      // десятки часов
      if (h1>0){
        if (h1 != lasth1) showDigit( h1 * 12 + q, 0, dig4x8q);
          else showDigit(h1, 0, dig4x8);}

   } // конец цикла
   refreshAll();  // обновить всё, что навыводили в цикле, так?

Не понял, правда, как там работает "showDigit( s0 * 12 + q, 28, dig3x7q)" и в чём её отличия от "showDigit(s0, 28, dig3x7s)", который выполняется, если значение не изменилось... :dont_know:

Re: часы ардуино ds3231 max7219 ds18b20

Чт фев 27, 2020 19:31:09

во. сточкой получилось!!! :kill:
Код:
    for (int q = 0; q < 12; q++ ) {                           // для того чтобы отрисовать цифру состаящую из 12 точек (или шагов как правильно?)
   
    if (s0 != lasts0){showDigit( s0 * 12 + q, 28, dig3x7q);}  // s0 * 12 + q - номер строки в масиве dig3x7q (смотрим вкладку "fonts.h")
    else showDigit(s0, 28, dig3x7s);                          // s0 - номер строки в масиве dig3x7s (смотрим вкладку "fonts.h")

    if (s1 != lasts1) showDigit( s1 * 12 + q, 24, dig3x7q);   //24- позиция экрана с которой начинать печать
    else showDigit(s1, 24, dig3x7s);                          //24- позиция экрана с которой начинать печать
     
    if (m0 != lastm0) showDigit( m0 * 12 + q, 17, dig4x8q);   // dig3x7q - указатель на масив данных (смотрим вкладку "fonts.h")
    else showDigit(m0, 17, dig4x8);                           // dig4x8 - указатель на масив данных  (смотрим вкладку "fonts.h")
   
    if (m1 != lastm1) showDigit( m1 * 12 + q, 12, dig4x8q);   // (m1 != lastm1)- проверяем изменилась цифра или нет
    else  showDigit(m1, 12, dig4x8);
 
    if (h0 != lasth0) showDigit( h0 * 12 + q, 5, dig4x8q);
    else showDigit(h0, 5, dig4x8);
       
    if (h1>0){
    if (h1 != lasth1)showDigit( h1 * 12 + q, 0, dig4x8q);
    else showDigit(h1, 0, dig4x8);}
   
    int flag = millis() % 1000;                                                  // счетчик будет считать до тысячи и все заново(я так думаю, поправте если не прав)
    if ( flag > 500) { setCol(10, 0x24);}                                        // если флаг больше 500, рисуем точки

  refreshAll();                                                                    // вывод на экран (смотрим вкладку "max7219.h")
  clrAll();                                                                        // очищает экран полностью (смотрим вкладку "max7219.h")
    }
    lasth1 = h1; lasth0 = h0; lastm1 = m1; lastm0 = m0; lasts1 = s1; lasts0 = s0;  // для того чтобы знать изменилась цифра или нет
}



Не понял, правда, как там работает "showDigit( s0 * 12 + q, 28, dig3x7q)" и в чём её отличия от "showDigit(s0, 28, dig3x7s)", который выполняется, если значение не изменилось... :dont_know:


отличия - разный масив данных dig3x7q - цифра рисуется за 12 шагов (с эффектом которым борюсь, чтобы цифра отрисовывалась за 0,9 милсек),
а dig3x7s цифра рисуется вся сразу.

Вложения
chernjvik.zip
(42.62 KiB) Скачиваний: 522

Re: часы ардуино ds3231 max7219 ds18b20

Пт фев 28, 2020 10:46:18

во. сточкой получилось!!! :kill:

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

(с эффектом которым борюсь, чтобы цифра отрисовывалась за 0,9 милсек)
Может за 0,9 сек?

Re: часы ардуино ds3231 max7219 ds18b20

Пт фев 28, 2020 18:00:19

В таком виде нормально, теперь можно вернуть delay

честно говоря не совсем понял , что написал на 182 стр. ( if (millis() % 2==0)q++)
но стали цифры отрисовываться с задержкой, если поставить например 10 то очень медленно, а на точку это не влияет!
может кто пояснит? желательно по "слогам"

Serzh2000 писал(а):
(с эффектом которым борюсь, чтобы цифра отрисовывалась за 0,9 милсек)
Может за 0,9 сек?


да вы правы, ошибся...


можно ли в оной void {
millis()%15000 что то делаем
millis()%2==0 что то делаем
millis()%200>10 что то делаем }
использовать несколько раз функцию millis()?
Вложения
chernjvik_28.02.20.zip
(43.37 KiB) Скачиваний: 423

Re: часы ардуино ds3231 max7219 ds18b20

Пн мар 02, 2020 09:18:26

честно говоря не совсем понял , что написал на 182 стр. ( if (millis() % 2==0)q++)
но стали цифры отрисовываться с задержкой, если поставить например 10 то очень медленно, а на точку это не влияет!
может кто пояснит? желательно по "слогам"
Тогда, когда количество милисекунд после старта будет чётным (в 50% случаев), один шаг в цикле пропускается. Вы, извиняюсь, пишите скетч по методу вставки случайных команд в случайные места? ;)

можно ли в оной void {
millis()%15000 что то делаем
millis()%2==0 что то делаем
millis()%200>10 что то делаем }
использовать несколько раз функцию millis()?
Можно, но следует учесть, что она в каждом случае будет возвращать новое значение. И зачем Вам это? Сделайте просто, без всяких извращений над кодом, например, так:
Код:
 void    showAnimClock(){
 
    clrAll();                    // очищает экран полностью (смотрим вкладку "max7219.h")

    // выводим цифры, которые не изменились
    if (s0 == lasts0){showDigit(s0, 28, dig3x7s);}
    if (s1 == lasts1){showDigit(s1, 24, dig3x7s);}
    if (m0 == lastm0){showDigit(m0, 17, dig4x8);}
    if (m1 == lastm1){showDigit(m1, 12, dig4x8);}
    if (h0 == lasth0){showDigit(h0, 5, dig4x8);}
    if ((h1>0)&&(h1 == lasth1)){showDigit(h1, 0, dig4x8);}
   
    // а теперь цикл по изменившимся цифрам
    for (int q = 0; q < 12; q++ ) {
   
      if (s0 != lasts0){showDigit( s0 * 12 + q, 28, dig3x7q);}
      if (s1 != lasts1){showDigit( s1 * 12 + q, 24, dig3x7q);}
      if (m0 != lastm0){showDigit( m0 * 12 + q, 17, dig4x8q);}
      if (m1 != lastm1){showDigit( m1 * 12 + q, 12, dig4x8q);}
      if (h0 != lasth0){showDigit( h0 * 12 + q, 5, dig4x8q);}
      if ((h1>0)&&(h1 != lasth1)){showDigit( h1 * 12 + q, 0, dig4x8q);}
      if (q > 5){setCol(10, 0x24);} // если вторая половина цикла, то рисуем точки
                                    // тут можно поиграться длительностью, изменяя значение, с которым сравнивается q
      refreshAll(); // обновляем экран после каждой строки
      delay(70);    // задержка для плавного вывода цифр
                    // величина задержки должна быть меньше 900мс / 12 циклов
    }
    lasth1 = h1; lasth0 = h0; lastm1 = m1; lastm0 = m0; lasts1 = s1; lasts0 = s0;  // для того чтобы знать изменилась цифра или нет
}

Re: часы ардуино ds3231 max7219 ds18b20

Вс мар 15, 2020 15:55:40

Сделайте просто, без всяких извращений над кодом,


тормозили программу циклы
for ( ) { } - цикл

delay();- и это тоже цикл


Код:
    int flag = millis() % 1000;                                                  // счетчик будет считать до тысячи и все заново
    if ( flag > 500) { setCol(10, 0x24);}                                        // если флаг больше 500, рисуем точки
   
   
     
    if (s0 != lasts0){showDigit( s0 * 12 + shag, 28, dig3x7q);}  // s0 * 12 + q - номер строки в масиве dig3x7q (смотрим вкладку "fonts.h")
    else showDigit(s0, 28, dig3x7s);                          // s0 - номер строки в масиве dig3x7s (смотрим вкладку "fonts.h")

    if (s1 != lasts1) showDigit( s1 * 12 + shag, 24, dig3x7q);   //24- позиция экрана с которой начинать печать
    else showDigit(s1, 24, dig3x7s);                          //24- позиция экрана с которой начинать печать
     
    if (m0 != lastm0) showDigit( m0 * 12 + shag, 17, dig4x8q);   // dig3x7q - указатель на масив данных (смотрим вкладку "fonts.h")
    else showDigit(m0, 17, dig4x8);                           // dig4x8 - указатель на масив данных  (смотрим вкладку "fonts.h")
   
    if (m1 != lastm1) showDigit( m1 * 12 + shag, 12, dig4x8q);   // (m1 != lastm1)- проверяем изменилась цифра или нет
    else  showDigit(m1, 12, dig4x8);
 
    if (h0 != lasth0) showDigit( h0 * 12 + shag, 5, dig4x8q);
    else showDigit(h0, 5, dig4x8);
       
    if (h1>0){
    if (h1 != lasth1)showDigit( h1 * 12 + shag, 0, dig4x8q);
    else showDigit(h1, 0, dig4x8);}
   
    refreshAll(); // обновляем экран после каждой строки 
 
     unsigned long nov = millis();
     if (nov - oldMillis >= 75) {
      shag++; Serial.print(nov - oldMillis);
     oldMillis = nov;
      }
  if (shag >= 12) { shag=0; lasth1 = h1; lasth0 = h0; lastm1 = m1; lastm0 = m0; lasts1 = s1; lasts0 = s0;}
}




осталось почистить код, залить в атмегу и закрыть заднюю крышку у часов.
Вложения
chasy_matrica.zip
(53.53 KiB) Скачиваний: 488

Re: часы ардуино ds3231 max7219 ds18b20

Пн апр 27, 2020 20:33:54

вот что получилось :shock:


корпус часов из розетки
Изображение Изображение Изображение Изображение

найдете косяк - исправлю
будет вопрос - отвечу
выскажете свое предложение - обсудим
:beer:
Вложения
chasy_matrica.zip
(298.56 KiB) Скачиваний: 870
Ответить