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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighligh...»)
 
Нет описания правки
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[ www.espruino.com - ]</ref>=
=Создание сирены из кирпичика Duplo при помощи Puck.js<ref>[https://www.espruino.com/Puck.js+Duplo+Siren www.espruino.com - Puck.js Duplo Siren]</ref>=


Здесь мы расскажем, как при помощи [https://www.espruino.com/Puck.js Puck.js] и 3D-печатного кирпичика [[Duplo]] создать мигающую сирену для пожарной машины [[Duplo]].
[https://www.youtube.com/watch?v=1EkSWVqevaY&feature=emb_title DIY Lego Duplo Siren and Lights]
== Вам понадобятся ==
* [https://www.espruino.com/Puck.js Puck.js].
* 3D-печатный прозрачный кирпичик [[Duplo]]. Я использовал дизайн (полого внутри) кирпичика [https://www.thingiverse.com/thing:116411/files отсюда] и печатал его вверх-тормашками при помощи PET.
* Два синих [[светодиод]]а.
* [[Пьезодинамик]].
== Подсоединение ==
Подсоедините компоненты как показано на видео:
* Один [[светодиод]] – к D1/D2
* Второй [[светодиод]] – к D30/D31
* [[Пьезодинамик]] – к D28/D29
== Код ==
Этот код также можно напрямую загрузить из [https://espruino.github.io/EspruinoApps/#pucksiren загрузчика приложений Espruino].


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
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();
</syntaxhighlight>
</syntaxhighlight>



Версия от 22:29, 1 марта 2021

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


Создание сирены из кирпичика 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();

См.также

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