Espruino:Примеры/Управление видеопроигрывателем с помощью спортивного тренажера
Управление видеопроигрывателем с помощью спортивного тренажера[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();
});
См.также
Внешние ссылки