Всем привет. Функция успешно работала и отображала время. Решил как все советуют уйти от delay и переделать все на millis.
Было:
void mode_display_time(){ //функция отображения времени
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;
}
Стало:
void mode_display_time(){ //функция отображения времени
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;
if (millis() - previousMillis > time_delay)
{
previousMillis = millis();
digitalWrite(DIGIT_1PIN,HIGH);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,LOW);
show_number(a);
}
if (millis() - previousMillis > time_delay)
{
previousMillis = millis();
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,HIGH);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,LOW);
show_number(b);
}
if (millis() - previousMillis > time_delay)
{
previousMillis = millis();
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,HIGH);
digitalWrite(DIGIT_4PIN,LOW);
show_number(c);
}
if (millis() - previousMillis > time_delay)
{
previousMillis = millis();
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,HIGH);
show_number(d);
}
if (millis() - previousMillis > time_delay)
{
previousMillis = millis();
digitalWrite(DIGIT_1PIN,LOW);
digitalWrite(DIGIT_2PIN,LOW);
digitalWrite(DIGIT_3PIN,LOW);
digitalWrite(DIGIT_4PIN,LOW);
}
i++;
}
display_digits_off();
numMenu = 0;
}
В общем время перестало отображаться, полазил по форумам, решения как такого не нашел, кроме если делать какие-то искусственные задержки типа for или вообще serial.println добавить, ну в общем не правильно все это. Как исправить мой код, что бы работало все с миллис??? Это отображение цифр на 7 сегментом индикаторе. Если слишком гемморно, все верну обратно в delay. СПАСИБО