Arduone kit
Урок №3 RGB - светодиод
Трехцветный светодиод. RGB - Red, Green, Blue! Красный, Зеленый и Синий - три в одном!
Что может быть прекраснее мигающего светодиода? Трехцветный светодиод. RGB - Red, Green, Blue! Красный, Зеленый и Синий - три в одном! Три светодиода в одном корпусе. Они могут удивительно переливаться, выдавая неповторимые оттенки и световые эффекты, это зависит от того, на сколько ярко горит тот, или иной светодиод. В этом опыте вы научитесь подключать его к Arduino, а так же как им управлять.
Схема подключения
Скетч
// Программа демонстрации возможностей RGB LED
// Сначала мы присвоим нужным портам имена, чтобы легче
// читать и понимать нашу программу.

// Вот новый трюк: поставленное слово "const" перед переменной
// указывает, на то что эта переменная имеет «постоянное» значение,
// которое никогда не будет меняются. ( Вы должны это помнить, иначе
// Arduino выдаст вам дружеское предупреждение, если вы случайно
// попытаетесь изменить это значение.

const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;

// Следующая переменная контролирует, на сколько быстро выполняется цикл
// по смене цветов (в качестве эксперимента попробуйте поменять ее значение)

int DISPLAY_TIME = 100;  // в миллисекундах

void setup()
{
// Далее мы конфигурируем порты Arduino которые будут управлять светодиодом:

  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}

void loop()
{

// В этом примере, мы начнем писать свои собственные функции. 
// Функции разбивают программу на маленькие кусочки, это упрощает
// понимание программы и поэтому отпадает необходимость каждый
// раз вносить изменения в setup() или loop().

// Мы покажем вам два способа для запуска RGB LED. 
// Первый способ состоит из включения и выключения красного, 
// зеленого и синего в различных сочетаниях (например красный – синий,
// или зеленый синий, зеленый - синий и т.п). Такие сочетания, в общей
// сложности, дают вам восемь цветов (если считать "черный" в качестве цвета). 

// Мы создали функцию с именем mainColors (), которая проходит через
// все восемь цветов. Здесь мы только вызываем нашу функцию,
// как бы говорим – запустить. Сам же код функции находится ниже.

mainColors();

// Эта функция включает и выключает отдельно каждый светодиод либо Вкл., либо
// Выкл. Если вы хотите получить больше чем восемь цветов, вам придется
// изменять еще и яркость каждого светодиода. Для этого можно воспользоваться
// функцию analogWrite(), - градация яркости от 0 до 255. Далее идет функция
// с именем showSpectrum (), которая плавно проследует через каждый из 8 цветов.
// Опять же здесь мы только называем ее, сам же код находится ниже.

  showSpectrum();
}

// Если вам захочется использовать функцию mainColors() в своих собственных
// программах, просто скопируйте ее код и добавьте в свой скетч.

void mainColors()
{
// Выкл. – все светодиоды выключены

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);

delay(1000);

// Включаем КРАСНЫЙ – RED_PIN, HIGH.

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

// Включаем ЗЕЛЕНЫЙ – GREEN_PIN, HIGH.

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

// Включаем СИНИЙ – BLUE_PIN, HIGH.

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

// Включаем ЖЕЛТЫЙ – RED и BLUE HIGH.

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

// БИРЮЗОВЫЙ – GREEN и BLUE

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

//РОЗОВЫЙ – RED и BLUE

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

//БЕЛЫЙ – все цвета HIGH (Вкл.)

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);
}

// Ниже приведен код еще двух функций: 
// ShowSpectrum () и showRGB(). 

// ShowRGB () выводит один цвет на светодиод. Когда вам необходим
// определенный цвет, вызываете showRGB() с нужным вам цветом.

// ShowSpectrum () выводит все цвета по очереди – радуга. 
// На самом деле showSpectrum() вызывает снова и снова
// функцию showRGB (), для того чтобы получилась радуга. 

// Мы будем часто разбивать задачи на отдельные функции, как
// в этом примере. Это Упрощает написание программ, и можно
// легко перенести функцию в свою новую программу.

// showSpectrum()
// Эта функция перебирает все возможные цвета, путем увеличения
// переменной от 0 до 768 (общее количество цветов), и неоднократно
// вставляет полученное значение в showRGB (), чтобы отобразить отдельные цвета. 

// В этой функции, мы используем петлю “loop()” в которой выполняется цикл
// из трех последовательных шагов:
// Инициализация переменной «int x», в следующем шаге увеличиваем эту
// переменную на единицу, и в следующем шаге вызываем функцию showRGB(),
// вставляя в нее новое значение переменной, ждем некоторое время, примерно 10мс.,
// и выполняем петлю заново. Таким образом наша функция showRGB() получает
// новое значение при каждом новом проходе петли.

// Если еще подробнее - Каждый «for() цикл имеет
// три инструкции через точку с запятой: 

// 1. Что-то делать, прежде чем начать 
// 2. Тест - выполняется ли условие. Петля «loop()» будет выполняться, пока условие истинно.
// 3. Что-то сделать после каждого цикла - в нашем случае увеличить переменную.

// Условия для for(), чуть ниже: 

// 1.  х = 0; Перед началом, убедиться, что х = 0. 
// 2. х <768;  Далее условие: проверить, x меньше 768, если да,
// то выполнить следующую инструкцию.
// 3. x ++ т.е увеличить переменную х на единицу.
// Вы можете использовать и такой вид записи: "х = х + 1"

// Каждый раз, когда вы идете через петлю, значение переменной будет увеличиваться
// пока не дойдет до 768, а это значит, что условие стало ложным, и значит пора
// выходить из петли. И переходить к следующей инструкции.

void showSpectrum()
{
  int x;
  for (x = 0; x < 768; x++)
  {
    showRGB(x);  // Вызов RGBspectrum() сновым значением x
    delay(10);   // Пауза 10 ms (1/100 секунды)
  }
}

// ShowRGB() 
// Эта функция переводит число от 0 до 767 в  определенный цвет.
// Если плавно пройтись по этому числовому ряду, то светодиод будет
// плавно менять цвет через весь цветовой спектр. 

// Базовые цифры: 
// 0 = чистый красный 
// 255 = чистый зеленый 
// 511 = чистый синий 
// 767 = чистый красный (опять же) 

//Числа между вышеуказанных создадут промежуточные цвета.  
// Например, 640 находится на полпути между 512 (чистый синий)
// и 767 (Чистый красный). Это даст смесь синего и красного,
// в результате чего получится фиолетовый. 

// Если  посчитать в верх от 0 до 767 и передать это число функции,
// то светодиод будет плавно переливаться всеми цветами радуги.
// Начиная и заканчивая красным.

void showRGB(int color)
{
  int redIntensity;
  int greenIntensity;
  int blueIntensity;

//Здесь мы будем использовать условие «if/else» (если/тогда), для
// того чтобы определить в какую из трех зон (R,G,B)
// попадет значение переменной x
//Каждая из этих зон охватывает значение от 0 до 255, потому что
// только такие значения понимает функция analogWrite().
// В каждой из этих зон, мы будем вычислять яркость для
// каждого из светодиодов - красного, зеленого и синего.

  if (color <= 255)                // зона 1
  {
    redIntensity = 255 - color;    // красный меняется из включенного на выключенный    
    greenIntensity = color;        // зеленый меняется из выключенного на включенный
    blueIntensity = 0;             // голубой всегда выключен
  }
  else if (color <= 511)           // зона 2
  {
    redIntensity = 0;                     // красный всегда выключен
    greenIntensity = 255 - (color - 256); // зеленый от включенного к выключенному
    blueIntensity = (color - 256);        // голубой от выключенного к включенному
  }
  else if color >= 512             // зона 3
  {
    redIntensity = (color - 512);         // красный выкл. К вкл.
    greenIntensity = 0;                   // зеленый всегда выкл.
    blueIntensity = 255 - (color - 512);  // голубой от вкл. К выкл.
  }

// Теперь, когда параметры значения яркости были установлены,
// функциям передаются значение этих переменных

  analogWrite(RED_PIN, redIntensity);
  analogWrite(BLUE_PIN, blueIntensity);
  analogWrite(GREEN_PIN, greenIntensity);
}
Что вы должны увидеть:
Вы увидите, что ваш светодиод светится, но на сей раз в новых, сумасшедших цветах! Если этого не произошло, удостоверьтесь, что Вы собрали схемуправильно и проверили загружаемый в Arduino код. Если светодиод не светится, воспользуйтесь подсказками по поиску и устранению измените код:
Возможные трудности:
Светодиод не горит, или горит не тот цвет
Ножки светодиода находятся друг от друга на маленьком расстоянии, поэтому легко ошибиться, нужна повторная проверка подключения. Сведения о красном
Красный светодиод может светиться более интенсивно, поэтому при необходимости воспользуйтесь дополнительным резистором, или analogWrite(RED_PIN, redIntensity); на analogWrite(RED_PIN, redIntensity/3);
Применение в жизни:
Применяется в световых шоу, а также в различных видах электроники, для того чтобы в той же самой области показать изменения состояния устройства. Например из состояния Вкл. на Выкл.