Трехцветный маячок с тремя кнопками

В этом эксперименте мы работаем с RGB-LED с помощью трёх кнопок.

Список деталей для эксперимента

  • 3 тактовые кнопки
  • 3 резистора номиналом 220 Ом
  • 11 проводов
  • 1 RGB-LED

Схема на макетке

Скетч

            #define RED_LED_PIN  9
#define BLUE_LED_PIN   10
#define GREEN_LED_PIN   11

#define RED_BUTTON_PIN 4
#define BLUE_BUTTON_PIN 3
#define GREEN_BUTTON_PIN 2

int red_brightness = 0;
int blue_brightness = 0;
int green_brightness = 0;

boolean redUp = true;
boolean blueUp = true;
boolean greenUp = true;

void setup()
{
    pinMode(RED_LED_PIN, OUTPUT);
    pinMode(BLUE_LED_PIN, OUTPUT);
    pinMode(GREEN_LED_PIN, OUTPUT);
    pinMode(RED_BUTTON_PIN, INPUT_PULLUP);
    pinMode(BLUE_BUTTON_PIN, INPUT_PULLUP);
    pinMode(GREEN_BUTTON_PIN, INPUT_PULLUP);
}
 
void loop()
{
  analogWrite(RED_LED_PIN, red_brightness);
  analogWrite(BLUE_LED_PIN, blue_brightness);
  analogWrite(GREEN_LED_PIN, green_brightness);

  redUp = handleClick(RED_BUTTON_PIN, redUp, +32, red_brightness);
  blueUp = handleClick(BLUE_BUTTON_PIN, blueUp, +32, blue_brightness);
  greenUp = handleClick(GREEN_BUTTON_PIN, greenUp, +32, green_brightness);
}

boolean handleClick(int buttonPin, boolean wasUp, int delta, int & brightness)
{
  boolean isUp = digitalRead(buttonPin);
  if (wasUp && !isUp) {
    delay(10);
    isUp = digitalRead(buttonPin);
    // если был клик, меняем яркость в пределах от 0 до 255
    if (!isUp)    
      brightness = (brightness + delta) % 256;
  }
  return isUp; // возвращаем значение обратно, в вызывающий код
}            
            

Обратите внимание

  • Важно заметить, какая ножка управляет каким цветом, а какая ножка "земля" (GND)