Provide the source code of a microcontroller or tiny computer in JavaScript. Node.js-based computers are supported. Require f3js
package and use its API to design the device enclosure.
// get serial port
var mraa = require('mraa');
mraa.init();
var port = mraa.init ? new mraa.Uart(0).getDevicePath() : '';
// instantiate the camera
var Camera = require('jsupm_grovescam_js');
var camera = new Camera(port);
// instantiate sensors and actuators
var groveSensor = require('jsupm_grove');
var gcl = require("jsupm_grovecircularled");
var button = new groveSensor.GroveButton(3);
// set layout parameters
var f3js = require('f3js')
, x = 10
, y = 10
, width = 130
, height = 105
, thickness = 42
, dw = 5 /* ぎざぎざ幅 [0, 10] */
, dh = 2 /* 板厚 [0, 10] */
, useCountdown = true /* カウントダウン機能を使う */;
// put base board
f3js.drawDovetailRectangle(x, y, width, height, dw, dh, true);
f3js.drawDovetailRectangle(x + width + dh, y, width, height, dw, dh, true);
// put sensors and actuators
var leftMargin = 28 // 左マージン [0, 100]
, topMargin = 30; // 上マージン [0, 100]
f3js.add(camera, x + leftMargin, y + topMargin);
f3js.add(button, x + leftMargin, y + 75);
var circle;
if (useCountdown) {
circle = new gcl.GroveCircularLED(5, 4);
f3js.add(circle, x + width - 30, y + topMargin);
f3js.drawRectangle(x + width - 30 - 6, y + topMargin - 18, 12, 3);
}
// draw circles...
for (var i = 0; i < 7; i ++) {
f3js.drawCircle(
x + width - (i + 1) * 10
, y + height - 10
, 1); // additional holes
}
// put side boards
var margin = dh;
f3js.drawDovetailRectangle(
x, y + height + margin - dh,
width, thickness, dw, dh,
true, false);
f3js.drawDovetailRectangle(
x + width + dh, y + height + margin - dh,
width, thickness, dw, dh,
true, false);
f3js.drawDovetailRectangle(
x + dw, y + height + thickness + margin - dh,
height, thickness, dw, dh,
true, false, true);
f3js.drawDovetailRectangle(
x + dw + width + dh, y + height + thickness + margin - dh,
height, thickness, dw, dh,
true, false, true);
// put a side hall
f3js.drawRectangle(
x + dw + 5, y + height + thickness * 2 + margin - dh - 15,
height - 10, 10);
// take a picture after a while
var ready = true;
function readButtonValue() {
// detect button push
if (ready && button.value() > 0) {
ready = false;
if (!useCountdown) {
// use countdown
camera.takePicture('/home/root/test.jpg');
} else {
// or immediately take a photo
var cycle = 300
, maxLevel = 24
, level = maxLevel;
// start countdown timer
var countDown = setInterval(function() {
level --;
console.log("countdown: ", level);
circle.setLevel(level);
// take a picture!
if (level <= 0) {
camera.takePicture('/home/root/test.jpg');
clearInterval(countDown);
ready = true;
}
}, cycle);
}
}
}
setInterval(readButtonValue, 100);