я учусь по этим урокам. я выполнил первую часть. дальше пример для других настроек.
/*
* Набор для экспериментов MaxKit 01
* Код программы для опыта №3: sketch 03
*
* RGB Светодиод
*
* Написано для сайта "Полный комплект" http://maxkit.ru
*
*
* Помощь сообщества Arduino.
* Посетите сайт http://www.arduino.cc
*
*
*
*
* Этот sketch был написан SparkFun Electronics,
* Переведен специально для сайта http://maxkit.ru
* 01 февраля 2015г.
*
*/
// Программа демонстрации возможностей 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);
}