// дефайны пинов светодиода
#define GREENLEDPIN 5
#define REDLEDPIN 6
#define BLUELEDPIN 3
// дефайны пинов кнопок UP выше DOWN ниже
#define REDUPPIN 11
#define REDDOWNPIN 10
#define GREENDOWNPIN 8
#define GREENUPIN 9
#define BLUEDOWNPIN 7
#define BLUEUPIN 2
#define debounce 200 // антидребезг в мс
#define STEP 10 // шаг изменения ШИМ
// минимальные шимы. Вычисляются повышением шим до загорания отдельного цвета
byte redPWM=0; // ШИМ значения Красного диода
byte greenPWM=0; // ШИМ значения зеленого диода
byte bluePWM=0; // ШИМ значения Синего диода
int buttons[] = {REDUPPIN,REDDOWNPIN,GREENUPIN,GREENDOWNPIN,BLUEUPIN,BLUEDOWNPIN};
unsigned long lastMillis =0;
void setup() {
Serial.begin(115200);
//пины диода в OUTPUT
pinMode(REDLEDPIN,OUTPUT);
pinMode(GREENLEDPIN,OUTPUT);
pinMode(BLUELEDPIN,OUTPUT);
// пины кнопок в INPUT_PULLUP
for (int i = 0; i<6;i++){
pinMode(buttons[i],INPUT_PULLUP);
}
}
void loop() {
if(millis()-lastMillis > debounce){
for(int i=0; i<6;i++){
if(!digitalRead(buttons[i])){
lastMillis = millis();
switch (buttons[i]){ // Выберем из массива кнопок Пин нажатой кнопки
case REDUPPIN :{ // если кнопка сработала на REDUPPIN
if(redPWM<255-STEP){ // Если текущий ШИМ меньше максимального(255) минус Шаг(10)
redPWM+=STEP; // тогда можно прибавить Шаг к ШИМ
}
break; // прервать SWITCH CASE
}
case REDDOWNPIN :{
if(redPWM>=0+STEP){
redPWM-=STEP;
}
break;
}
case GREENUPIN :{
if(greenPWM<255-STEP){
greenPWM+=STEP;
}
break;
}
case GREENDOWNPIN :{
if(greenPWM>=0+STEP){
greenPWM-=STEP;
}
break;
}
case BLUEUPIN :{
if(bluePWM<255-STEP){
bluePWM+=STEP;
}
break;
}
case BLUEDOWNPIN :{
if(bluePWM>=0+STEP){
bluePWM-=STEP;
}
break;
}
default:{
break;
}
}
Serial.print((" red:"));
Serial.print((redPWM));
Serial.print((" green:"));
Serial.print((greenPWM));
Serial.print((" blue:"));
Serial.println((bluePWM));
analogWrite(REDLEDPIN,redPWM);
analogWrite(GREENLEDPIN,greenPWM);
analogWrite(BLUELEDPIN,bluePWM);
}
}
}
}