#define RED 3
#define GREEN 5
#define BLUE 6
#define PLUS_RED 13
#define MINUS_RED 12
#define PLUS_GREEN 11
#define MINUS_GREEN 10
#define PLUS_BLUE 9
#define MINUS_BLUE 8
int currButton = LOW;
int lastButton = LOW;
int Brightness_Red = 250;
int Brightness_Green = 250;
int Brightness_Blue = 250;
class Button{
public:
Button(int _but, int _type){
but = _but;
type = _type;
}
int debounce(int last){
int current = digitalRead(but);
if(last != current){
delay(5);
current = digitalRead(but);
}
return current;
}
virtual void exec();
int GetType(){ return type; }
private:
int but;
int type;
};
class Minus : public Button {
public:
using Button::Button;
void exec() override {
currButton = debounce(lastButton);
if(lastButton == HIGH && currButton == LOW){
delay(100);
switch (GetType()){
case RED:
if(Brightness_Red < 250){
Brightness_Red += 50;
}
break;
case GREEN:
if(Brightness_Green < 250){
Brightness_Green += 50;
}
break;
case BLUE:
if(Brightness_Blue < 250){
Brightness_Blue += 50;
}
break;
default:
break;
}
}
lastButton = currButton;
}
};
class Plus : public Button {
public:
using Button::Button;
void exec() override {
currButton = debounce(lastButton);
if(lastButton == HIGH && currButton == LOW){
delay(100);
switch (GetType()){
case RED:
if(Brightness_Red > 0){
Brightness_Red -= 50;
}
break;
case GREEN:
if(Brightness_Green > 0){
Brightness_Green -= 50;
}
break;
case BLUE:
if(Brightness_Blue > 0){
Brightness_Blue -= 50;
}
break;
default:
break;
}
}
lastButton = currButton;
}
};
void setup() {
pinMode(RED, OUTPUT);
analogWrite(RED, LOW);
pinMode(GREEN, OUTPUT);
analogWrite(GREEN, LOW);
pinMode(BLUE, OUTPUT);
analogWrite(BLUE, LOW);
pinMode(PLUS_RED, INPUT);
digitalWrite(PLUS_RED, HIGH);
pinMode(MINUS_RED, INPUT);
digitalWrite(MINUS_RED, HIGH);
pinMode(PLUS_GREEN, INPUT);
digitalWrite(PLUS_GREEN, HIGH);
pinMode(MINUS_GREEN, INPUT);
digitalWrite(MINUS_GREEN, HIGH);
pinMode(PLUS_BLUE, INPUT);
digitalWrite(PLUS_BLUE, HIGH);
pinMode(MINUS_BLUE, INPUT);
digitalWrite(MINUS_BLUE, HIGH);
}
void loop() {
Minus m_r(MINUS_RED, RED);
Plus p_r(PLUS_RED, RED);
m_r.exec();
p_r.exec();
Minus m_g(MINUS_GREEN, GREEN);
Plus p_g(PLUS_GREEN, GREEN);
m_g.exec();
p_g.exec();
Minus m_b(MINUS_BLUE, BLUE);
Plus p_b(PLUS_BLUE, BLUE);
m_b.exec();
p_b.exec();
analogWrite(RED, Brightness_Red);
analogWrite(GREEN, Brightness_Green);
analogWrite(BLUE, Brightness_Blue);
}