Всем привет. Есть кусок кода, который отображает на дисплее время и гаснет через i от 0 до 100. Это ужасная практика, как можно все это переделать на миллис или хотя уйти от while ??? Пытался через несколько millis вместо delay, но на индикаторе отображается ерунда (((
Сам исходный код такой:
void mode_display_time(){ //функция отображения текущего времени
RTC.read(tm);
int i = 0;
while(i < 100) {
now_time = tm.Hour*100 + tm.Minute;
int a = now_time/ 1000;
int b = now_time % 1000/100;
int c = now_time % 100/10;
int d = now_time % 10;
digitalWrite(DIGIT_1PIN,HIGH);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,LOW);
show_number(a);
delay(time_delay);
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,HIGH);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,LOW);
show_number(b);
delay(time_delay);
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,HIGH);
digitalWrite(DIGIT_4PIN,LOW);
show_number(c);
delay(time_delay);
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,HIGH);
show_number(d);
delay(time_delay);
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,LOW);
i++;
}
display_digits_off();
numMenu = 0;
}
Через while таким образом отключаю отображение сегментов через промежуток времени. Delay - отображение символов на 4- символьном 7 сегментом индикаторе поочередно.
Скетч неполный, потому ничего сказать нельзя. Как часто вызывается функция mode_display_time? Если типа “один раз и должна показать”, то и не должно работать.
… дальше рассуждать не буду, ибо скетча не вижу и не хочу “вилами в воду” тыкать.