The Fn
object gives you access to a number of handy utility functions and "constants" for your Johnny-Five convenience. The source in lib/fn.js
has extensive inline comments, as well. The Fn
object is available in Johnny-Five's top-level context:
var five = require('johnny-five');
var total = five.Fn.sum([3, 4, 2, 0, 5]); // -> 14
API
General Utility Functions
constrain(value, lower, upper) Constrain
value
so that it falls within the range bounded bylower
andupper
.five.Fn.constrain(235, 0, 255); // --> 235 five.Fn.constrain(948, 0, 255); // --> 255
inRange(value, lower, upper) Is the
value
within the range bounded bylower
andupper
?five.Fn.inRange(235, 0, 255); // --> true five.Fn.inRange(948, 0, 255); // --> false
map(value, fromLow, fromHigh, toLow, toHigh) Map a numeric
value
from one range to another. Based on Arduino'smap(...)
.five.Fn.map(500, 0, 1000, 0, 255); // --> 127
fmap(...) Like
Fn.map
, but the return value will be cast to aFloat32
.range(lower, upper, tick) Generate an Array of Numbers with element values ranging from
lower
toupper
; the step (increment/decrement) between each is defined bytick
. Ifrange
is invoked with a single argument, it will be used to determine the number of elements in the resulting Array.five.Fn.range(5); // -> [0, 1, 2, 3, 4]; five.Fn.range(5, 10); // -> [5, 6, 7, 8, 9, 10]; five.Fn.range(3, 27, 3); // -> [3, 6, 9, 12, 15, 18, 21, 24, 27]; five.Fn.range(0, -9, -3); // -> [0, -3, -6, -9];
range.prefixed(prefix, ...) Adds prefix to each element in the range Array returned by
Fn.range
. The function passes on arguments (other thanprefix
) to therange
function.five.Fn.range.prefixed("A", 0, 10, 2); // -> ["A0", "A2", "A4", "A6", "A8", "A10"]
scale(...) Alias for
Fn.map
fscale(...) Alias for
Fn.fmap
sum(values) Calculate a sum of all the elements in an Array.
five.Fn.sum([3, 4, 2, 0, 5]); // -> 14
toFixed(number, digits) Format a number such that it has a given number of digits after the decimal point.
five.Fn.toFixed(5.4564, 2); // -> 5.46 five.Fn.toFixed(1.5, 2); // -> 1.5
uid() Generate a reasonably-unique ID string.
Functions for Manipulating Bits and Integers
bitSize(n) Return the number of bits in a given number
n
.five.Fn.bitSize(1000); // --> 10
bitValue(bit) (also aliased as _BV and bv) Return a value with the bit at the position (
bit
) indicated set (to 1). (From avr/io.h "BV")An example: logically OR these bits together: var ORed = _BV(0) | _BV(2) | _BV(7); BIT 7 6 5 4 3 2 1 0 --------------------------------------------------------- _BV(0) = 0 0 0 0 0 0 0 1 _BV(2) = 0 0 0 0 0 1 0 0 _BV(7) = 1 0 0 0 0 0 0 0 ORed = 1 0 0 0 0 1 0 1 ORed === 133;
Ints from Multiple Bytes
The following functions allow you to build 16-, 24- and 32-bit numbers by cobbling together multiple bytes:
int16(msb, lsb) Combine
msb
(most-significant byte) andlsb
(least-significant byte) into a 16-bit signed integer.five.Fn.int16(8, 0); // --> 2048 five.Fn.int16(255, 255); // --> -1 (because signed)
uint16(msb, lsb) Combine
msb
(most-significant byte) andlsb
(least-significant byte) into a 16-bit unsigned integer.five.Fn.int16(8, 0); // --> 2048 five.Fn.int16(255, 255); // --> 65535 (because unsigned)
int24(b16, b8, b0) Combine three bytes to make a signed 24-bit integer.
five.Fn.int24(127, 255, 255); // --> 8388607 five.Fn.int24(255, 255, 255); // --> -1 (because signed)
uint24(b16, b8, b0) Combine three bytes to make an unsigned 24-bit integer.
five.Fn.int24(127, 255, 255); // --> 8388607 five.Fn.int24(255, 255, 255); // --> 16777215 (because unsigned)
int32(b24, b16, b8, b0) Combine four bytes to make a signed 32-bit integer.
five.Fn.int32(127, 255, 255, 255); // --> 2147483647 five.Fn.int32(200, 255, 255, 255); // --> -922746881 (because signed)
uint32(b24, b16, b8, b0) Combine three bytes to make an unsigned 32-bit integer.
five.Fn.uint32(127, 255, 255, 255); // --> 2147483647 five.Fn.uint32(200, 255, 255, 255); // --> 4294967295 (because unsigned)
Auto-Generated Functions
The following functions are available in the bitSizes of: 4, 8, 10, 12, 16, 20, 24, 32
u[bitSize](value) (e.g.
Fn.u8
) Constrainvalue
to the valid range of unsigned ints for the given bitsize.Fn.u8(255); // --> 255 Fn.u8(256); // --> 255 Fn.u8(0); // --> 0 Fn.u4(255); // --> 15
s[bitSize](value) (e.g.
Fn.s16
) Constrainvalue
to the valid range of signed ints for the given bitsize.Fn.s8(255); // --> -1 Fn.s8(127); // --> 127 Fn.s8(128); // --> -128
Useful "Constants"
- RAD_TO_DEG
- DEG_TO_RAD
- TAU
- POW_2_0 through POW_2_53 Powers of 2