Содержание

Эксперимент 11. Светильник с кнопочным управлением

← Кнопочный переключатель | Оглавление | Кнопочные ковбои →

В этом эксперименте мы добавляем порцию яркости светодиоду одной кнопкой и убавляем другой.

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

Принципиальная схема

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

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

Скетч

p110_plus_minus_light.ino
#define PLUS_BUTTON_PIN     2
#define MINUS_BUTTON_PIN    3
#define LED_PIN             9
 
int brightness = 100;
boolean plusUp = true;
boolean minusUp = true;
 
void setup()
{
  pinMode(LED_PIN, OUTPUT);
  pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP);
  pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP);
}
 
void loop()
{
  analogWrite(LED_PIN, brightness);
  // реагируем на нажатия с помощью функции, написанной нами
  plusUp = handleClick(PLUS_BUTTON_PIN, plusUp, +35);
  minusUp = handleClick(MINUS_BUTTON_PIN, minusUp, -35);
}
// Собственная функция с 3 параметрами: номером пина с кнопкой
// (buttonPin), состоянием до проверки (wasUp) и градацией
// яркости при клике на кнопку (delta). Функция возвращает
// (англ. return) обратно новое, текущее состояние кнопки
boolean handleClick(int buttonPin, boolean wasUp, int delta)
{
  boolean isUp = digitalRead(buttonPin);
  if (wasUp && !isUp) {
    delay(10);
    isUp = digitalRead(buttonPin);
    // если был клик, меняем яркость в пределах от 0 до 255
    if (!isUp)    
      brightness = constrain(brightness + delta, 0, 255);
  }
  return isUp; // возвращаем значение обратно, в вызывающий код
}

Пояснения к коду

Вопросы для проверки себя

  1. Что необходимо для определения собственной функции?
  2. Что означает ключевое слово void?
  3. Как ведет себя программа при упоминании одной переменной с разных сторон от оператора присваивания =?

Задания для самостоятельного решения

  1. Доработайте код таким образом, чтобы шаг изменения яркости настраивался в одном месте.
  2. Создайте еще одну функцию и переделайте код так, чтобы одна функция отвечала за отслеживание нажатий, а другая — за вычисление яркости светодиода и возвращала его в analogWrite.

← Кнопочный переключатель | Оглавление | Кнопочные ковбои →