Например если при увеличении яркости дошло до конца, а потом начать уменьшать яркость, то просто после функции увеличения яркости (прибавлял по 51) , начинай вычитать по 51 и проверем дошло ли до 0-ля.
Код (Text): int sign = 1; int value = 0; void loop() { // если случилось событие if(some_event) { // прибавить к переменной нечто, умноженное на знак. // (если знак == -1, то вычтем нечто) value += 10 * sign; // если дошли до границ диапазона - меняем знак на противоположный if(value >= 100 || value <= 0) sign = sign * -1; } } Будет бегать от 0 до 100 туда и обратно. Вы это имели ввиду?
Нужно всего лишь изложить задачу максимально формализованно, после этого слова довольно легко переводятся в код.
Код (Text): void loop() { // Управление красным цветом светодиода. currentbuttonR = debounceR(lastbuttonR); // проферяеям при помощи функции debounceR состояние кнопки. if (lastbuttonR == LOW && currentbuttonR == HIGH ) // Если предыдущее значение было ноль, а текущее единица. { ledonR = ledonR + 51 ; // Тогда увеличиваем яркость светодиода на 51 if ( ledonR > 255) ledonR = 0 ; // Если значении становится больше 255, то гасим светодиод } lastbuttonR = currentbuttonR; // Запоминамем текущее состояние кнопки analogWrite(pinR, ledonR); // Передаем измененное значение яркости на вывод Ардуино. }
Код (Text): int sign = 1; void loop() { currentbuttonR = debounceR(lastbuttonR);кнопки. if (lastbuttonR == LOW && currentbuttonR == HIGH ) { ledonR = ledonR + 51 * sign; if (ledonR >= 255 || ledonR <= 0) sign *= -1; } lastbuttonR = currentbuttonR; analogWrite(pinR, ledonR); } Так правильно работает?
а если управлять яркостью одним светодиодом с двух кнопок получается так? Код (Text): /Объявляем переменные. int pinR = 11; // RED Контакты для управления цветами светодиода int pin13 = 13; // Для управления контактом 13, чтоб погасить светодиод на плате. int buttonR = A1; // Для считывания значений с кнопок. int buttonB = A5; // Этот раздел переменных используется для корректного получения значений с кнопок. // RED boolean lastbuttonR = LOW; // последнее значение кнопки boolean currentbuttonR = LOW; // текущее значение кнопки int ledonR = 0; // яркость светодиода // RED boolean lastbuttonB = LOW; boolean currentbuttonB = LOW; int ledonB = 0; // Функция Setup выполняется Ардуино только один раз при включении. // данная функция используется для установки параметров микроконтрллера. void setup() { //pinMode установка параметров контактов I/O // OUTPUT - выход. // INPUT - вход. pinMode(pin13, OUTPUT); pinMode(pinR, OUTPUT); pinMode(buttonR, INPUT); pinMode(buttonB, INPUT); digitalWrite(pin13, LOW); // установка 13 контакта в 0. Светодиод на 13 контакте гаснет. По-умолчанию он горит. } // Булевая функция для определения состояний кнопок. // Кнопка прибавления яркости boolean debounceR(boolean last) // Переменная last принимает значение, переданное функции { boolean current = digitalRead(buttonR); // Объявляем переменную current и считываем в нее значение кнопки if (last != current) // Если текущее значение кнопки отличается от переданной в функцию ( != - не равно ) { delay(5); // тогда ждем 5 милисекунд. Это необходимо чтоб избавиться от колебаний напряжения поступающих с кнопки и получить точное значение. current = digitalRead(buttonR); // повторно считвыаем значение с кнопки. Уже без шумов. } return current; // Возвращаем значение полученное логическое значение. // last и current доступны только в пределах данной функции. } // Кнопка уменьшения яркости boolean debounceB(boolean last) { boolean current = digitalRead(buttonB); if (last != current) { delay(5); current = digitalRead(buttonB); } return current; } // Бесконечный цикл, повоторяющийся на микроконтроллере, пока он включен. void loop() { // прибавления яркости светодиода. currentbuttonR = debounceR(lastbuttonR); // проферяеям при помощи функции debounceR состояние кнопки. if (lastbuttonR == LOW && currentbuttonR == HIGH ) // Если предыдущее значение было ноль, а текущее единица. { ledonR = ledonR + 51 ; // Тогда увеличиваем яркость светодиода на 51 if ( ledonR > 255) ledonR=255; } lastbuttonR = currentbuttonR; // Запоминамем текущее состояние кнопки analogWrite(pinR, ledonR); // Передаем измененное значение яркости на вывод Ардуино. //уменьшение яркост светодиода. currentbuttonB = debounceB(lastbuttonB); if (lastbuttonB == LOW && currentbuttonB == HIGH ) { ledonB = ledonB - 51 ; if ( ledonB > 255) ledonB=0; } lastbuttonB = currentbuttonB; analogWrite(pinR, ledonR); }