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

Цветовая палитра с функцией рандом на 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] (скачиваний: 44)

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




Пишите в комментариях что непонятно я на все вопросы отвечу
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Опрос
Получилось ли у вас?
Всего проголосовало: 12

Оцените самоделку по критериям

10
Идея
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
9
Описание
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
9
Исполнение
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Итоговая оценка: 9.33 из 10 (голосов: 1)
Чтобы написать комментарий необходимо войти на сайт через соц. сети (или зарегистрироваться):
Обычная регистрация
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
3 комментария
  1. Nruter
    Что это и для чего?
  2. Антон Мартьянов Автор
    Эта палитра нужна для выбора определённого оттенка для проектов с подсветкой
    1. Nruter
      Ок, понятно.

Добрый день, Гость!


Зарегистрируйтесь

Или войдите на сайт, если уже зарегистрированы...

Войти

А затем...

Добавьте самоделку

Или...

Добавьте тему

Онлайн чат

Опрос
Сколько по времени, чаще всего, Вы делаете самоделку?

Последние комментарии

Здесь явная ошибка! Эти два кондера ставятся последовательно, в результате чего напряжение сборки станет 400 В (2 по 200В), а вот ёмкость конденсаторов снизится вдвое до 165 мкФ. Тогда не получается...
Вот так работает как нужно - //плавно увеличиваем яркость (0 to 255) for (int brightness=0;brightness<=255;brightness++){ analogWrite(ledPin,brightness); delay(5);...
при компиляции выдает ошибку Arduino: 1.6.5 (Windows 7), Плата"Arduino Nano, ATmega328" sketch_sep20a:25: error: expected declaration before '}' token expected declaration before...
Скопировал скетч плавного розжига. У меня светодиод загорается резко, а вот гаснет плавно. Разьясните пожалуйста....
Скопировал скетч плавного розжига. У меня светодиод загорается резко, а вот гаснет плавно. Разьясните пожалуйста....
Все комментарии