Espruino:Примеры/Создание сирены из кирпичика Duplo при помощи Puck.js

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

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


Создание сирены из кирпичика Duplo при помощи Puck.js[1]

Здесь мы расскажем, как при помощи Puck.js и 3D-печатного кирпичика Duplo создать мигающую сирену для пожарной машины Duplo.

DIY Lego Duplo Siren and Lights

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

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

Подсоедините компоненты как показано на видео:

Код

Этот код также можно напрямую загрузить из загрузчика приложений Espruino.

D2.reset();
D30.reset();
D29.reset();
var LEDA = D1;
var LEDB = D31;
var SPK = D28;

var n = 0;
var lightInterval;

function pattern1() {
  n++;
  LEDA.write(n&1);
  LEDB.write(!(n&1));
  var f = (n&1) ? 800 : 600;
  analogWrite(SPK, 0.5, { freq : f});
}

function pattern2() {
  n++;
  var p = n&15;
  LEDA.write(p==0 || p==2);
  LED3.write(p==6 || p==8);
  LEDB.write(p==12 || p==14);
  var f = (p<8) ? 800 : 600;
  analogWrite(SPK, 0.5, { freq : f});
}

function turnOn() {
  if (lightInterval)
    clearInterval(lightInterval);

  if (Math.random()<0.5)
    lightInterval = setInterval(pattern2, 50);
  else
    lightInterval = setInterval(pattern1, 500);
}

function turnOff() {
  if (lightInterval)
    clearInterval(lightInterval);
  lightInterval = undefined;
  LEDA.reset();
  LEDB.reset();
  LED3.reset();
  SPK.reset();
}

// Обнаруживаем движение:
require("puckjsv2-accel-movement").on();
var idleTimeout;
Puck.on('accel',function(a) {  
  if (idleTimeout) clearTimeout(idleTimeout);
  else turnOn();
  idleTimeout = setTimeout(function() {
    idleTimeout = undefined;
    turnOff();
  },5000);  
});

NRF.sleep();

См.также

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