HubLED and MoveHubTiltSensor
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Nathan Kellenicki 2019-12-18 15:20:20 -08:00
parent 6d23179be6
commit 195c0d5123
9 changed files with 153 additions and 73 deletions

View File

@ -25,9 +25,10 @@ poweredUP.on("discover", async (hub) => { // Wait to discover hubs
let color = 1; let color = 1;
setInterval(() => { setInterval(() => {
const hubs = poweredUP.getConnectedHubs(); // Get an array of all connected hubs const hubs = poweredUP.getHubs(); // Get an array of all connected hubs
hubs.forEach((hub) => { hubs.forEach(async (hub) => {
hub.setLEDColor(color); // Set the color const led = await hub.waitForDeviceByType(PoweredUP.Consts.DeviceType.HUB_LED);
led.setColor(color); // Set the color
}) })
color++; color++;
if (color > 10) { if (color > 10) {

View File

@ -58,13 +58,13 @@ export enum DeviceType {
VOLTAGE_SENSOR = 20, VOLTAGE_SENSOR = 20,
CURRENT_SENSOR = 21, CURRENT_SENSOR = 21,
PIEZO_TONE = 22, PIEZO_TONE = 22,
RGB_LIGHT = 23, HUB_LED = 23,
TILT_SENSOR = 34, TILT_SENSOR = 34,
MOTION_SENSOR = 35, MOTION_SENSOR = 35,
COLOR_DISTANCE_SENSOR = 37, COLOR_DISTANCE_SENSOR = 37,
MEDIUM_LINEAR_MOTOR = 38, MEDIUM_LINEAR_MOTOR = 38,
MOVE_HUB_MEDIUM_LINEAR_MOTOR = 39, MOVE_HUB_MEDIUM_LINEAR_MOTOR = 39,
BOOST_TILT = 40, MOVE_HUB_TILT_SENSOR = 40,
DUPLO_TRAIN_BASE_MOTOR = 41, DUPLO_TRAIN_BASE_MOTOR = 41,
DUPLO_TRAIN_BASE_SPEAKER = 42, DUPLO_TRAIN_BASE_SPEAKER = 42,
DUPLO_TRAIN_BASE_COLOR = 43, DUPLO_TRAIN_BASE_COLOR = 43,

View File

@ -69,6 +69,10 @@ export class Device extends EventEmitter {
return this._type; return this._type;
} }
public get mode () {
return this._mode;
}
protected get isWeDo2SmartHub () { protected get isWeDo2SmartHub () {
return this._isWeDo2SmartHub; return this._isWeDo2SmartHub;
} }

84
src/devices/hubled.ts Normal file
View File

@ -0,0 +1,84 @@
import { Device } from "./device";
import { IDeviceInterface } from "../interfaces";
import * as Consts from "../consts";
export class HubLED extends Device {
constructor (hub: IDeviceInterface, portId: number) {
super(hub, portId, {}, Consts.DeviceType.HUB_LED);
}
/**
* Set the color of the LED on the Hub via a color value.
* @method HubLED#setColor
* @param {Color} color
* @returns {Promise} Resolved upon successful issuance of command.
*/
public setColor (color: number | boolean) {
return new Promise((resolve, reject) => {
if (this.mode !== HubLED.Mode.COLOR) {
this.subscribe(HubLED.Mode.COLOR);
}
if (typeof color === "boolean") {
color = 0;
}
this.send(Buffer.from([0x81, this.portId, 0x11, 0x51, 0x00, color]));
return resolve();
});
}
/**
* Set the color of the LED on the Hub via RGB values.
* @method HubLED#setRGB
* @param {number} red
* @param {number} green
* @param {number} blue
* @returns {Promise} Resolved upon successful issuance of command.
*/
public setRGB (red: number, green: number, blue: number) {
return new Promise((resolve, reject) => {
if (this.mode !== HubLED.Mode.RGB) {
this.subscribe(HubLED.Mode.RGB);
}
this.send(Buffer.from([0x81, this.portId, 0x11, 0x51, 0x01, red, green, blue]));
return resolve();
});
}
/**
* Set the light brightness.
* @method Light#brightness
* @param {number} brightness Brightness value between 0-100 (0 is off)
* @returns {Promise} Resolved upon successful completion of command.
*/
public setBrightness (brightness: number) {
return new Promise((resolve) => {
if (this.isWeDo2SmartHub) {
const data = Buffer.from([this.portId, 0x01, 0x02, brightness]);
this.send(data, Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE);
} else {
const data = Buffer.from([0x81, this.portId, 0x11, 0x51, 0x00, brightness]);
this.send(data);
}
return resolve();
});
}
}
export namespace HubLED {
export enum Mode {
COLOR = 0x00,
RGB = 0x01
}
}

View File

@ -0,0 +1,43 @@
import { Device } from "./device";
import { IDeviceInterface } from "../interfaces";
import * as Consts from "../consts";
export class MoveHubTiltSensor extends Device {
constructor (hub: IDeviceInterface, portId: number) {
super(hub, portId, MoveHubTiltSensor.ModeMap, Consts.DeviceType.MOVE_HUB_TILT_SENSOR);
}
public receive (message: Buffer) {
const mode = this._mode;
switch (mode) {
case MoveHubTiltSensor.Mode.TILT:
/**
* Emits when a tilt sensor is activated.
* @event MoveHubTiltSensor#tilt
* @param {number} x
* @param {number} y
*/
const tiltX = -(message.readInt8(4));
const tiltY = message.readInt8(5);
this.emit("tilt", tiltX, tiltY);
break;
}
}
}
export namespace MoveHubTiltSensor {
export enum Mode {
TILT = 0x00
}
export const ModeMap: {[event: string]: number} = {
"tilt": MoveHubTiltSensor.Mode.TILT
}
}

View File

@ -5,10 +5,12 @@ import { IBLEAbstraction } from "../interfaces";
import { ColorDistanceSensor } from "../devices/colordistancesensor"; import { ColorDistanceSensor } from "../devices/colordistancesensor";
import { CurrentSensor } from "../devices/currentsensor"; import { CurrentSensor } from "../devices/currentsensor";
import { Device } from "../devices/device"; import { Device } from "../devices/device";
import { HubLED } from "../devices/hubled";
import { Light } from "../devices/light"; import { Light } from "../devices/light";
import { MediumLinearMotor } from "../devices/mediumlinearmotor"; import { MediumLinearMotor } from "../devices/mediumlinearmotor";
import { MotionSensor } from "../devices/motionsensor"; import { MotionSensor } from "../devices/motionsensor";
import { MoveHubMediumLinearMotor } from "../devices/movehubmediumlinearmotor"; import { MoveHubMediumLinearMotor } from "../devices/movehubmediumlinearmotor";
import { MoveHubTiltSensor } from "../devices/movehubtiltsensor";
import { PUPRemoteButton } from "../devices/pupremotebutton"; import { PUPRemoteButton } from "../devices/pupremotebutton";
import { SimpleMediumLinearMotor } from "../devices/simplemediumlinearmotor"; import { SimpleMediumLinearMotor } from "../devices/simplemediumlinearmotor";
import { TechnicLargeLinearMotor } from "../devices/techniclargelinearmotor"; import { TechnicLargeLinearMotor } from "../devices/techniclargelinearmotor";
@ -317,6 +319,9 @@ export class Hub extends EventEmitter {
case Consts.DeviceType.TILT_SENSOR: case Consts.DeviceType.TILT_SENSOR:
device = new TiltSensor(this, portId); device = new TiltSensor(this, portId);
break; break;
case Consts.DeviceType.MOVE_HUB_TILT_SENSOR:
device = new MoveHubTiltSensor(this, portId);
break;
case Consts.DeviceType.MEDIUM_LINEAR_MOTOR: case Consts.DeviceType.MEDIUM_LINEAR_MOTOR:
device = new MediumLinearMotor(this, portId); device = new MediumLinearMotor(this, portId);
break; break;
@ -338,6 +343,9 @@ export class Hub extends EventEmitter {
case Consts.DeviceType.PUP_REMOTE_BUTTON: case Consts.DeviceType.PUP_REMOTE_BUTTON:
device = new PUPRemoteButton(this, portId); device = new PUPRemoteButton(this, portId);
break; break;
case Consts.DeviceType.HUB_LED:
device = new HubLED(this, portId);
break;
default: default:
device = new Device(this, portId, undefined, deviceType); device = new Device(this, portId, undefined, deviceType);
break; break;

View File

@ -78,45 +78,6 @@ export class LPF2Hub extends Hub {
} }
/**
* Set the color of the LED on the Hub via a color value.
* @method LPF2Hub#setLEDColor
* @param {Color} color
* @returns {Promise} Resolved upon successful issuance of command.
*/
public setLEDColor (color: number | boolean) {
return new Promise((resolve, reject) => {
let data = Buffer.from([0x41, this._ledPort, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]);
this.send(data, Consts.BLECharacteristic.LPF2_ALL);
if (typeof color === "boolean") {
color = 0;
}
data = Buffer.from([0x81, this._ledPort, 0x11, 0x51, 0x00, color]);
this.send(data, Consts.BLECharacteristic.LPF2_ALL);
return resolve();
});
}
/**
* Set the color of the LED on the Hub via RGB values.
* @method LPF2Hub#setLEDRGB
* @param {number} red
* @param {number} green
* @param {number} blue
* @returns {Promise} Resolved upon successful issuance of command.
*/
public setLEDRGB (red: number, green: number, blue: number) {
return new Promise((resolve, reject) => {
let data = Buffer.from([0x41, this._ledPort, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00]);
this.send(data, Consts.BLECharacteristic.LPF2_ALL);
data = Buffer.from([0x81, this._ledPort, 0x11, 0x51, 0x01, red, green, blue]);
this.send(data, Consts.BLECharacteristic.LPF2_ALL);
return resolve();
});
}
public send (message: Buffer, uuid: string, callback?: () => void) { public send (message: Buffer, uuid: string, callback?: () => void) {
message = Buffer.concat([Buffer.alloc(2), message]); message = Buffer.concat([Buffer.alloc(2), message]);
message[0] = message.length; message[0] = message.length;
@ -460,35 +421,6 @@ export class LPF2Hub extends Hub {
// this.emit("accel", "ACCEL", accelX, accelY, accelZ); // this.emit("accel", "ACCEL", accelX, accelY, accelZ);
// break; // break;
// } // }
// case Consts.DeviceType.BOOST_TILT: {
// const tiltX = data.readInt8(4);
// const tiltY = data.readInt8(5);
// this._lastTiltX = tiltX;
// this._lastTiltY = tiltY;
// this.emit("tilt", port.id, this._lastTiltX, this._lastTiltY, this._lastTiltZ);
// break;
// }
// case Consts.DeviceType.POWERED_UP_REMOTE_BUTTON: {
// switch (data[4]) {
// case 0x01: {
// this.emit("button", port.id, Consts.ButtonState.UP);
// break;
// }
// case 0xff: {
// this.emit("button", port.id, Consts.ButtonState.DOWN);
// break;
// }
// case 0x7f: {
// this.emit("button", port.id, Consts.ButtonState.STOP);
// break;
// }
// case 0x00: {
// this.emit("button", port.id, Consts.ButtonState.RELEASED);
// break;
// }
// }
// break;
// }
// case Consts.DeviceType.DUPLO_TRAIN_BASE_COLOR: { // case Consts.DeviceType.DUPLO_TRAIN_BASE_COLOR: {
// if (data[4] <= 10) { // if (data[4] <= 10) {
// this.emit("color", port.id, data[4]); // this.emit("color", port.id, data[4]);

View File

@ -13,10 +13,12 @@ import { WeDo2SmartHub } from "./hubs/wedo2smarthub";
import { ColorDistanceSensor } from "./devices/colordistancesensor"; import { ColorDistanceSensor } from "./devices/colordistancesensor";
import { CurrentSensor } from "./devices/currentsensor"; import { CurrentSensor } from "./devices/currentsensor";
import { Device } from "./devices/device"; import { Device } from "./devices/device";
import { HubLED } from "./devices/hubled";
import { Light } from "./devices/light"; import { Light } from "./devices/light";
import { MediumLinearMotor } from "./devices/mediumlinearmotor"; import { MediumLinearMotor } from "./devices/mediumlinearmotor";
import { MotionSensor } from "./devices/motionsensor"; import { MotionSensor } from "./devices/motionsensor";
import { MoveHubMediumLinearMotor } from "./devices/movehubmediumlinearmotor"; import { MoveHubMediumLinearMotor } from "./devices/movehubmediumlinearmotor";
import { MoveHubTiltSensor } from "./devices/movehubtiltsensor";
import { PUPRemoteButton } from "./devices/pupremotebutton"; import { PUPRemoteButton } from "./devices/pupremotebutton";
import { SimpleMediumLinearMotor } from "./devices/simplemediumlinearmotor"; import { SimpleMediumLinearMotor } from "./devices/simplemediumlinearmotor";
import { TechnicLargeLinearMotor } from "./devices/techniclargelinearmotor"; import { TechnicLargeLinearMotor } from "./devices/techniclargelinearmotor";
@ -40,10 +42,12 @@ window.PoweredUP = {
Consts, Consts,
ColorDistanceSensor, ColorDistanceSensor,
Device, Device,
HubLED,
Light, Light,
MediumLinearMotor, MediumLinearMotor,
MotionSensor, MotionSensor,
MoveHubMediumLinearMotor, MoveHubMediumLinearMotor,
MoveHubTiltSensor,
PUPRemoteButton, PUPRemoteButton,
SimpleMediumLinearMotor, SimpleMediumLinearMotor,
TechnicLargeLinearMotor, TechnicLargeLinearMotor,

View File

@ -13,10 +13,12 @@ import { WeDo2SmartHub } from "./hubs/wedo2smarthub";
import { ColorDistanceSensor } from "./devices/colordistancesensor"; import { ColorDistanceSensor } from "./devices/colordistancesensor";
import { CurrentSensor } from "./devices/currentsensor"; import { CurrentSensor } from "./devices/currentsensor";
import { Device } from "./devices/device"; import { Device } from "./devices/device";
import { HubLED } from "./devices/hubled";
import { Light } from "./devices/light"; import { Light } from "./devices/light";
import { MediumLinearMotor } from "./devices/mediumlinearmotor"; import { MediumLinearMotor } from "./devices/mediumlinearmotor";
import { MotionSensor } from "./devices/motionsensor"; import { MotionSensor } from "./devices/motionsensor";
import { MoveHubMediumLinearMotor } from "./devices/movehubmediumlinearmotor"; import { MoveHubMediumLinearMotor } from "./devices/movehubmediumlinearmotor";
import { MoveHubTiltSensor } from "./devices/movehubtiltsensor";
import { PUPRemoteButton } from "./devices/pupremotebutton"; import { PUPRemoteButton } from "./devices/pupremotebutton";
import { SimpleMediumLinearMotor } from "./devices/simplemediumlinearmotor"; import { SimpleMediumLinearMotor } from "./devices/simplemediumlinearmotor";
import { TechnicLargeLinearMotor } from "./devices/techniclargelinearmotor"; import { TechnicLargeLinearMotor } from "./devices/techniclargelinearmotor";
@ -40,10 +42,12 @@ export {
Consts, Consts,
ColorDistanceSensor, ColorDistanceSensor,
Device, Device,
HubLED,
Light, Light,
MediumLinearMotor, MediumLinearMotor,
MotionSensor, MotionSensor,
MoveHubMediumLinearMotor, MoveHubMediumLinearMotor,
MoveHubTiltSensor,
PUPRemoteButton, PUPRemoteButton,
SimpleMediumLinearMotor, SimpleMediumLinearMotor,
TechnicLargeLinearMotor, TechnicLargeLinearMotor,