Сб фев 08, 2020 17:33:05
Пн фев 10, 2020 13:19:22
Пн фев 10, 2020 14:58:15
Пн фев 10, 2020 15:58:02
Вт фев 11, 2020 11:48:53
Вт фев 11, 2020 15:25:09
Вт фев 11, 2020 16:25:03
Плата на проволочках, на механических контактах долго не проживёт.
Чт фев 13, 2020 21:08:43
Сб фев 15, 2020 11:27:44
Чт фев 20, 2020 19:31:20
Пт фев 21, 2020 08:34:01
refreshAll();
delay(30);
clrAll();
Пт фев 21, 2020 09:11:50
Т.е. сначала обновить, потом подождать, а потом очистить и повторять вывод.
Может увеличить задержку в delay с 30 мс до ~500? В сам код не вникал глубоко, может и ошибаюсь...
Вт фев 25, 2020 21:31:30
Чт фев 27, 2020 16:15:10
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(); // обновить всё, что навыводили в цикле, так?
Чт фев 27, 2020 19:31:09
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)", который выполняется, если значение не изменилось...
Пт фев 28, 2020 10:46:18
Пт фев 28, 2020 18:00:19
В таком виде нормально, теперь можно вернуть delay
Serzh2000 писал(а):
(с эффектом которым борюсь, чтобы цифра отрисовывалась за 0,9 милсек)
Может за 0,9 сек?
Пн мар 02, 2020 09:18:26
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; // для того чтобы знать изменилась цифра или нет
}
Вс мар 15, 2020 15:55:40
Сделайте просто, без всяких извращений над кодом,
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;}
}
Пн апр 27, 2020 20:33:54