Лабораторная работа №4 Управление трехцветным rgb-светодиодом по сигналу с компьютера



бет3/9
Дата07.02.2022
өлшемі447,76 Kb.
#82345
түріЛабораторная работа
1   2   3   4   5   6   7   8   9
Байланысты:
Лабораторная работа № 4–5

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», в следующем шаге увеличиваем эту
// переменную на единицу, и в следующем шаге вызываем функцию
//howRGB(), вставляя в нее новое значение переменной, ждем некоторое
//время, примерно 10мс., и выполняем петлю заново. Таким образом наша
// функция showRGB() получает новое значение при каждом новом проходе
// петли.


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


// 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 // 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/Freeduino имеет встроенный контроллер для после- довательной передачи данных, который может использоваться как для связи между Arduino/Freeduino устройствами, так и для связи с компьютером. На компьютере соответствующее соединение пред- ставлено либо обычным COM-портом (в случае Arduino Single- Sided Serial Board), либо USB COM-портом, который появляется в системе после установки необходимого драйвера.

Связь происходит по цифровым портам 0 и 1, и поэтому Вы не сможете использовать их для цифрового ввода/вывода если ис- пользуете функции последовательной передачи данных.




Serial.begin(long);


Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9




©www.engime.org 2024
әкімшілігінің қараңыз

    Басты бет