#define LED_PIN 15
#define LED_RED_PIN 5
#define LED_GREEN_PIN 4
#define LED_BLUE_PIN 2
#define BUTTON_PIN 12
#define SLIDE_PIN 34
#define SLIDE_RED_PIN 35
#define SLIDE_GREEN_PIN 32
#define SLIDE_BLUE_PIN 33
void LED_On(uint8_t brightness)
{
pinMode(LED_PIN, OUTPUT);
analogWrite(LED_PIN, 255 - brightness);
}
void LED_Off()
{
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
}
void ColorLED_On(uint32_t rgb)
{
analogWrite(LED_RED_PIN, 255 - (rgb >> 16 & 0xff));
analogWrite(LED_GREEN_PIN, 255 - (rgb >> 8 & 0xff));
analogWrite(LED_BLUE_PIN, 255 - (rgb & 0xff));
}
void ColorLED_Off()
{
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(LED_BLUE_PIN, OUTPUT);
digitalWrite(LED_RED_PIN, HIGH);
digitalWrite(LED_GREEN_PIN, HIGH);
digitalWrite(LED_BLUE_PIN, HIGH);
}
uint8_t ReadSlideValue()
{
int value;
value = analogRead(SLIDE_PIN);
value >>= 4;
if (value < 8)
value = 8;
return value;
}
uint32_t ReadSlideRGBValue()
{
uint32_t RGB_value;
int value;
value = analogRead(SLIDE_RED_PIN);
value >>= 4;
value &= 0xff;
RGB_value = value;
value = analogRead(SLIDE_GREEN_PIN);
value >>= 4;
value &= 0xff;
RGB_value <<= 8;
RGB_value |= value;
value = analogRead(SLIDE_BLUE_PIN);
value >>= 4;
value &= 0xff;
RGB_value <<= 8;
RGB_value |= value;
return RGB_value;
}
bool button_up = true;
bool led_stat = false;
void setup() {
Serial.begin(115200);
LED_Off();
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(SLIDE_PIN, INPUT);
pinMode(SLIDE_RED_PIN, INPUT);
pinMode(SLIDE_GREEN_PIN, INPUT);
pinMode(SLIDE_BLUE_PIN, INPUT);
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(LED_BLUE_PIN, OUTPUT);
}
void loop() {
uint8_t brightness_set;
uint32_t color_set;
if (digitalRead(BUTTON_PIN) == LOW)
{
if (button_up)
{
button_up = false;
led_stat = !led_stat;
}
}
else
{
button_up = true;
}
if (led_stat)
{
brightness_set = ReadSlideValue();
LED_On(brightness_set);
color_set = ReadSlideRGBValue();
ColorLED_On(color_set);
}
else
{
LED_Off();
ColorLED_Off();
}
delay(10); // this speeds up the simulation
}