Espruino:Примеры/Клавиатурный замок

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Клавиатурный замок[1]

Если вы хотите сделать электронный замок, то самый очевидный вариант – это воспользоваться кнопочной панелью. Она есть, например, в наборе Espruino Ultimate, но её также можно купить отдельно (ссылки на покупку ищите в последнем разделе этой статьи).

Нам понадобятся

Подсоединение

Поместите кнопочную панель лицевой стороной кверху и просто подключите кнопочную панель к контактам B2, B3, B4, B5, B6, B7, B8 и B9 (это один длинный ряд контактов): провод, который ближе всего к «D», должен быть подключен к контакту B2, а тот, что ближе всего к «*», должен быть подключен к B9. Никаких особых требований к тому, какие контакты куда подключать, нет, но если вы решили воспользоваться какими-то другими контактами Espruino, также не забудьте соответствующим образом отредактировать код ниже.

Код

Первый шаг – это запрограммировать реакцию на нажатие кнопки. Подключитесь к Espruino, скопируйте код ниже в правую часть Web IDE и кликните на кнопку загрузки кода:

function onKey(key) {
  console.log("123A456B789C*0#D"[key]);
}

require("KeyPad").connect([B2,B3,B4,B5],[B6,B7,B8,B9], onKey);

Мы не можем сразу вписать это в левую часть Web IDE, потому что здесь используется модуль KeyPad, который Web IDE сначала должна подгрузить из интернета.

Теперь при нажатии на кнопки на экране будут появляться соответствующие символы.

Следующий шаг – это запрограммировать проверку того, совпадают ли введённые цифры с кодовой комбинацией. Скопируйте код ниже в правую часть Web IDE и нажмите на кнопку загрузки кода:

var code = "B59";
var digit = 0;

function setLocked(isLocked) {
  // Включаем зеленый или красный светодиод
  // в зависимости от того, заблокирован ли замок или нет:
  digitalWrite([LED1,LED2,LED3], isLocked ? 0b100 : 0b010);
  // Через две секунды выключаем светодиод:
  setTimeout(function() {
    digitalWrite([LED1,LED2,LED3], 0);
  }, 2000);
}

function onKey(key) {
  var ch = "123A456B789C*0#D"[key];
  // Проверяем правильность кода:
  if (ch == code[digit]) {
    digit++; // переходим к следующей цифре
    if (digit >= code.length) {
      console.log("Мы дошли до конца кода – разблокировка!");
      setLocked(false);
      // И снова переходим в начало кода:
      digit = 0;
    } else {
      console.log("Правильная цифра – переходим к следующей!");
    }
  } else {
    console.log("Неправильно! Возвращаемся в начало");
    setLocked(true);
    digit = 0;
  }
}

require("KeyPad").connect([B2,B3,B4,B5],[B6,B7,B8,B9], onKey);

Готово! Теперь нажмите на панели кнопки «B», «5» и «9» – в результате на две секунды должен загореться зелёный светодиод. Но если вы нажмёте какие-то другие символы (или те же, но в другой комбинации), то загорится красный светодиод.

Что дальше

Далее можно создать что-то типа замка, который будет открываться при введении правильной комбинации. Для этого нам надо будет отредактировать функцию setLocked(). Например, мы можем подключить к контакту B13 серводвигатель и заменить setLocked() на следующее:

function setLocked(isLocked) {
  // Включаем красный или зелёный светодиод
  // в зависимости от того, заблокирован ли замок или нет:
  digitalWrite([LED1,LED2,LED3], isLocked ? 0b100 : 0b010);
  // Спустя две секунды выключаем светодиод:
  setTimeout(function() {
    digitalWrite([LED1,LED2,LED3], 0);
  }, 2000);
  // Теперь активируем серводвигатель.
  // В течение 1 минуты передаем ему 50 импульсов по 20 мс,
  // чтобы задать ему новую позицию:
  var servoPos = isLocked ? 0 : 1;
  var servoPulses = 0;
  var interval = setInterval(function() {
    digitalPulse(B13, 1, 1+servoPos);
    servoPulses++;
    if (servoPulses>50) clearInterval(interval);
  }, 20);
}

См.также

Внешние ссылки