UNPKG

johnny-five

Version:

The JavaScript Arduino Programming Framework.

110 lines (91 loc) 2.21 kB
var lodash = require("lodash"), Fn = { assign: lodash.assign, extend: lodash.extend, debounce: lodash.debounce, mixin: lodash.mixin }; // Fn.map( val, fromLow, fromHigh, toLow, toHigh ) // // Re-maps a number from one range to another. // Based on arduino map() Fn.map = function(x, fromLow, fromHigh, toLow, toHigh) { return (x - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow; }; // Alias Fn.scale = Fn.map; // Fn.constrain( val, lower, upper ) // // Constrains a number to be within a range. // Based on arduino constrain() Fn.constrain = function(x, lower, upper) { return x <= upper && x >= lower ? x : (x > upper ? upper : lower); }; // Fn.range( upper ) // Fn.range( lower, upper ) // Fn.range( lower, upper, tick ) // // Returns a new array range // Fn.range = function(lower, upper, tick) { if (arguments.length === 1) { upper = lower; lower = 0; } lower = lower || 0; upper = upper || 0; tick = tick || 1; var len = Math.max(Math.ceil((upper - lower) / tick), 0), idx = 0, range = []; while (idx <= len) { range[idx++] = lower; lower += tick; } return range; }; // Fn.range.prefixed( prefix, upper ) // Fn.range.prefixed( prefix, lower, upper ) // Fn.range.prefixed( prefix, lower, upper, tick ) // // Returns a new array range, each value prefixed // Fn.range.prefixed = function(prefix, lower, upper, tick) { return Fn.range.apply(null, [].slice.call(arguments, 1)).map(function(val) { return prefix + val; }); }; // Fn.uid() // // Returns a reasonably unique id string // Fn.uid = function() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(chr) { var rnd = Math.random() * 16 | 0; return (chr === "x" ? rnd : (rnd & 0x3 | 0x8)).toString(16); }).toUpperCase(); }; // Fn.square() // // Returns squared x // Fn.square = function(x) { return x * x; }; // Fn.sleep( ms ) // delay for ms // // Returns undefined // Fn.sleep = function(ms) { var start = Date.now(); while (Date.now() < start + ms) {} }; Fn.sum = function sum(values) { return values.reduce(function(accum, value) { return accum + value; }, 0); }; module.exports = Fn;