Espruino:Примеры/Управление видеопроигрывателем с помощью спортивного тренажера

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

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


Управление видеопроигрывателем с помощью спортивного тренажера[1]

EXERCISE POWERED NETFLIX with Puck.js

В видео выше рассказывается, как настроить свой кросс-тренажёр (или какое-то другое тренажёрное устройство) таким образом, чтобы запускать и останавливать видео в зависимости от того, используется этот тренажёр или нет. В этом проекте используется функция Puck.js под названием BLE HID.

Метод подключения, о котором рассказывается в этом видео, можно использовать для самых разных вещей. Например, с его помощью можно без труда записать информацию обо всей тренировочной сессии на тренажёре, а затем загрузить её на свой телефон или ПК.

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

Для определения сигнала, идущего по проводу тренажёра, я воспользовался осциллографом. Но если у вас его нет, просто воспользуйтесь вольтметром, но тогда тренажёром нужно будет пользоваться очень медленно.

Важно при подключении соблюсти правильную полярность. Вам лишь надо убедиться, что измеритель, параллельно подключенный к проводу, считывает положительное (а не отрицательное) напряжение.

Если напряжение провода выше 3 вольт, спросите совета на форуме – возможно, вам нужно будет проделать дополнительные манипуляции, чтобы безопасно подключиться к Puck.js и не повредить его.

Код

Вот код, используемый в видео:

var controls = require("ble_hid_controls");
NRF.setServices(undefined, { hid : controls.report });

var rotations = 0;
var lastRotations = 0;
var wasPlaying = false;

var PLAYSPEED = 5;

setWatch(function(e) {
  digitalPulse(LED3,1,10);
  rotations++;
}, D1, { edge:"falling",repeat:true});

function setPlaying(play) {
  if (play!=wasPlaying) {
    wasPlaying = play;
    // Мигаем светодиодом:
    if (play) {
      // Зеленый = вперёд:
      digitalPulse(LED2,1,100);      
    } else {
      // Красный = стоп:
      digitalPulse(LED1,1,100);
    }
    // Вызываем playpause() для переключения
    // между запуском проигрывания и его остановкой.
    // Ловим все исключения на случай, если HID не будет включен:
    try { controls.playpause(); } catch (e) { }
  }
}

NRF.on('connect', function(addr) {
  setInterval(function() {
    if (rotations >= PLAYSPEED &&
        lastRotations >= PLAYSPEED) {
      // Если оба прошлых периода
      // были достаточно быстрыми, запускаем проигрывание:
      setPlaying(true);
    } else if (rotations < PLAYSPEED &&
               lastRotations < PLAYSPEED) {
      // Если оба прошлых периода
      // были достаточно медленными, останавливаем проигрывание:
      setPlaying(false);
    }
    lastRotations = rotations;
    rotations = 0;
  }, 2000);
});

NRF.on('disconnect', function() {
  // Удаляем все интервалы:
  clearInterval();
});

См.также

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

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