diff --git a/johnny-five/johnny-five-tests.ts b/johnny-five/johnny-five-tests.ts new file mode 100644 index 0000000000..930a67ea88 --- /dev/null +++ b/johnny-five/johnny-five-tests.ts @@ -0,0 +1,255 @@ +/// + +import five = require('johnny-five'); +var board = new five.Board(); + +board.on('connect', function(){ +}); + +board.on('ready', function(){ + var accelerometer = new five.Accelerometer({ + controller: "MPU6050", + sensitivity: 16384 // optional + }); + + var servo = new five.Servo(9); + var animation = new five.Animation(servo); + + // Create an animation segment object + animation.enqueue({ + duration: 2000, + cuePoints: [0, 0.25, 0.5, 0.75, 1.0], + keyFrames: [ {degrees: 0}, {degrees: 135}, {degrees: 45}, {degrees: 180}, {degrees: 0}] + }); + + // Create a new `button` hardware instance. + var button = new five.Button(8); + + button.on("hold", function() { + console.log( "Button held" ); + }); + + button.on("press", function() { + console.log( "Button pressed" ); + }); + + button.on("release", function() { + console.log( "Button released" ); + }); + + + var compass = new five.Compass({ + controller: "HMC6352" + }); + + compass.on("headingchange", function() { + console.log("headingchange"); + console.log(" heading : ", Math.floor(this.heading)); + console.log(" bearing : ", this.bearing.name); + console.log("--------------------------------------"); + }); + + compass.on("data", function() { + console.log(" heading : ", Math.floor(this.heading)); + console.log(" bearing : ", this.bearing.name); + console.log("--------------------------------------"); + }); + + var esc = new five.ESC(11); + + // Set to top speed. (this can be physically dangerous, you've been warned.) + esc.max(); + + + var gyro = new five.Gyro({ + pins: ["A0", "A1"], + sensitivity: 0.67, // optional + resolution: 4.88 // optional + }); + + var accel = new five.IMU({ + controller: "MPU6050", + address: 0x68, // optional + freq: 100 // optional + }); + + var motion = new five.IR.Motion(7); + +// Options object with pin property + var motion = new five.IR.Motion({ + pin: 7 + }); + + var proximity = new five.IR.Proximity({ + controller: "GP2Y0A21YK", + pin: "A0" + }); + + var eyes = new five.IR.Reflect.Array({ + emitter: 13, + pins: ["A0", "A1", "A2"], // any number of pins + freq: 25 + }); + + eyes.on('data', function() { + console.log( "Raw Values: ", this.raw ); + }); + + eyes.on('line', function() { + console.log( "Line Position: ", this.line); + }); + + eyes.enable(); + + var joystick = new five.Joystick({ + pins: ["A0", "A1"] + }); + joystick.on("data", (value)=>{ + console.log(value); + }); + + joystick.on("axismove", (err, value)=>{ + console.log("change"); + + console.log(joystick.axis); + console.log(joystick.raw); + console.log(err); + console.log(value); + }); + + var lcd = new five.LCD({ + pins: [8, 9, 4, 5, 6, 7], + backlight: 13, + rows: 2, + cols: 16 + }); + + var led = new five.Led(13); + led.blink(); + + var digits = new five.Led.Digits({ + pins: { + data: 2, + clock: 3, + cs: 4 + } + }); + + var matrix = new five.Led.Matrix({ + controller: "HT16K33", + dims: "8x16", // or "16x8" + rotation: 2 + }); + + // With Options object & pins array + var rgb = new five.Led.RGB({ + pins: [9, 10, 11] + }); + + var motor = new five.Motor({ + pins: { + pwm:9, + dir:8, + brake: 11 + } + }); + + var piezo = new five.Piezo(3); + + // Plays a song + piezo.play({ + // song is composed by an array of pairs of notes and beats + // The first argument is the note (null means "no note") + // The second argument is the length of time (beat) of the note (or non-note) + song: [ + ["C4", 1 / 4], + ["D4", 1 / 4], + ["F4", 1 / 4], + ["D4", 1 / 4], + ["A4", 1 / 4], + [null, 1 / 4], + ["A4", 1], + ["G4", 1], + [null, 1 / 2], + ["C4", 1 / 4], + ["D4", 1 / 4], + ["F4", 1 / 4], + ["D4", 1 / 4], + ["G4", 1 / 4], + [null, 1 / 4], + ["G4", 1], + ["F4", 1], + [null, 1 / 2] + ], + tempo: 100 + }); + + var digital = new five.Pin({ + pin: 13 + }); + + var analog = new five.Pin({ + pin: "A0" + }); + + var analogAsDigital = new five.Pin({ + pin: 14, + type: "digital" + }); + + var ping = new five.Ping(7); + + var ping = new five.Ping({ + pin: 7 + }); + + var relay = new five.Relay(10); + +// Options object with pin property + var relay = new five.Relay({ + pin: 10 + }); + + var sensor = new five.Sensor("A0"); + + sensor.scale([ 0, 10 ]).on("data", function() { + console.log( this.value ); + }); + + var servo = new five.Servo({ + pin: 10, + range: [45, 135] + }); + + var register = new five.ShiftRegister({ + pins: { + data: 2, + clock: 3, + latch: 4 + } + }); + + var sonar = new five.Sonar("A0"); + + sonar.on("data", function() { + console.log("inches : " + this.in); + console.log("centimeters: " + this.cm); + console.log("-----------------------"); + }); + + var stepper = new five.Stepper({ + type: five.Stepper.TYPE.DRIVER, + stepsPerRev: 200, + pins: { + step: 11, + dir: 12 + } + }); + + var temperature = new five.Temperature({ + pin: "A0", + toCelsius: function(raw) { // optional + return (raw / 100) + 10; + } + }); +}); diff --git a/johnny-five/johnny-five.d.ts b/johnny-five/johnny-five.d.ts new file mode 100644 index 0000000000..9dd1477eb4 --- /dev/null +++ b/johnny-five/johnny-five.d.ts @@ -0,0 +1,588 @@ +// Type definitions for johnny-five +// Project: https://github.com/rwaldron/johnny-five +// Definitions by: Toshiya Nakakura +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module "johnny-five" { + export interface AccelerometerOption{ + controller: string; + } + + export interface AccelerometerGeneralOption{ + controller?: string; + } + + export interface AccelerometerAnalogOption extends AccelerometerGeneralOption{ + pins: Array; + sensitivity?: number; + aref?: number; + zeroV?: number | Array; + autoCalibrate?: boolean; + } + + export interface AccelerometerMPU6050Option extends AccelerometerGeneralOption{ + sensitivity?: number; + } + + export interface AccelerometerMMA7361Option extends AccelerometerGeneralOption{ + sleepPin?: number | string; + } + + export class Accelerometer{ + constructor(option: AccelerometerGeneralOption | AccelerometerAnalogOption | AccelerometerMPU6050Option | AccelerometerMMA7361Option); + on(event: string, cb: ()=>void): void; + on(event: "change", cb: ()=>void): void; + on(event: "data", cb: (freq: any)=>void): void; + hasAxis(name: string): void; + enable(): void; + disable(): void; + } + + export class Animation{ + constructor(option: Servo | Array); + enqueue(segment: any): void; + play(): void; + pause(): void; + stop(): void; + next(): void; + speed(speed: Array): void; + + target: number; + duration: number; + cuePoints: Array; + keyFrames: number; + easing: string; + loop: boolean; + loopback: number; + metronomic: boolean; + progress: number; + currentSpeed: number; + fps: number; + } + + export interface ButtonOptions{ + pin: number | string; + invert?: boolean; + isPullup?: boolean; + holdtime?: number; + } + + export class Button{ + constructor(pin: number | string | ButtonOptions); + on(event: string, cb: ()=>void): void; + on(event: "hold", cb: (holdTime: number)=>void): void; + on(event: "down", cb: ()=>void): void; + on(event: "press", cb: ()=>void): void; + on(event: "up", cb: ()=>void): void; + on(event: "release", cb: ()=>void): void; + } + + export interface BoardOptions{ + id?: number | string; + port?: string | any; + repl?: boolean; + } + + export interface Repl{ + inject(object: any): void; + } + + export class Board{ + constructor(option?: BoardOptions); + on(event: string, cb: ()=>void): void; + on(event: "ready", cb: ()=>void): void; + on(event: "connect", cb: ()=>void): void; + pinMode(pin: number, mode: number): void; + analogWrite(pin: number, value: number): void; + analogRead(pin: number, cb: (item: number)=>void): void; + digitalWrite(pin: number, value: number): void; + digitalRead(pin: number, cb: (item: number)=>void): void; + shiftOut(dataPin: Pin, clockPin: Pin, isBigEndian: boolean, value: number): void; + wait(ms: number, cb: ()=>void): void; + loop(ms: number, cb: ()=>void): void; + + isReady: boolean; + io: any; + id: string; + pins: Array; + port: string; + inject: Repl; + } + + export interface CompassOptions{ + controller: string; + gauss?: number; + } + + export class Compass{ + constructor(option: CompassOptions); + on(event: string, cb: ()=>void): void; + on(event: "change", cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + } + + export interface ESCOption{ + pin: number | string; + range?: Array; + startAt?: number; + } + + export class ESC{ + constructor(option: number | string | ESCOption); + speed(value: number): void; + min(): void; + max(): void; + stop(): void; + } + + export interface GyroGeneralOption{ + controller?: string; + } + + export interface GyroAnalogOption extends GyroGeneralOption{ + pins: Array; + sensitivity: number; + resolution?: number; + } + + export interface GyroMPU6050Option extends GyroGeneralOption{ + sensitivity: number; + } + + export class Gyro{ + constructor(option: GyroGeneralOption | GyroAnalogOption | GyroMPU6050Option); + on(event: string, cb: ()=>void): void; + on(event: "change", cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + recalibrate(): void; + } + + export interface IMUGeneralOption{ + controller?: string; + freq?: number; + } + + export interface IMUMPU6050Option extends IMUGeneralOption{ + address: number; + } + + export class IMU{ + constructor(option: IMUGeneralOption | IMUMPU6050Option); + on(event: string, cb: ()=>void): void; + on(event: "change", cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + } + + export module IR{ + export interface MotionOption{ + pin: number | string; + } + + export class Motion{ + constructor(option: number | MotionOption); + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "motionstart", cb: ()=>void): void; + on(event: "motionend", cb: ()=>void): void; + on(event: "calibrated", cb: ()=>void): void; + } + + export interface PloximityOption{ + pin: number | string; + controller: string; + } + + export class Proximity{ + constructor(option: number | PloximityOption); + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "change", cb: ()=>void): void; + } + + export interface ArrayOption{ + pins: Array | Array; + emitter: number | string; + freq?: number; + } + + export interface LoadCalibrationOption{ + min: Array; + max: Array; + } + + export module Reflect{ + export class Array{ + constructor(option: ArrayOption); + enable(): void; + disable(): void; + calibrate(): void; + calibrateUntil(predicate: ()=>void): void; + loadCalibration(option: LoadCalibrationOption): void; + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "calibratedData", cb: (data: any)=>void): void; + on(event: "line", cb: (data: any)=>void): void; + } + } + } + + export interface JoystickOption{ + pins: Array; + } + + export class Joystick{ + constructor(option: JoystickOption); + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "change", cb: ()=>void): void; + on(event: "axismove", cb: (error: Error, date: Date)=>void): void; + + axis: Array; + raw: Array; + } + + + export interface LCDGeneralOption{ + rows?: number; + cols?: number; + } + + export interface LCDI2COption extends LCDGeneralOption{ + controller: string; + } + + export interface LCDParallelOption extends LCDGeneralOption{ + pins: Array; + } + + export class LCD{ + constructor(option: LCDGeneralOption | LCDI2COption | LCDParallelOption); + print(message: string): void; + useChar(char: string): void; + clear(): void; + cursor(row: number, col: number): void; + home(): void; + display(): void; + noDisplay(): void; + blink(): void; + noBlink(): void; + autoscroll(): void; + noAutoscroll(): void; + } + + export interface LedOption{ + pin: number; + type?: string; + controller?: string; + address?: number; + isAnode?: boolean; + } + + export class Led{ + constructor(option: number | LedOption); + on(): void; + off(): void; + toggle(): void; + strobe(ms: number): void; + blink(): void; + blink(ms: number): void; + brightness(val: number): void; + fade(brightness: number, ms: number): void; + fadeIn(ms: number): void; + fadeOut(ms: number): void; + pulse(ms: number): void; + stop(ms: number): void; + } + + export module Led{ + export interface DigitsOption{ + pins: any; + devices?: number; + } + + export class Digits{ + constructor(option: DigitsOption); + on(): void; + on(index: number): void; + off(): void; + off(index: number): void; + clear(): void; + clear(index: number): void; + brightness(value: number): void; + brightness(index: number, value: number): void; + draw(position: number, character: number): void; + draw(index: number, position: number, character: number): void; + } + + export interface MatrixOption{ + pins: any; + devices?: number; + } + + export interface MatrixIC2Option{ + controller: string; + addresses?: Array; + isBicolor?: boolean; + dims? :any; + rotation?: number; + } + + export class Matrix{ + constructor(option: MatrixOption | MatrixIC2Option); + on(): void; + on(index: number): void; + off(): void; + off(index: number): void; + clear(): void; + clear(index: number): void; + brightness(value: number): void; + brightness(index: number, value: number): void; + led(row: number, col: number, state: any): void; + led(index: number, row: number, col: number, state: any): void; + row(row: number, val: number): void; + row(index: number, row: number, val: number): void; + column(row: number, val: number): void; + column(index: number, row: number, val: number): void; + draw(position: number, character: number): void; + draw(index: number, position: number, character: number): void; + } + + export interface RGBOption{ + pins: Array; + isAnode?: boolean; + controller?: string; + } + + export class RGB{ + constructor(option: RGBOption); + on(): void; + off(): void; + color(value: number): void; + toggle(): void; + strobe(ms: number): void; + brightness(value: number): void; + fadeIn(ms: number): void; + fadeOut(ms: number): void; + pulse(ms: number): void; + stop(ms: number): void; + } + } + + export interface MotorOption{ + pins: any; + current?: any; + invertPWM?: boolean; + address?: number; + controller?: string; + register?: any; + bits?: any; + } + + export class Motor{ + constructor(option: Array | MotorOption); + forward(speed: number): void; + fwd(speed: number): void; + reverse(speed: number): void; + rev(speed: number): void; + start(): void; + start(speed: number): void; + stop(): void; + brake(): void; + release(): void; + } + + export interface PiezoOption{ + pin: number; + } + + export class Piezo{ + constructor(option: number | PiezoOption); + frequency(frequency: number, duration: number): void; + play(tune: any, cb?: ()=>void): void; + tone(frequency: number, duration: number): void; + noTone(): void; + off(): void; + } + + export interface PinOption{ + id?: number | string; + pin: number | string; + type?: string; + } + + export interface PinState{ + supportedModes: Array; + mode: number; + value: number; + report: number; + analogChannel: number; + } + + export class Pin{ + constructor(option: number | string | PinOption); + query(cb: (pin: PinState)=>void): void; + high(): void; + low(): void; + write(value: number): void; + read(cb: (value: number)=>void): void; + static write(pin: number, value: number): void; + static read(pin: number, cb: (data: number)=>void): void; + } + + export interface PingOption{ + pin: number | string; + freq?: number; + pulse?: number; + } + + export class Ping{ + constructor(option: number | PingOption); + } + + export interface RelayOption{ + pin: number | string; + type?: string; + } + + export class Relay{ + constructor(option: number | RelayOption); + open(): void; + close(): void; + toggle(): void; + } + + export interface SensorOption{ + pin: number | string; + freq?: boolean; + threshold?: number; + } + + export class Sensor{ + constructor(option: number | string | SensorOption); + scale(low: number, high: number): Sensor; + scale(range: number[]): Sensor; + scale(): Sensor; + booleanAt(barrier: number): boolean; + within(range: Array, cb: ()=>void): void; + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "change", cb: ()=>void): void; + } + + export interface ServoGeneralOption{ + pin: number | string; + range?: Array; + type?: string; + startAt?: number; + isInverted?: boolean; + center?: boolean; + controller?: string; + } + + export interface ServoPCA9685Option extends ServoGeneralOption{ + address?: number; + } + + export interface ServoSweepOpts{ + range: Array; + interval?: number; + step?: number; + } + + export class Servo{ + constructor(option: number | string | ServoGeneralOption); + to(degrees: number, ms?: number, rage?: number): void; + min(): void; + max(): void; + center(): void; + sweep(): void; + sweep(range: Array): void; + sweep(opt: ServoSweepOpts): void; + stop(): void; + cw(speed: number): void; + ccw(speed: number): void; + on(event: string, cb: ()=>void): void; + on(event: "move:complete", cb: ()=>void): void; + } + + export interface ShiftRegisterOption{ + pins: any; + } + + export class ShiftRegister{ + constructor(option: ShiftRegisterOption); + send(...value: number[]): void; + } + + export interface SonarOption{ + pin: number | string; + device: string; + freq?: number; + threshold?: number; + } + + export class Sonar{ + constructor(option: number | string | SonarOption); + within(range: Array, cb: ()=>void): void; + within(range: Array, unit: string, cb: ()=>void): void; + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "change", cb: ()=>void): void; + } + + export interface StepperOption{ + pins: any; + stepsPerRev: number; + type: number; + rpm?: number; + direction?: number; + } + + export module Stepper{ + export class TYPE{ + static DRIVER: number; + static TWO_WIRE: number; + static FOUR_WIRE: number; + } + } + + export class Stepper{ + constructor(option: number | string | StepperOption); + step(stepsOrOpts: any, cb: ()=>void): void; + rpm(): Stepper; + rpm(value: number): Stepper; + speed(): Stepper; + speed(value: number): Stepper; + direction(): Stepper; + direction(value: number): Stepper; + accel(): Stepper; + accel(value: number): Stepper; + decel(): Stepper; + decel(value: number): Stepper; + cw(): Stepper; + ccw(): Stepper; + + within(range: Array, cb: ()=>void): void; + within(range: Array, unit: string, cb: ()=>void): void; + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "change", cb: ()=>void): void; + } + + export interface TemperatureOption{ + controller?: string; + pin: string | number; + toCelsius?: (val: number)=>number; + freq?: number; + } + + export class Temperature{ + constructor(option: TemperatureOption); + on(event: string, cb: ()=>void): void; + on(event: "data", cb: (data: any)=>void): void; + on(event: "change", cb: ()=>void): void; + } +} +