UNPKG

johnny-five

Version:

The JavaScript Arduino Programming Framework.

161 lines (109 loc) 2.85 kB
# Radar Run with: ```bash node eg/radar.js ``` ```javascript var five = require("johnny-five"), child = require("child_process"), http = require("http"), socket = require("socket.io"), fs = require("fs"), app, board, io; function handler(req, res) { var path = __dirname; if (req.url === "/") { path += "/radar.html"; } else { path += req.url; } fs.readFile(path, function(err, data) { if (err) { res.writeHead(500); return res.end("Error loading " + path); } res.writeHead(200); res.end(data); }); } app = http.createServer(handler); app.listen(8080); io = socket.listen(app); io.set("log level", 1); board = new five.Board(); board.on("ready", function() { var center, degrees, step, facing, range, scanner, soi, ping, last; // Open Radar view child.exec("open http://localhost:8080/"); // Starting scanner scanning position (degrees) degrees = 1; // Servo scanning steps (degrees) step = 1; // Current facing direction facing = ""; last = 0; // Scanning range (degrees) range = [0, 170]; // Servo center point (degrees) center = range[1] / 2; // ping instance (distance detection) ping = new five.Ping(7); // Servo instance (panning) scanner = new five.Servo({ pin: 12, range: range }); this.repl.inject({ scanner: scanner }); // Initialize the scanner servo at 0° scanner.min(); // Scanner/Panning loop this.loop(100, function() { var bounds, isOver, isUnder; bounds = { left: center + 5, right: center - 5 }; isOver = degrees > scanner.range[1]; isUnder = degrees <= scanner.range[0]; // Calculate the next step position if (isOver || isUnder) { if (isOver) { io.sockets.emit("reset"); degrees = 0; step = 1; last = -1; } else { step *= -1; } } // Update the position by N° step degrees += step; // Update servo position scanner.to(degrees); }); io.sockets.on("connection", function(socket) { console.log("Socket Connected"); soi = socket; ping.on("data", function() { if (last !== degrees) { io.sockets.emit("ping", { degrees: degrees, distance: this.cm }); } last = degrees; }); }); }); // // Reference // // // // http://www.maxbotix.com/pictures/articles/012_Diagram_690X480.jpg ``` ## Contributing All contributions must adhere to the [Idiomatic.js Style Guide](https://github.com/rwldrn/idiomatic.js), by maintaining the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt](https://github.com/cowboy/grunt). ## License Copyright (c) 2012 Rick Waldron <waldron.rick@gmail.com> Licensed under the MIT license.