Как применить millis() вместо delay() в указанном коде?

Спасибо. Исправил у себя.

Здесь нет у меня ошибки. Бегать друг за другом должны 6 светодиодов по кругу, без чёрточки.

В void setup инициализируются 7 выходов контроллера ledPins в OUTPUT для 7 светодиодов, поэтому такая запись правильная.
for (index = 0; index < 7; index++) {
pinMode(ledPins[index], OUTPUT);
}
В функциях вращения направо или налево светодиоды должны бегать друг за другом по кругу без среднего седьмого светодиода, ускоряясь или замедляясь в зависимости от направления вращения движка потенциометра, поэтому там тоже правильно.
for (index = 0; index < 6; index++)

С логикой if чувствую, что намудрил как-то, но пока не ощущаю, что надо изменить.
Замечу, что программа работает правильно с точки зрения логики. Да, хотелось бы сделать код более красивым и оптимальным. Стремлюсь к этому, но дается нелегко пока. Еще раз посмотрю на логику if. Что там можно оптимизировать.

Тогда, по логике, здесь положено вставлять комментарий, чтобы читающий понимал, что это фича, а не бага.

Увидел свою же ошибку в ответе про инициализацию 7 раз COMa.
Хотел написать про Serial.begin(9600), а случайно написал про Serial.print().
Так вроде правильно.
void setup() {
// Все пины по очереди устанавливаем на выход. Счёт начинается с нуля, поэтому i <= 6, а не 7
for (index = 0; index < 7; index++) {
pinMode(ledPins[index], OUTPUT);
}
Serial.begin(9600); // Инициализируем COM-порт для отладки
}

Бегать по кругу светодиоды должны или в одну сторону, или в другую, ускоряясь или замедляясь, только на двух из трёх отрезков: от нуля до нижней границы и от верхней границы до конца, т.е. до 1023.
Надо было как-то исключить средний отрезок от down_Board до up_Board. В котором светодиоды вообще не должны бегать, а тихо молчать в тряпочку. Зато на этом участке должен зажечься горизонтальный светодиод, как раз и сигнализирующий о достижении границ этих и нахождении valPOT в этих границах. Я уже и сам не рад, что задал себе такую задачу. Тяжело. Пытаюсь программировать всего второй месяц. Задачу решил. Работает, но не оптимально.

Народ, подскажите, плиз, ещё одну вещь. Проблема в следующем:
По моему же условию next_valPOT >= valPOT, т.е. когда следующее считанное значение больше или равно предыдущему светодиоды должны бегать направо по часовой стрелке, что они и делают, но иногда упираются рогом против моего условия. Т.е., когда движок потенциометра не вращаем, по идее, должно быть next_valPOT = valPOT . Но из-за механического люфта в потенциометре, дребезга или каких-то наводок значения valPOT, которые вывожу в монитор, иногда сбиваются на единицу, что приводит к желанию этих самых светодиодов повращаться кратковременно в другую сторону.
Например, вижу в мониторе в каком-то стабильном положении потенциометра бегущие цифры: 800, 800, 800 и т.д. Потом проскакивает цифра 799, что приводит к сбою вращения в одну сторону и кратковременному вращению в другую. Дальше цифры могут опять быть 800, 800, 800 до следующего проскакивания сбоя.
ВОПРОС. Есть ли какая-то программисткая хитрость, позволяющая устроить что-то типа гистерезиса, чтобы исключить кратковременное влияние изменения считанного значения на процесс? Т.е. значения текущее valPOT и следующее next_valPOT искусственно отдалить друг от друга при сравнивании.
Я пытался принудительно создать что-то типа гистерезиса. Примерно так:
((next_valPOT + 10) >= valPOT) в первом условии if. И ((next_valPOT - 10) < valPOT) во втором условии if. Но это не помогает. Значит, не тот путь. Явно буду сталкиваться с похожими проблемами и в будущих программках. Как правильно поступить?

А какие у Вас проблемы? В посте про проблемы ничего не сказано.

Сравнивать два значения, если разница меньше порога, то ничего не делать.

Как говаривал Фагот: «Это опять-таки случай так называемого вранья».

Вы не себе поставили задачу, а нам. Когда ставят себе то и решают сами, ибо только так можно учиться. Вы же решили поучить нас. Спасибо, конечно, но, право, не стоило.

Это именно ТОТ путь, который обычно применяют в этом случае. А раз вам он “не помогает”, значит вы просто делаете что-то не так.
Если хотите помощи - покажите полный код, а не одну строчку.

setup() {} и loop(){} я думаю можно и оставить

Если только заменить делей на миллис, то тут на форуме на эту тему сто пятьсот тем

Большое спасибо всем, кто откликнулся. Уроки учту.
Немного неприятно и странно было читать комментарий ЕвгенияП.
Я действительно много и трудно работал над этой задачей. Для опытных людей она кажется пустяковой, возможно. Когда понял, что зациклился, то решил всё же обратиться сюда. Напрягать или уж тем более учить опытных людей у меня не было ни малейшего желания. Я ведь специально в песочницу обратился, а не куда-то ещё.

Недостаточно.

Задача разбивается на две:

  1. Определение направления и скорости движения бегущего огня
  2. Определение светодиода, который в этот момент должен гореть; соответственно, зажигать его и гасить остальные.

Как работать с задачами я дал ссылку еще в #18 посте

Да, это обязательно надо попробовать.

Есть.
И не одна.
Но каждый вариант обязательно имеет свои побочные эффекты.

Проблема в Вас.
Когда Вы будете знать и уметь раз в 10 (а, может, в 100) больше, чем сейчас, Вы будете воспринимать эти комментарии совсем иначе.

1 лайк