/* * Код для переливания разными цветами трёх светодиодов, красного, зелёного и синего, * или одного трёхцветного светодиода, используя ШИМ. * The program cross-fades slowly from red to green, green to blue, and blue to red * The debugging code assumes Arduino 0004, as it uses the new Serial.begin()-style functions * originally "dimmingLEDs" by Clay Shirky */ // Выходы int redPin = 9; // Красный светодиод, подключён на цифровой пин 9 int greenPin = 10; // Зелёный светодиод, подключён на цифровой пин 10 int bluePin = 11; // Синий светодиод, подключён на цифровой пин 11 // Программные переменные int redVal = 255; // Переменные для хранения величин, посылаемых на пины int greenVal = 1; // Изначальные значения: Красный полный, Зелёный и Синий - выкл int blueVal = 1; int i = 0; // Счётчик цикла int wait = 15; // задержка 50мс (.05 секунды); уменьшите для более быстрого пульсирования int DEBUG = 0; // флаг отладки; если сделан 1, через последовательный порт будут идти значения void setup() { pinMode(redPin, OUTPUT); // сделать пины выходами pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); if (DEBUG) { // Если мы хотим видеть значения на пинах для отладки... Serial.begin(9600); // ...сделайте последовательный вывод в стиле 0004 } } // Основная программа void loop() { i += 1; // Инкремент счётчика if (i < 255) // Первая фаза пульсации { redVal -= 1; // Красный гасить greenVal += 1; // Зелёный зажигать blueVal = 1; // Синий выключить } else if (i < 509) // Вторая фаза пульсации { redVal = 1; // Красный выключить greenVal -= 1; // Зелёный гасить blueVal += 1; // Синий зажигать } else if (i < 763) // Третья фаза пульсации { redVal += 1; // Красный зажигать greenVal = 1; // Зелёный выключить blueVal -= 1; // Синий гасить } else // Перезапустить счётчик и начать пульсацию снова { i = 1; } // пишем "255-redVal" вместо просто "redVal", потому что // светодиоды подключены к +5В вместо "земли" analogWrite(redPin, 255 - redVal); // Послать текущие величины на пины светодиодов analogWrite(greenPin, 255 - greenVal); analogWrite(bluePin, 255 - blueVal); if (DEBUG) { // Если мы хотим посмотреть, что на выходах DEBUG += 1; // Увеличить счётчик DEBUG if (DEBUG > 10) { // Печатать каждые 10 итераций DEBUG = 1; // Перезапустить счётчик Serial.print(i); // Команды последовательного порта в стиле 0004 Serial.print("\t"); // Напечатать табуляцию Serial.print("R:"); // Показать, что выводим значение красного Serial.print(redVal); // Напечатать значение красного Serial.print("\t"); // Напечатать табуляцию Serial.print("G:"); // Повторить для зелёного и синего... Serial.print(greenVal); Serial.print("\t"); Serial.print("B:"); Serial.println(blueVal); // println, чтобы закончить символом возврата каретки } } delay(wait); // Пауза, чтобы 'подождать' миллисекунды перед следующей итерацией цикла }