Замкнутый контур значений 0-23; 23-0

Приветствую все спецов, коим я не являюсь и по этому прошу не бросаться выражениями не несущими никакой полезной информации.
Касаемо проблемы, имеется адресный дисплей кругового типа на котором установлены 23 светодиода WS2812.
Дисплей имеет сегментное свечение по 5 светодиодов. Т.е. нужно засветить относительно пришедшего значения int8_t x = 5, 2 светодиода до, светодиод значения “х” и два после. Основной цикл построил на
for(int8_t a = x - 2; a <= x + 2; a++){
//Вывод значения.
}
Но это работает если переменная “х” не попадает в значения 22, 23, 0, 1, т.к. в этом случае выходит за значения 0-23.
Можно прописать через if. Или написать массив на значения 22, 23, 0, 1, но мне что то подсказывает, что это можно сделать как то более правильно и адекватно. Если имеются какие то другие замечания или всплывает в голове мысль “иди книжку почитай” рад выслушать и узнать, какую книгу с вашей точки зрения я должен прочесть) Спасибо в любом случае)

x надо гонять от 2 до 23+2, а на вывод отправлять остаток от деления a на 23

  for (uint8_t x=2;x<=23+2;x++) {
    for (uint8_t a=x-2; a<=x+2;a++) {Serial.print(a % 24); Serial.print(' ');}
    Serial.println();
  };

Start
0 1 2 3 4 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 
5 6 7 8 9 
6 7 8 9 10 
7 8 9 10 11 
8 9 10 11 12 
9 10 11 12 13 
10 11 12 13 14 
11 12 13 14 15 
12 13 14 15 16 
13 14 15 16 17 
14 15 16 17 18 
15 16 17 18 19 
16 17 18 19 20 
17 18 19 20 21 
18 19 20 21 22 
19 20 21 22 23 
20 21 22 23 0 
21 22 23 0 1 
22 23 0 1 2 
23 0 1 2 3 
0 1 2 3 4 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 
5 6 7 8 9 
6 7 8 9 10 
7 8 9 10 11 
8 9 10 11 12 
9 10 11 12 13 
10 11 12 13 14 
11 12 13 14 15 
12 13 14 15 16 
13 14 15 16 17 
14 15 16 17 18 
15 16 17 18 19 
16 17 18 19 20 
17 18 19 20 21 
18 19 20 21 22 
19 20 21 22 23 
20 21 22 23 0 
21 22 23 0 1 
22 23 0 1
...
1 лайк

Не жёстко?

Даже самый правильный ответ может оказаться бесполезным, если вопрошающий его не поймёт. Вы полностью уверены, что в состоянии отличить правильный и по делу ответ от “бесполезной информации”?

Что-то пропало желание пытаться отвечать. Вдруг, не дай Бог, конечно, Вы сочтёте ответ бесполезным.

Будьте попроще и Вам помогут.

1 лайк

Я не буду спорить, но у меня был случай, когда мне испортили желание заниматься программированием и под словами “выражения не несущих никакой полезной информации” думаю понятно о чем я) И отличить логику “помощи” от логики “что ты тут забыл нуб” я смогу)

Я так пробовал, через switch case). только это выглядит ну не совсем хорошо)

Чего ж ты занимаешься программированием, если тебе уже испортили желание? Моргни два раза, если тебе угрожают.

3 лайка

Принял решение, что я умнее тех, кто считает себя умнее других)

Или это желание было слишком слабым, или Вы легко поддаетесь на чужое мнение. Увереннее надо быть и тверже))

1 лайк

Понял принял учту) Спасибо)

будь текуч, как вода…

1 лайк

Наш человек!

Так, как Вам надо решать задачу? Красиво и идейно-выдержанно? Или коряво, по-рабоче-крестьянски, лишь бы хоть как-то работало? Это, как Вы понимаете, разные подходы.

1 лайк

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

Всё куда как проще не нужны тебе +/- 2, просто у тебя первый диод должен быть привязан к переменной, а не средний. Хотя бы при выводе.
Ну и выводить через остаток от деления на 23.
Код не дам, сам пиши

Проблема надумана.
КГ/АМ

2 лайка

Хотя:

void ledOut(int val){
int ledNum=val-2;
for(int i=ledNum;i<ledNum+5;i++){
LedOut((i+23)%23);
}
//LedOut сам пиши 
}
1 лайк

Расхождение детектед ! 0-23 это 24 значения ! ТС сколько диодов у вас ???

Могешь!) хорош! Так я ещё не тупил) спасибо)

По человечески конечно же 24. По программному 23)

Исправил для 24 - Замкнутый контур значений 0-23; 23-0 - #2 от пользователя Komandir

1 лайк

В каком аспекте?
Ум, как некоторые считают, можно представить совокупностью трех составляющих:

  1. Хитрость, то есть умение найти для себя выгоды в любой ситуации;
  2. Собственно интеллект, то есть умение видеть причины и следствия, аналогии и строить модели реальности;
  3. Эрудиция. Не нуждается в пояснении.

Как я понимаю, не в третьем пункте? Угадал?

1 лайк

что ума, как такового, вообще НЕТ!!!

1 лайк