/* * RGB Pot Mixer * ------------- * * Код для управления посредством одного потенциометра3 светодиодами, красным, * зелёным и синим, или одним трёхцветным светодиодом * * Программа переходит из красного в зелёный, из зелёного в синий, из синего * в красный. * * Код предполагает, что у Вас есть светодиоды, подключенные в соответствии со * схемой с общим анодом, когда анод светодиода подключён к +5В через резистор, * и катод подключён к пинам Arduino 9,10,11. * * В оригинале Clay Shirky * Немного изменён Tod E. Kurt * */ // ВХОДЫ: Потенциометр должен быть подключён к 5В и "Земле" int potPin = 2; // Подключение потенциометра int potVal = 0; // Переменная для хранения значения с потенциометра // ВЫХОДЫ: Используются цифровые пины 9-11, с Широтно-Импульсной модуляцией (ШИМ) int redPin = 9; // Красный светодиод, подключён на цифровой пин 9 int grnPin = 11; // Зелёный светодиод, подключён на цифровой пин 10 int bluPin = 10; // Синий светодиод, подключён на цифровой пин 11 // Программные переменные int redVal = 0; // Переменные для хранения величин, посылаемых на пины int grnVal = 0; int bluVal = 0; int DEBUG = 0; // Сделайте 1, чтобы включить отладочную печать void setup() { pinMode(redPin, OUTPUT); // сделать пины выходами pinMode(grnPin, OUTPUT); pinMode(bluPin, OUTPUT); if (DEBUG) { // Если мы хотим видеть значения на пинах для отладки... Serial.begin(19200); // ...сделайте последовательный вывод в стиле 0004 } } // Основная программа void loop() { potVal = analogRead(potPin); // считать значение на потенциометре, на входном пине if (potVal < 341) { // нижняя треть диапазона потенциометра (0-340) potVal = (potVal * 3) / 4; // Нормализовать в 0-255 redVal = 255 - potVal; // Красный от полного до выключения grnVal = potVal; // Зелёный от выключения до полного bluVal = 1; // Синий выключить } else if (potVal < 682) { // средняя треть диапазона потенциометра (341-681) potVal = ( (potVal-341) * 3) / 4; // Нормализовать в 0-255 redVal = 1; // Красный выключить grnVal = 255 - potVal; // Зелёный от полного до выключения bluVal = potVal; // Синий от выключения до полного } else { // верхняя треть диапазона потенциометра (682-1023) potVal = ( (potVal-683) * 3) / 4; // Нормализовать в 0-255 redVal = potVal; // Красный от выключения до полного grnVal = 1; // Зелёный выключить bluVal = 255 - potVal; // Синий от полного до выключения } // "255-", потому что у нас светодиоды с общим анодом, а не с общим катодом analogWrite(redPin, 255-redVal); // Послать величины на пины светодиодов analogWrite(grnPin, 255-grnVal); analogWrite(bluPin, 255-bluVal); if (DEBUG) { // Если мы хотим посмотреть, что на выходах DEBUG += 1; // Увеличить счётчик DEBUG if (DEBUG > 100) { // Печатать каждые 100 итераций DEBUG = 1; // Перезапустить счётчик Serial.print("R:"); // Показать, что выводим значение красного Serial.print(redVal); // Напечатать значение красного Serial.print("\t"); // Напечатать табуляцию Serial.print("G:"); // Повторить для зелёного и синего... Serial.print(grnVal); Serial.print("\t"); Serial.print("B:"); Serial.println(bluVal); // println, чтобы закончить символом возврата каретки } } }