UNPKG

raspicam-js

Version:

A Node.js-based controller module for the Raspberry Pi camera based on a command structure similar to Johnny-Five

103 lines (85 loc) 2.12 kB
var lodash = require("lodash"), Fn = { assign: lodash.assign, extend: lodash.extend, debounce: lodash.debounce }; // 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 ) {} }; module.exports = Fn;