Мучаюсь с millis()

Еще раз:
тернарная операция - часть основного алгоритма,
цикл - код проверки/демонстрации.
Т.е. эти две строчки, хоть и стоят рядом, относятся к разным частям программы.
То есть работа тернарного оператора никак не зависит от значения переменной цикла - мы ее задаем снаружи алгоритма. И этот тернарный оператор должен работать при любых значениях входного параметра (в данном случае - переменной цикла).
Ну же писал - измените границы цикла до любого другого числа, скажем, до 10.

void setup() {
  Serial.begin(115200);
  Serial.println('\n');
  for(int i = 0; i < 6; i++) {
 // ==== начало алгоритма, который должен работать при любых i ===
   int j = i<5 ? i : 5;
    Serial.print("ArrFunc in: ");
    Serial.println(j);
    int k = fn[j](j);
    Serial.print("ArrFunc out: ");
    Serial.println(k);
// ==== конец алгоритма ===
  }

  for(int i = 0; i < 6; i++) {
    int j = i<5 ? i : 5;
    Serial.print("SwitchFunc in: ");
    Serial.println(j);
    SwitchFunc(j);
    Serial.print("SwitchFunc out: ");
    Serial.println(j);
  }
}

Так понятнее?

А не проще просто сделать три счётчика на милис с тремя разными интервалами - 5, 10 и 15 секунд соответственно :thinking: зачем столько сложностей - массивы, циклы и прочая куча кода.

Если что я спрашиваю что бы разобраться в вопросе - действительно нужно делать все эти циклы и массивы или это уже в силу опыта или профессионализма идёт просто не нужное усложнение кода и можно обойтись тремя простыми конструкциями счетчиков с разными интервалами (собственно как и в первом сообщении ТС).

Я понял что не так с изначальной конструкцией :person_facepalming:. Ну и видимо почти могу сам себе ответить на заданный мною вопрос.

1 лайк

критикуя, предлагай.

Видимо вы так же не внимательно прочитали моё сообщение как я первое в теме. Я спрашивал, а не критиковал. Ну и по итогу я понял что не так и что у ТС не получалось и дошёл к ответу сам, что без всех этих сложностей кода не обойтись.

П. С. Я новичок и только учусь :nerd_face:

Так, как написано у вас, включая второй фрагмент кода - опять масло маслянное.

Серьезные мущщины, если у них переменная цикла - параметр, делают хотя бы дифайн. Чтобы другой программист понял. Или написать комментарий.

#define MAX_NUM 6

for (i = 0; i < MAX_NUM …. )

   int j = ….

в процессе

Люблю дефайны. 3х0,5

for (every(500))
  for (count(3))
    Serial.println("one");

О, придумал задачку для студентов.

Чему будет равно “a = 0x0,3;”

vvb333007 0.1875 ?

Для обфускации сойдёт.)
Только в скобках.

1 лайк
  1. Как выяснилось позднее, код из первого сообщения не решает и не может решить задачу, поставленную ТС. Так что “упрощение” в данном случае означает потерю работоспособности.
  2. Любую задачу можно решить разными способами (имеется в виду - решить правильно, - а не так, как в первом сообщении).
  3. Счетчики сами по себе не такая простая конструкция, как может показаться на первый взгляд. В частности, у них изначально отсутствует механизм синхронизации между собой. А дополнение этим механизмом существенно усложнит код.
  4. Из “2.” совсем не следует, что существует какой-то единственный оптимальный способ. Обычно при разных условиях оптимальными могут оказаться различные варианты. Профессионалы в качестве критериев оптимальности выделяют надежность кода, его масштабируемость и простоту поддержки. Ни один из этих критериев не совпадает с минимизацией объема кода. Поэтому “нужное” усложнение кода или “не нужное” решает сам программист.
1 лайк

a == 3

1 лайк

Согласен.

enum index {DISPLAY_MODE_SHOW_TIME, 
            DISPLAY_MODE_SET_HOUR, 
            DISPLAY_MODE_SET_MINUTE, 
            DISPLAY_MODE_SHOW_TIMER_1, 
            DISPLAY_MODE_SHOW_TIMER_2,
            DISPLAY_MODE_DEFAULT,
            DISPLAY_MODE_OUT_OF_RANGE};
#define ANY_NUMBER 0          

...

  for(int i = 0; i < DISPLAY_MODE_OUT_OF_RANGE + ANY_NUMBER; i++) {
    int j = i < DISPLAY_MODE_DEFAULT ? i : DISPLAY_MODE_DEFAULT;

1 лайк

Понял. Спасибо за чёткий ответ :handshake:

Почти :slight_smile:

Правильно :slight_smile: А так: float a = (float )0x0,0666?

0.1875 - это ответ ИИ.

Серьезно? Ты скопировал или сам писал? Там у меня запятая а не точка. Но ИИ топ , да :)))

У бабоса спрашивай, а не у меня. Это он такой ответ давал.