Форум РадиоКот https://radiokot.ru/forum/ |
|
часы ардуино ds3231 max7219 ds18b20 https://radiokot.ru/forum/viewtopic.php?f=43&t=168827 |
Страница 1 из 11 |
Автор: | Serzh2000 [ Сб фев 08, 2020 17:33:05 ] | ||
Заголовок сообщения: | часы ардуино ds3231 max7219 ds18b20 | ||
нашел на просторах интернета простые в изготовлении (ни каких плат рисовать-травить не надо, собирается из готовых плат проводками за 10 мин) , но интересные по функционалу часы http://forum.amperka.ru/threads/%D0%A7% ... %BA.12793/ немного переделал для себя . получилось хорошо в часах три шрифта музыкальные будильники термометр поздравительные плюшки .... был приемник, но я его за ненадобностью вырезал ![]() автор часов потрудился хорошо над ними... очень хочется сделать ,чтоб цифры вот так отрисовывались https://www.radiokot.ru/forum/viewtopic ... 3733b8eb3c буду рад любой помощи или совету. ![]()
|
Автор: | pcb432 [ Пн фев 10, 2020 13:19:22 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
Эти часы для АвтоМотоВело? |
Автор: | Serzh2000 [ Пн фев 10, 2020 14:58:15 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
Хоть на лоб . Неважно главное даже плату травить не надо |
Автор: | AndyGU70 [ Пн фев 10, 2020 15:58:02 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
печалька - под ESP12 компилиться не хочет(с прерываниями лажа какая то).. ![]() Вопрос сэнсэям Ардуины ![]() ![]() |
Автор: | Serzh2000 [ Вт фев 11, 2020 11:48:53 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
если хоца на ESP то тебе суда http://forum.amperka.ru/threads/%D0%A7% ... %81.12767/ тут просто ардуина |
Автор: | pcb432 [ Вт фев 11, 2020 15:25:09 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
Хоть на лоб . Неважно главное даже плату травить не надо На лоб возможно пойдёт, а в АвтоМотоВело не пойдёт. Плата на проволочках, на механических контактах долго не проживёт. Только плата вытравленная, спаяная, и покрытая лаком ![]() |
Автор: | Serzh2000 [ Вт фев 11, 2020 16:25:03 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
Цитата: Плата на проволочках, на механических контактах долго не проживёт. кто мешает припаять проводочки? и окунуть в лак? ![]() |
Автор: | Serzh2000 [ Чт фев 13, 2020 21:08:43 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
урезанный вариант для отладки эффекта
|
Автор: | Serzh2000 [ Сб фев 15, 2020 11:27:44 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
обалденно цифры рисуются ![]() теперь это надо облагородить ![]()
|
Автор: | Serzh2000 [ Чт фев 20, 2020 19:31:20 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
вот ![]() сделал отрисовку цифр. получилось как хотел. ![]() не получается мигать точками (точнее очень быстро мигают) может кто поможет ? ![]() и вопрос: поставил в часах на 190 строчке delay(30); в интернете пишут delay это плохо. тады как? ![]()
|
Автор: | Improver [ Пт фев 21, 2020 08:34:01 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
и вопрос: поставил в часах на 190 строчке delay(30); Это нормально. Заменить его можно пустым циклом, но зачем? Там только я бы сделал немного другой порядок строк:в интернете пишут delay это плохо. тады как? ![]() Код: refreshAll(); Т.е. сначала обновить, потом подождать, а потом очистить и повторять вывод. delay(30); clrAll(); не получается мигать точками (точнее очень быстро мигают) может кто поможет ? Может увеличить задержку в delay с 30 мс до ~500? В сам код не вникал глубоко, может и ошибаюсь...
![]() |
Автор: | Serzh2000 [ Пт фев 21, 2020 09:11:50 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
Цитата: Т.е. сначала обновить, потом подождать, а потом очистить и повторять вывод. спасибо, исправлю Цитата: Может увеличить задержку в delay с 30 мс до ~500? В сам код не вникал глубоко, может и ошибаюсь... в delay вся и загвоздка, можно и без него, но тогда очень быстро отрисовываются цифры методом подбора получил (зо милсек ) чуть быстрее секунды а если delay(500) будут не только точки мигать медленно но и отрисовка цифр .... |
Автор: | Serzh2000 [ Вт фев 25, 2020 21:31:30 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
я здаюсь... куда эту ... ![]() помогите, пожалуйста.
|
Автор: | Improver [ Чт фев 27, 2020 16:15:10 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
"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)", который выполняется, если значение не изменилось... ![]() |
Автор: | Serzh2000 [ Чт фев 27, 2020 19:31:09 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
во. сточкой получилось!!! ![]() Код: 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)", который выполняется, если значение не изменилось... ![]() отличия - разный масив данных dig3x7q - цифра рисуется за 12 шагов (с эффектом которым борюсь, чтобы цифра отрисовывалась за 0,9 милсек), а dig3x7s цифра рисуется вся сразу.
|
Автор: | Improver [ Пт фев 28, 2020 10:46:18 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
во. сточкой получилось!!! ![]() В таком виде нормально, теперь можно вернуть delay в цикл для плавного вывода изменившихся цифр, только задержка там должна быть не больше 500мс / 12, иначе точки не будут мигать... (с эффектом которым борюсь, чтобы цифра отрисовывалась за 0,9 милсек) Может за 0,9 сек?
|
Автор: | Serzh2000 [ Пт фев 28, 2020 18:00:19 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
Цитата: В таком виде нормально, теперь можно вернуть delay честно говоря не совсем понял , что написал на 182 стр. ( if (millis() % 2==0)q++) но стали цифры отрисовываться с задержкой, если поставить например 10 то очень медленно, а на точку это не влияет! может кто пояснит? желательно по "слогам" Цитата: Serzh2000 писал(а): (с эффектом которым борюсь, чтобы цифра отрисовывалась за 0,9 милсек) Может за 0,9 сек? да вы правы, ошибся... можно ли в оной void { millis()%15000 что то делаем millis()%2==0 что то делаем millis()%200>10 что то делаем } использовать несколько раз функцию millis()?
|
Автор: | Improver [ Пн мар 02, 2020 09:18:26 ] |
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 |
честно говоря не совсем понял , что написал на 182 стр. ( if (millis() % 2==0)q++) Тогда, когда количество милисекунд после старта будет чётным (в 50% случаев), один шаг в цикле пропускается. Вы, извиняюсь, пишите скетч по методу вставки случайных команд в случайные места? но стали цифры отрисовываться с задержкой, если поставить например 10 то очень медленно, а на точку это не влияет! может кто пояснит? желательно по "слогам" ![]() можно ли в оной 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; // для того чтобы знать изменилась цифра или нет } |
Автор: | Serzh2000 [ Вс мар 15, 2020 15:55:40 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
Цитата: Сделайте просто, без всяких извращений над кодом, тормозили программу циклы 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;} } осталось почистить код, залить в атмегу и закрыть заднюю крышку у часов.
|
Автор: | Serzh2000 [ Пн апр 27, 2020 20:33:54 ] | ||
Заголовок сообщения: | Re: часы ардуино ds3231 max7219 ds18b20 | ||
вот что получилось ![]() корпус часов из розетки ![]() ![]() ![]() ![]() найдете косяк - исправлю будет вопрос - отвечу выскажете свое предложение - обсудим ![]()
|
Страница 1 из 11 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |