Цветовая палитра с функцией рандом на Arduino

С помощью этой самоделки можно сделать любой цвет в системе RGB с помощью пяти кнопок

1 — добавить красного
2 — Добавить Зелёного
3 — Добавить Синего
4 — Рандом ( случайный цвет )
5 — Сброс

Что нам понадобится:

1. Arduino ( в моём случае arduino mega )
2. Макетная плата
3. Перемычки типа: папа-мама и папа-папа
4. LCD 1602 ( 2 строки по 16 символов )
5. Кнопки 5 штук
6. SMD RGB светодиод
7. Резистор на 10 Ком 5 штук

Для начала ма присоединяем RGB светодиод ( при отсутствии резистора поставить резистор на 220 ом ).
Далее ставим 5 кнопок : одну ножку кнопки к контакту 5В, а другую через резистор 10 Ком к земле и эту же ножку к arduino.
Подключаем дисплей LCD 1602 к SDA и SCL ( I2C ) .
Всё это подключаем к arduino контактам ( GND, 5V, SDA SCL, 2, 3, 4, 9, 10, 11, 12, 13) как на картинке.

Ну и собственно сам скетч

#include "LiquidCrustal_I2C.h" // подключаем библиотеку для работы с дисплеем по I2C
#include "Wire.h" //Подключаем библиотеку для работы с I2C
int R = 9;
int G = 10;
int B = 11;
// RGB цвета
int BR = 0;
int BG = 0;
int BB = 0;
// переменные для сохранения значения
int KR = 2; // кнопка красный
int KG = 3; // кнопка зелёный
int KB = 4; // кнопка синий
int C = 13; // кнопка сброс
int RS = 12; // кнопка рандом
LiquidCrystal_I2C lcd(0x27,16,2); // Подключаем дисплей (адрес, столбцы, стороки)
void setup() { // выполняем один раз
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
// подключаем RGB светодиод
}
void loop() { // повторяем бесконечно
delay(10); // задержка 10 мс
lcd.init(); // определяем дисплей
lcd.backlight(); // включаем подсветку дисплея
lcd.clear(); // очищаем дисплей
lcd.setCursor(5, 0); // ставим курсор на 6 столбец и 0 строку
lcd.print("Color"); // пишем color
lcd.setCursor(0, 1);
lcd.print("R"); // пишем R
lcd.setCursor(6, 1);
lcd.print("G"); / пишем G
lcd.setCursor(12, 1);
lcd.print("B"); пишем B
lcd.print(BB); // выводим значение синего цвета
lcd.setCursor(2, 1);
lcd.print(BR); // выводим значение красного цвета
lcd.setCursor(8, 1);
lcd.print(BG); // выводим значение зелёного цвета
lcd.setCursor (13 , 1);
if (digitalRead(KR) == HIGH) { BR += 15; } // если кнопка R нажата то значение R +15
if (digitalRead(KG) == HIGH) { BG += 15; } // если кнопка G нажата то значение G +15
if (digitalRead(KB) == HIGH) { BB += 15; } // если кнопка B нажата то значение B +15
if (digitalRead(C) == HIGH) { BR -= 254; } // если кнопка C нажата то значение R -254
if (digitalRead(C) == HIGH) { BG -= 254; } // если кнопка C нажата то значение G -254
if (digitalRead(C) == HIGH) { BB -= 254; } // если кнопка C нажата то значение B -254
if (digitalRead(RS) == HIGH) { BR = random (0, 254); } // если кнопка RS нажата то значение R от 0 до 254
if (digitalRead(RS) == HIGH) { BG = random (0, 254); } // если кнопка RS нажата то значение G от 0 до 254
if (digitalRead(RS) == HIGH) { BB = random (0, 254); } // если кнопка RS нажата то значение B от 0 до 254

BR = constrain(BR, 0, 254); // BR = (значение , от, до)
analogWrite(R, BR); // с помощью ШИМ модуляции выстраиваем яркость от 0 до 254

BG = constrain(BG, 0, 254); //BG = (значение , от, до)
analogWrite(G, BG); // с помощью ШИМ модуляции выстраиваем яркость от 0 до 254

BB = constrain(BB, 0, 254); //BB = (значение , от, до)
analogWrite(B, BB); // с помощью ШИМ модуляции выстраиваем яркость от 0 до 254

}

Скачать скетч:

sketch_feb07a2_ino.zip

[587 b] (скачиваний: 82)

Вот что должно получится!

Пишите в комментариях что непонятно я на все вопросы отвечу

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Опрос

Получилось ли у вас?
Да Нет Напишу в комментарии
Всего проголосовало: 15

Голосовать
Результаты

Источник: usamodelkina.ru