Бегущий огонёк с одной кнопкой

В этом эксперименте мы управляем светодиодной шкалой с помощью одной кнопки.

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

  • 1 светодиодная шкала
  • 1 тактовая кнопка
  • 10 резисторов номиналом 220 Ом
  • 13 проводов

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

Скетч

            #define FIRST_LED_PIN 2
#define LAST_LED_PIN 11
#define BUTTON_PIN 13

boolean buttonUp = true;
int pos = 0;

void setup()
{
  for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
    pinMode(pin, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}
 
void loop()
{
  for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
    digitalWrite(pin, LOW);
  digitalWrite(FIRST_LED_PIN + pos, HIGH);
  

  buttonUp = handleClick(BUTTON_PIN, buttonUp, pos);
}

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

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