Приветствую все спецов, коим я не являюсь и по этому прошу не бросаться выражениями не несущими никакой полезной информации.
Касаемо проблемы, имеется адресный дисплей кругового типа на котором установлены 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
...
Не жёстко?
Даже самый правильный ответ может оказаться бесполезным, если вопрошающий его не поймёт. Вы полностью уверены, что в состоянии отличить правильный и по делу ответ от “бесполезной информации”?
Что-то пропало желание пытаться отвечать. Вдруг, не дай Бог, конечно, Вы сочтёте ответ бесполезным.
Будьте попроще и Вам помогут.
Я не буду спорить, но у меня был случай, когда мне испортили желание заниматься программированием и под словами “выражения не несущих никакой полезной информации” думаю понятно о чем я) И отличить логику “помощи” от логики “что ты тут забыл нуб” я смогу)
Я так пробовал, через switch case). только это выглядит ну не совсем хорошо)
Чего ж ты занимаешься программированием, если тебе уже испортили желание? Моргни два раза, если тебе угрожают.
Принял решение, что я умнее тех, кто считает себя умнее других)
Или это желание было слишком слабым, или Вы легко поддаетесь на чужое мнение. Увереннее надо быть и тверже))
Понял принял учту) Спасибо)
будь текуч, как вода…
Наш человек!
Так, как Вам надо решать задачу? Красиво и идейно-выдержанно? Или коряво, по-рабоче-крестьянски, лишь бы хоть как-то работало? Это, как Вы понимаете, разные подходы.
Решение нужно профессиональное и если дело дойдет до регистров, так даже лучше. По решению вопроса с моей точки зрения была не правильно описана проблема, нужны все возможные решения, кому не лень написать, чтобы можно было повариться в этом бульоне некоторое время и решить как оно должно быть)
Всё куда как проще не нужны тебе +/- 2, просто у тебя первый диод должен быть привязан к переменной, а не средний. Хотя бы при выводе.
Ну и выводить через остаток от деления на 23.
Код не дам, сам пиши
Проблема надумана.
КГ/АМ
Хотя:
void ledOut(int val){
int ledNum=val-2;
for(int i=ledNum;i<ledNum+5;i++){
LedOut((i+23)%23);
}
//LedOut сам пиши
}
Расхождение детектед ! 0-23 это 24 значения ! ТС сколько диодов у вас ???
Могешь!) хорош! Так я ещё не тупил) спасибо)
По человечески конечно же 24. По программному 23)
Исправил для 24 - Замкнутый контур значений 0-23; 23-0 - #2 от пользователя Komandir
В каком аспекте?
Ум, как некоторые считают, можно представить совокупностью трех составляющих:
- Хитрость, то есть умение найти для себя выгоды в любой ситуации;
- Собственно интеллект, то есть умение видеть причины и следствия, аналогии и строить модели реальности;
- Эрудиция. Не нуждается в пояснении.
Как я понимаю, не в третьем пункте? Угадал?
что ума, как такового, вообще НЕТ!!!