const int redPin = 11;
const int greenPin = 10;
const int bluePin = 9;
const int buttonRedDown = 2;
const int buttonGreenDown = 3;
const int buttonBlueDown = 4;
const int buttonRedUp = 5;
const int buttonGreenUp = 6;
const int buttonBlueUp = 7;
int lastButtonRD = LOW;
int currButtonRD = LOW;
int lastButtonRU = LOW;
int currButtonRU = LOW;
int lastButtonGD = LOW;
int currButtonGD = LOW;
int lastButtonGU = LOW;
int currButtonGU = LOW;
int lastButtonBD = LOW;
int currButtonBD = LOW;
int lastButtonBU = LOW;
int currButtonBU = LOW;
int redValue = 255;
int greenValue = 255;
int blueValue = 255;
const int step = 50;
int debounce (int& last, int button)
{
int current = digitalRead(button);
if(last != current)
{
delay(5);
current = digitalRead(button);
}
return current;
}
void manageButton(int buttonUp, int buttonDown, int& lastButtonUp, int& lastButtonDown,
int& currButtonUp, int& currButtonDown, int& value, int colorPin)
{
currButtonUp = debounce(lastButtonUp, buttonUp);
if(lastButtonUp == HIGH && currButtonUp == LOW)
{
value = max(value - step, 5);
analogWrite(colorPin, value);
}
currButtonDown = debounce(lastButtonDown, buttonDown);
if(lastButtonDown == HIGH && currButtonDown == LOW)
{
value = min(value + step, 255);
analogWrite(colorPin, value);
}
lastButtonUp = currButtonUp;
lastButtonDown = currButtonDown;
}
void setup() {
pinMode(redPin, OUTPUT);
digitalWrite(redPin, HIGH);
pinMode(greenPin, OUTPUT);
digitalWrite(greenPin, HIGH);
pinMode(bluePin, OUTPUT);
digitalWrite(bluePin, HIGH);
pinMode(buttonRedDown, INPUT_PULLUP);
pinMode(buttonGreenDown, INPUT_PULLUP);
pinMode(buttonBlueDown, INPUT_PULLUP);
pinMode(buttonRedUp, INPUT_PULLUP);
pinMode(buttonGreenUp, INPUT_PULLUP);
pinMode(buttonBlueUp, INPUT_PULLUP);
}
void loop() {
manageButton(buttonRedUp, buttonRedDown, lastButtonRU, lastButtonRD, currButtonRU,
currButtonRD, redValue, redPin);
manageButton(buttonGreenUp, buttonGreenDown, lastButtonGU, lastButtonGD, currButtonGU,
currButtonGD, greenValue, greenPin);
manageButton(buttonBlueUp, buttonBlueDown, lastButtonBU, lastButtonBD, currButtonBU,
currButtonBD, blueValue, bluePin);
}