Espruino:Примеры/Создание сирены из кирпичика Duplo при помощи Puck.js
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Создание сирены из кирпичика 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();
См.также
Внешние ссылки