#include <Servo.h>
#include <LiquidCrystal_I2C.h>
Servo servo_9;
Servo servo_10;
Servo servo_11;
LiquidCrystal_I2C lcd(0x027,20,4);
int rgb_red=4;
int rgb_green=5;
int rgb_blue=6;
int pot_red=A0;
int pot_green=A1;
int pot_blue=A2;
int red_value=0;
int green_value=0;
int blue_value=0;
int previous_red=0;
int previous_green=0;
int previous_blue=0;
int leds[]={7,2,3};
void setup() {
// put your setup code here, to run once:
servo_9.attach(9);
servo_10.attach(10);
servo_11.attach(11);
lcd.begin(20,4);
lcd.backlight();
lcd.setCursor(5,0);
lcd.print("RGB Mixer");
pinMode(rgb_red, OUTPUT);
pinMode(rgb_green, OUTPUT);
pinMode(rgb_blue, OUTPUT);
for(int x=0; x<3;x++){
pinMode(leds[x], OUTPUT);
}
previous_red = map(analogRead(A0),0,1023,0,255);
previous_green = map(analogRead(A1),0,1023,0,255);
previous_blue = map(analogRead(A2),0,1023,0,255);
}
void loop() {
// put your main code here, to run repeatedly:
red_value= map(analogRead(A0),0,1023,0,255);
green_value= map(analogRead(A1),0,1023,0,255);
blue_value= map(analogRead(A2),0,1023,0,255);
bool red_moved = (red_value != previous_red);
bool green_moved = (green_value != previous_green);
bool blue_moved = (blue_value != previous_blue);
// The 'else if' gives priority (red > green > blue) if you move two at once
if (red_moved) {
digitalWrite(leds[0], HIGH); // Red ON
digitalWrite(leds[1], LOW);
digitalWrite(leds[2], LOW);
} else if (green_moved) {
digitalWrite(leds[0], LOW);
digitalWrite(leds[1], HIGH); // Green ON
digitalWrite(leds[2], LOW);
} else if (blue_moved) {
digitalWrite(leds[0], LOW);
digitalWrite(leds[1], LOW);
digitalWrite(leds[2], HIGH); // Blue ON
} else {
// If nothing moved, turn all LEDs off
digitalWrite(leds[0], LOW);
digitalWrite(leds[1], LOW);
digitalWrite(leds[2], LOW);
}
// 3. Update the global 'previous' variables for the next loop
previous_red = red_value;
previous_green = green_value;
previous_blue = blue_value;
printColor("Red",red_value, 0, 1);
printColor("Green",green_value, 0, 2);
printColor("Blue", blue_value, 0, 3);
moveServo(servo_9, red_value);
moveServo(servo_10, green_value);
moveServo(servo_11, blue_value);
rgbLight(red_value, green_value, blue_value);
}
void printColor(char* color, int value, int column, int row){
lcd.setCursor(column,row);
lcd.print(color);
lcd.print(": ");
lcd.print(value);
lcd.print(" ");
}
void moveServo(Servo servo, int value){
servo.write(map(value,0,255,0,180));
}
void rgbLight(int red, int green, int blue){
analogWrite(rgb_red, red);
analogWrite(rgb_green, green);
analogWrite(rgb_blue, blue);
}