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

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Клавиатурный таймер[1]

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

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

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

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

Код

Во-первых, нам надо запрограммировать ответ на нажатие кнопки. Подключитесь к Espruino, скопируйте и вставьте код ниже в правую часть IDE и кликните на кнопку загрузки кода.

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

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

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

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

Далее нам надо сделать так, чтобы символы прибавлялись друг к другу и создавали большое число. Если на панели будет нажата нецифровая кнопка, это будет означать запуск таймера.

Скопируйте и вставьте код ниже в правую часть IDE и кликните на кнопку загрузки кода:

function startTimer(time) {
  console.log("Запуск таймера: "+time+" секунд");
}

var value = "";
function onKey(key) {
  var ch = "123A456B789C*0#D"[key];
  if ("0123456789".indexOf(ch)<0) {
    // Если это не цифра, значит запускаем таймер:
    startTimer(parseInt(value, 10/*decimal*/));
    value = "";
  } else {
    // В противном случае сохраняем значение:
    value += ch;
    console.log(value); // пишем в консоль...
  }
}

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

Теперь, если нажимать на клавиатуре кнопки с цифрами, они будут появляться на экране, а если на другие кнопки (вроде «А»), это покажет число, которое будет отсчитывать таймер.

// Нажимаем 1
1
// Нажимаем 2
12
// Нажимаем 3
123
// Нажимаем 4
1234
// Нажимаем A
Запуск таймера: 1234 секунд

Далее создаём сам таймер. Замените старую функцию startTimer() на вот этот код:

var timerInterval;
var timerCount;

function timerFinished() {
  // Включаем красный светодиод на секунду,
  // чтобы показать, что мы закончили:
  digitalPulse(LED1, 1, 1000);
}

function startTimer(time) {
  // Сбрасываем текущий таймер (если он был):
  if (timerInterval!==undefined)
    clearInterval(timerInterval);
  timerInterval = undefined;
  // Если было введено какое-то время, запускаем таймер:
  if (time>0) {
    console.log("Запуск таймера: "+time+" секунд");
    timerCount = time;
    // Вызываем это раз в секунду...
    timerInterval = setInterval(function() {
      // Уменьшаем значение таймера:
      timerCount--;
      if (timerCount<=0) {
        // Если достигли «0», останавливаем таймер
        // и вызываем timerFinished():
        clearInterval(timerInterval);
        timerInterval = undefined;
        timerFinished();        
      } else {
        // В противном случае просто мигаем зелёным светодиодом:
        digitalPulse(LED2, 1, 100);
      }
    }, 1000);
  }
}

Теперь, если ввести число (советуем задавать число поменьше или набраться терпения – ждать придётся долго!) и нажать на нецифровую кнопку, это запустит таймер. Пока будет вестись обратный отсчёт, будет мигать зелёный светодиод, а когда всё закончится, на секунду загорится красный светодиод.

См.также

Ссылки на полезные ресурсы

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