Espruino:Примеры/Создание сирены из кирпичика Duplo при помощи Puck.js: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighligh...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 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
Вам понадобятся
- Puck.js.
- 3D-печатный прозрачный кирпичик Duplo. Я использовал дизайн (полого внутри) кирпичика отсюда и печатал его вверх-тормашками при помощи PET.
- Два синих светодиода.
- Пьезодинамик.
Подсоединение
Подсоедините компоненты как показано на видео:
- Один светодиод – к D1/D2
- Второй светодиод – к D30/D31
- Пьезодинамик – к D28/D29
Код
Этот код также можно напрямую загрузить из загрузчика приложений 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();
См.также
Внешние ссылки