В общем суть такова: Делали с дочерью проект, все получилось все работает, но мне самому интересно, как более рационально оптимизировать код который мы написали. Немного о проекте: Проект создан на базе Arduino UNO. Имеется 4 кнопки, "Влево", "Вверх", "Вниз", "Вправо", и 6 светодиодов 3 из них bigLed, и 3 smallLed, smallLed светодиоды указывают какой из bigLed светодиодов сейчас выбран. Выбор осуществляется кнопками "Влево", "Вправо", а кнопками "Вверх", "Вниз" осуществляется регулировка яркости светодиодов bigLed. Вот собственно такой не замысловатый проект. вот код проекта: Код (C++): int bigLed[] = {3, 5, 6}; //создаем массив пинов для больших светодиодов int smallLed[] = {7, 8, 9}; //создаем массив пинов для маленьких светодиодов int knopka[] = {10,11,12,13}; //создаем массив пинов для кнопок int count = -1; //создаем счетчик int brightnes[] = {0, 0, 0}; //создаем массив из трех элементов для указания яркости каждого (большого) светодиода int del=300; //задержка void setup() { for (int i = 0; i <= 3; i++) { pinMode(knopka[i], INPUT); //обозначаем, что пины кнопок работают как INPUT } for (int i = 0; i <= 2; i++) { pinMode(bigLed[i], OUTPUT); //обозначаем, что пины больших светодиодов работаю как OUTPUT pinMode(smallLed[i], OUTPUT); //обозначаем, что пины маленьких светодиодов работаю как OUTPUT } } void loop() { //----кнопка влево----- int value2 = digitalRead(knopka[1]); //читаем данные пина if ( value2 == HIGH ) { //если кнопка нажата тогда count = count + 1; //увеличиваем счетчик на единицу if (count > 2) { //проверяем значение счетчика если он больше 2 тогда count = 2; //счетчик равен 2, что бы значение счетчика не переполнялось } for (int i = 0; i <= 2; i++) { digitalWrite(smallLed[i], LOW); //тушим все маленькие светодиоды } digitalWrite(smallLed[count], HIGH); //зажигаем светодиод с номером хранящемся в count delay(del); //задержка } //----кнопка вправо----- int value3 = digitalRead(knopka[2]); //читаем данные пина if ( value3 == HIGH ) { //если кнопка нажата тогда count = count - 1; //уменьшаем счетчик на единицу if (count < 0) { //проверяем значение счетчика, если он меньше 0 тогда count = 0; //счетчик равен 0, что бы значение счетчика не переполнялось } for (int i = 0; i <= 2; i++) { digitalWrite(smallLed[i], LOW); //тушим все маленькие светодиоды } digitalWrite(smallLed[count], HIGH); //зажигаем светодиод с номером хранящемся в count delay(del); //задержка } //----кнопка вверх----- int value1 = digitalRead(knopka[0]); //читаем данные пина if ( value1 == HIGH ) { //если кнопка нажата тогда brightnes[count] = brightnes[count] + 1; //увеличиваем счетчик яркости для больших светодиодов на единицу if (brightnes[count] > 254) { //проверяем значение счетчика, если он больше 254, тогда brightnes[count] = 254; //счетчик равен 254, что бы значение счетчика не переполнялось } analogWrite(bigLed[count], brightnes[count]); //зажигаем большой светодиод с номером count, яркостью brightnes delay(del); //задержка } //----кнопка вниз----- int value4 = digitalRead(knopka[3]); //читаем данные пина if ( value4 == HIGH ) { //если кнопка нажата тогда brightnes[count] = brightnes[count] - 1; //уменьшаем счетчик яркости для больших светодиодов на единицу if (brightnes[count] < 0) { //проверяем значение счетчика, если он меньше 0, тогда brightnes[count] = 0; //счетчик равен 0, что бы значение счетчика не переполнялось } analogWrite(bigLed[count], brightnes[count]); //зажигаем большой светодиод с номером count, яркостью brightnes delay(del); //задержка } //-----the end :^)----- }
Хорошо написано! Странно только, что у вас массив knopок, а не button-ов. А что вы хотите оптимизировать? Скорость, память, потребление или вам кажется, что код громоздкий? Можно процедуры сгруппировать по типу кнопки (лево-право и верх-низ), просто от выбранной кнопки будет зависеть "+" или "-" у переменной count. псевдо код мог бы быть таким: Код (C++): если нажата кнопка3 или кнопка0 то{//верх или низ слагаемое=1//считаю, что обычно нажимат кнопку0 если нажата кнопка3 то слагаемое=-1//но если уж нажали на кнопку3, то надо исправить знак яркость кнопки[count]=яркость кнопки[count] + слагаемое далее идёт ограничение сверху и снизу для яркости как у вас подать яркость на большой светодиод[count] } аналогично можно сделать и для кнопок1 и 2