Removed examples with old API

This commit is contained in:
Nathan Kellenicki 2020-01-29 14:57:03 -08:00
parent c6f8015154
commit e34eea98ba
10 changed files with 0 additions and 898 deletions

View File

@ -1,162 +0,0 @@
// This example won't work by itself, this is the code used to automate this train layout: https://www.youtube.com/watch?v=Tyzo_hHFiUc
// It is included here as an example.
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning for hubs
console.log("Looking for Hubs...");
const maerskUuid = "e29b56ad7c74419a9c6462f13c58306c";
const horizonUuid = "2278310c5d3b47c087290d9dc745c017";
const outerUuid = "c72413db7ce24411967ff25184d4609a";
const innerUuid = "31c8ce1864f245d3ba5f87b33adb4b6d";
const stopUuid = "f4924139c6684be19840f97738c707f3";
let maersk = null;
let outer = null;
let inner = null;
let horizon = null;
let stop = null;
let state = 0;
let moving = true;
poweredUP.on("discover", async (hub) => { // Wait to discover hubs
console.log(hub.uuid);
if (hub.uuid === outerUuid) {
await hub.connect();
outer = hub;
}
if (hub.uuid === innerUuid) {
await hub.connect();
inner = hub;
}
if (hub.uuid === horizonUuid) {
await hub.connect();
horizon = hub;
}
if (hub.uuid === stopUuid) {
await hub.connect();
stop = hub;
stop.on("distance", async (port, distance) => {
if (distance < 100 && moving && state === 10) {
moving = false;
horizon.setMotorSpeed("A", 0);
await maersk.sleep(2000);
maersk.setMotorSpeed("A", -40);
setTimeout(() => {
state = 3;
moving = true;
}, 3000);
}
if (distance < 100 && moving && state === 11) {
moving = false;
horizon.setMotorSpeed("A", 0);
await maersk.sleep(2000);
maersk.setMotorSpeed("A", 50);
setTimeout(() => {
state = 0;
moving = true;
}, 3000);
}
});
}
if (hub.uuid === maerskUuid) {
await hub.connect();
maersk = hub;
maersk.setMotorSpeed("A", 50);
maersk.on("color", async (port, color) => {
console.log(color);
if (color === 7 && moving && state === 0) {
moving = false;
maersk.setMotorSpeed("A", 0);
await outer.setMotorSpeed("C", -100, 600);
await maersk.sleep(2000);
maersk.setMotorSpeed("A", -40);
setTimeout(() => {
state = 1;
moving = true;
}, 3000);
}
if (color === 7 && moving && state === 1) {
moving = false;
maersk.setMotorSpeed("A", 0);
inner.setMotorSpeed("A", 100);
await inner.sleep(600);
inner.setMotorSpeed("A", 0);
await maersk.sleep(2000);
maersk.setMotorSpeed("A", 30);
setTimeout(() => {
state = 2;
moving = true;
}, 3000);
}
if (color === 7 && moving && state === 2) {
moving = false;
maersk.setMotorSpeed("A", 0);
await outer.setMotorSpeed("C", 100, 600);
await maersk.sleep(2000);
horizon.setMotorSpeed("A", -60);
setTimeout(() => {
state = 10;
moving = true;
}, 6000);
}
if (color === 7 && moving && state === 3) {
moving = false;
maersk.setMotorSpeed("A", 0);
inner.setMotorSpeed("A", -100);
outer.setMotorSpeed("C", -100, 600);
await inner.sleep(600);
inner.setMotorSpeed("A", 0);
await maersk.sleep(2000);
maersk.setMotorSpeed("A", 30);
setTimeout(() => {
state = 4;
moving = true;
setTimeout(() => {
maersk.setMotorSpeed("A", 50);
}, 4000);
}, 3000);
}
if (color === 7 && moving && state === 4) {
moving = false;
await outer.setMotorSpeed("C", 100, 600);
setTimeout(() => {
state = 0;
moving = true;
}, 3000);
}
if (color === 9 && moving && state === 0) {
moving = false;
maersk.setMotorSpeed("A", 0);
await maersk.sleep(2000);
horizon.setMotorSpeed("A", -60);
setTimeout(() => {
state = 11;
moving = true;
}, 6000);
}
});
}
});

View File

@ -1,93 +0,0 @@
/*
*
* This example allows you to connect your Batmobile and a Powered UP Remote Control to your laptop, and enables the control of the Batmobile with the Remote.
*
*/
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning
console.log("Looking for Batmobile and Remote...");
let batmobile = null;
let remote = null;
let lastButton = null;
poweredUP.on("discover", async (hub) => { // Wait to Batmobile and Remote
if (hub instanceof PoweredUP.PUPHub) {
batmobile = hub;
await batmobile.connect();
console.log("Connected to Batmobile!");
} else if (hub instanceof PoweredUP.PUPRemote) {
remote = hub;
remote.on("button", async (button, state) => {
if (batmobile) {
switch (state) {
case PoweredUP.Consts.ButtonState.UP: // If up is pressed, move the wheels forward
{
lastButton = state;
batmobile.setMotorSpeed(button === "LEFT" ? "B" : "A", button === "LEFT" ? -100 : 100);
break;
}
case PoweredUP.Consts.ButtonState.DOWN: // If down is pressed, move the wheels backwards
{
lastButton = state;
batmobile.setMotorSpeed(button === "LEFT" ? "B" : "A", button === "LEFT" ? 100 : -100);
break;
}
case PoweredUP.Consts.ButtonState.RELEASED: // Stop the wheels when the button is released
{
if (lastButton === PoweredUP.Consts.ButtonState.UP || lastButton === PoweredUP.Consts.ButtonState.DOWN) {
batmobile.setMotorSpeed(button === "LEFT" ? "B" : "A", 0);
}
break;
}
case PoweredUP.Consts.ButtonState.STOP: // When left red button is pressed, do a retreat. When right red button is pressed, scan the area.
{
lastButton = state;
if (button === "LEFT") {
await batmobile.setMotorSpeed("A", -100, 500);
await batmobile.setMotorSpeed("B", -100, 1000);
await batmobile.setMotorSpeed("A", -100, 1000);
await batmobile.setMotorSpeed("B", -100, 1000);
await batmobile.setMotorSpeed("A", -100, 500);
} else if (button === "RIGHT") {
await batmobile.setMotorSpeed("AB", 100, 1000);
await batmobile.setMotorSpeed("AB", -100, 2000);
await batmobile.setMotorSpeed("AB", 100, 2000);
await batmobile.setMotorSpeed("AB", -100, 1000);
}
break;
}
case PoweredUP.Consts.ButtonState.PRESSED: // Do a wheelie when the green button is pressed
{
lastButton = state;
if (button === "GREEN") {
batmobile.setMotorSpeed("AB", [-100, 100]);
await batmobile.sleep(500);
await batmobile.setMotorSpeed("AB", [100, -100], 1000);
}
break;
}
}
}
})
await remote.connect();
console.log("Connected to Powered UP Remote!");
}
if (batmobile && remote) {
batmobile.setLEDColor(PoweredUP.Consts.Color.WHITE);
remote.setLEDColor(PoweredUP.Consts.Color.RED);
console.log("You're now ready to go!");
}
});

View File

@ -1,37 +0,0 @@
/*
*
* This demonstrates connecting multiple hubs to your laptop. Once connected, all the hubs LED lights will cycle through the same colors simultaneously.
*
*/
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning for hubs
console.log("Looking for Hubs...");
poweredUP.on("discover", async (hub) => { // Wait to discover hubs
await hub.connect(); // Connect to hub
console.log(`Connected to ${hub.name}!`);
const motorA = await hub.waitForDeviceAtPort("A");
console.log("Got motor A");
const motorB = await hub.waitForDeviceAtPort("B");
console.log("Got motor B");
const motorC = await hub.waitForDeviceAtPort("C");
console.log("Got motor C");
const motorD = await hub.waitForDeviceAtPort("D");
console.log("Got motor D");
motorA.setPower(30);
motorB.setPower(30);
motorC.setPower(30);
motorD.setPower(30);
hub.on("disconnect", () => {
console.log("Hub disconnected");
});
});

View File

@ -1,138 +0,0 @@
/*
*
* This demonstrates connecting multiple hubs to your laptop. Once connected, all the hubs LED lights will cycle through the same colors simultaneously.
*
*/
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning for hubs
console.log("Looking for Hubs...");
poweredUP.on("discover", async (hub) => { // Wait to discover hubs
await hub.connect(); // Connect to hub
console.log(`Connected to ${hub.name}!`);
hub.on("attach", async (device) => {
console.log(`Attached device ${device.type} to ${device.port}`)
device.on("detach", () => {
console.log(`Detached device ${device.type} from ${device.port}`);
});
if ((
device instanceof PoweredUP.SimpleMediumLinearMotor ||
device instanceof PoweredUP.TrainMotor ||
device instanceof PoweredUP.MediumLinearMotor ||
device instanceof PoweredUP.TechnicLargeLinearMotor ||
device instanceof PoweredUP.TechnicXLargeLinearMotor
) && hub.type === PoweredUP.Consts.HubType.WEDO2_SMART_HUB) {
const motor = device;
motor.on("rotate", (angle) => {
console.log(`Rotate ${angle}`);
});
motor.setPower(40);
await hub.sleep(2000);
motor.setPower(0);
await hub.sleep(2000);
motor.setPower(-40);
await hub.sleep(2000);
motor.setPower(0);
await hub.sleep(2000);
motor.setPower(20);
}
if ((
// device instanceof PoweredUP.MoveHubMediumLinearMotor ||
device instanceof PoweredUP.MediumLinearMotor ||
device instanceof PoweredUP.TechnicLargeLinearMotor ||
device instanceof PoweredUP.TechnicXLargeLinearMotor
) && hub.type !== PoweredUP.Consts.HubType.WEDO2_SMART_HUB) {
const motor = device;
motor.on("rotate", (angle) => {
console.log(`Rotate ${angle}`);
});
await motor.rotateByAngle(900, 50);
await motor.rotateByAngle(900, -50);
await motor.rotateByAngle(900, 50);
await motor.rotateByAngle(900, -50);
motor.setPower(20);
}
if (
device instanceof PoweredUP.SimpleMediumLinearMotor ||
device instanceof PoweredUP.TrainMotor
) {
const motor = device;
motor.setPower(20);
await hub.sleep(1000);
motor.setPower(40);
await hub.sleep(1000);
motor.setPower(60);
await hub.sleep(1000);
motor.setPower(80);
await hub.sleep(1000);
motor.setPower(100);
await hub.sleep(1000);
motor.setPower(60);
await hub.sleep(1000);
motor.setPower(20);
}
if (
device instanceof PoweredUP.Light
) {
const lights = device;
lights.setBrightness(100);
await hub.sleep(1000);
lights.setBrightness(0);
await hub.sleep(1000);
lights.setBrightness(100);
await hub.sleep(1000);
lights.setBrightness(0);
await hub.sleep(1000);
lights.setBrightness(100);
}
if (device instanceof PoweredUP.ColorDistanceSensor) {
const sensor = device;
sensor.on("distance", (distance) => {
console.log(`Distance ${distance}`);
});
// sensor.on("color", (color) => {
// console.log(`Color ${color}`);
// });
}
if (device instanceof PoweredUP.MotionSensor) {
const sensor = device;
sensor.on("distance", (distance) => {
console.log(`Distance ${distance}`);
});
}
if (device instanceof PoweredUP.TiltSensor) {
const sensor = device;
sensor.on("tilt", (x, y) => {
console.log(`Tilt ${x} ${y}`);
});
}
});
hub.on("disconnect", () => {
console.log("Hub disconnected");
})
});

View File

@ -1,143 +0,0 @@
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP()
const trains = [
{
name: "Maersk Intermodal",
color: PoweredUP.Consts.Color.LIGHT_BLUE,
hubs: [
{
name: "NK_Maersk",
ports: ["A"]
}
]
},
{
name: "Horizon Express",
color: PoweredUP.Consts.Color.ORANGE,
hubs: [
{
name: "NK_Horizon_1",
ports: ["A"],
lights: ["B"],
reverse: ["A"]
},
{
name: "NK_Horizon_2",
ports: ["A"],
lights: ["B"]
}
]
},
{
name: "Emerald Night",
color: PoweredUP.Consts.Color.GREEN,
hubs: [
{
name: "NK_Emerald",
ports: ["A"],
lights: ["B"],
reverse: ["A"]
}
]
},
{
name: "Metroliner",
color: PoweredUP.Consts.Color.WHITE,
hubs: [
{
name: "NK_Metroliner",
ports: ["A"],
lights: ["B"],
reverse: ["A"]
}
]
}
];
poweredUP.on("discover", async (hub) => {
if (hub instanceof PoweredUP.PUPRemote) {
hub.on("button", (button, state) => {
if (button === "GREEN") {
if (state === PoweredUP.Consts.ButtonState.PRESSED) {
hub._currentTrain++;
if (hub._currentTrain >= trains.length) {
hub._currentTrain = 0;
}
hub.setLEDColor(trains[hub._currentTrain].color);
const batteryLevels = [];
const train = trains[hub._currentTrain];
for (let trainHub of train.hubs) {
if (trainHub._hub) {
batteryLevels.push(`${trainHub.name}: ${trainHub._hub.batteryLevel}%`);
}
}
console.log(`Switched active train on remote ${hub.name} to ${trains[hub._currentTrain].name} (${batteryLevels.join(", ")})`);
}
} else if ((button === "LEFT" || button === "RIGHT") && state !== PoweredUP.Consts.ButtonState.RELEASED) {
trains[hub._currentTrain]._speed = trains[hub._currentTrain]._speed || 0;
if (state === PoweredUP.Consts.ButtonState.UP) {
trains[hub._currentTrain]._speed += 10;
if (trains[hub._currentTrain]._speed > 100) {
trains[hub._currentTrain]._speed = 100;
}
} else if (state === PoweredUP.Consts.ButtonState.DOWN) {
trains[hub._currentTrain]._speed -= 10;
if (trains[hub._currentTrain]._speed < -100) {
trains[hub._currentTrain]._speed = -100;
}
} else if (state === PoweredUP.Consts.ButtonState.STOP) {
trains[hub._currentTrain]._speed = 0;
}
for (let trainHub in trains[hub._currentTrain].hubs) {
trainHub = trains[hub._currentTrain].hubs[trainHub];
if (trainHub._hub) {
for (let port in trainHub.ports) {
port = trainHub.ports[port];
trainHub.reverse = trainHub.reverse || [];
trainHub._hub.setMotorSpeed(port, trainHub.reverse.indexOf(port) >= 0 ? -trains[hub._currentTrain]._speed : trains[hub._currentTrain]._speed);
}
}
}
console.log(`Set ${trains[hub._currentTrain].name} speed to ${trains[hub._currentTrain]._speed}`);
}
});
await hub.connect();
hub._currentTrain = 2;
hub.setLEDColor(trains[hub._currentTrain].color);
console.log(`Connected to Powered UP remote (${hub.name})`);
return;
}
for (let train in trains) {
train = trains[train];
for (let trainHub in train.hubs) {
trainHub = train.hubs[trainHub];
if (hub.name === trainHub.name) {
hub.on("attach", (port, type) => {
if (trainHub.lights && trainHub.lights.indexOf(port) >= 0) {
hub.setLightBrightness(port, 100);
}
});
hub.on("disconnect", () => {
console.log(`Disconnected from ${train.name} (${hub.name})`);
delete trainHub._hub;
})
await hub.connect();
trainHub._hub = hub;
hub.setLEDColor(train.color);
console.log(`Connected to ${train.name} (${hub.name})`);
}
}
}
});
poweredUP.scan(); // Start scanning for trains
console.log("Looking for trains...");

View File

@ -1,59 +0,0 @@
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning for trains
// Change these to make the train behave as you want
const STATION_STOP_COLOR = PoweredUP.Consts.Color.RED;
const TRAIN_SPEED = 55;
const STOPPING_SPEED = 4000;
const STOP_DELAY = 6000;
const LOOPS_WITHOUT_STOPPING = 3;
const TRAIN_MOTOR_PORT = "A";
let currentSpeed = 0;
let currentLoop = 0;
console.log("Looking for trains...");
poweredUP.on("discover", async (hub) => { // Wait to discover a train
let sensing = true;
await hub.connect(); // Connect to train
console.log(`Connected to ${hub.name}!`);
await hub.sleep(2000); // Wait two seconds before starting the train
hub.setMotorSpeed(TRAIN_MOTOR_PORT, TRAIN_SPEED);
currentSpeed = TRAIN_SPEED;
console.log(`Started moving ${hub.name}`);
hub.on("colorAndDistance", async (port, color, distance) => {
if (color === STATION_STOP_COLOR && distance > 5 && distance < 15 && sensing) { // If color is seen, stop the train, wait, then go again
if (currentLoop >= LOOPS_WITHOUT_STOPPING - 1) {
console.log(`Looped ${hub.name} (${currentLoop + 1})`);
console.log(`Stopping ${hub.name}`);
sensing = false;
await hub.rampMotorSpeed(TRAIN_MOTOR_PORT, currentSpeed, 0, STOPPING_SPEED);
currentSpeed = 0;
currentLoop = 0;
console.log(`Stopped ${hub.name}`);
await hub.sleep(STOP_DELAY);
console.log(`Starting ${hub.name}`);
await hub.rampMotorSpeed(TRAIN_MOTOR_PORT, currentSpeed + 10, TRAIN_SPEED, STOPPING_SPEED);
currentSpeed = TRAIN_SPEED;
await hub.sleep(2000);
sensing = true;
} else {
console.log(`Looped ${hub.name} (${currentLoop + 1})`);
sensing = false;
currentLoop++;
await hub.sleep(2000);
sensing = true;
}
}
});
});

View File

@ -1,64 +0,0 @@
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning for trains
// Change these to make the train behave as you want
const FORWARD_DIRECTION_COLOR = PoweredUP.Consts.Color.YELLOW;
const BACKWARDS_DIRECTION_COLOR = PoweredUP.Consts.Color.RED;
const TRAIN_SPEED = 40;
const STOPPING_SPEED = 2000;
const STOP_DELAY = 2000;
const TRAIN_MOTOR_PORT = "A";
let currentSpeed = 0;
console.log("Looking for trains...");
poweredUP.on("discover", async (hub) => { // Wait to discover a train
let moving = true;
await hub.connect(); // Connect to train
console.log(`Connected to ${hub.name}!`);
await hub.sleep(2000); // Wait two seconds before starting the train
hub.setMotorSpeed(TRAIN_MOTOR_PORT, TRAIN_SPEED);
currentSpeed = TRAIN_SPEED;
console.log("Started moving");
hub.on("color", async (port, color) => {
if (color === FORWARD_DIRECTION_COLOR && moving) { // If yellow is seen, stop the train, wait seconds, and reverse direction
console.log("Slowing down");
moving = false;
await hub.rampMotorSpeed(TRAIN_MOTOR_PORT, currentSpeed, 0, STOPPING_SPEED);
currentSpeed = 0;
console.log("Stopped");
await hub.sleep(STOP_DELAY);
console.log("Changing direction and speeding up");
await hub.rampMotorSpeed(TRAIN_MOTOR_PORT, currentSpeed + 10, TRAIN_SPEED, STOPPING_SPEED);
currentSpeed = TRAIN_SPEED;
await hub.sleep(STOPPING_SPEED + 1000);
moving = true;
} else if (color === BACKWARDS_DIRECTION_COLOR && moving) { // If red is seen, stop the train, wait seconds, and reverse direction
console.log("Slowing down");
moving = false;
await hub.rampMotorSpeed(TRAIN_MOTOR_PORT, currentSpeed, 0, STOPPING_SPEED);
currentSpeed = 0;
console.log("Stopped");
await hub.sleep(STOP_DELAY);
console.log("Changing direction and speeding up");
await hub.rampMotorSpeed(TRAIN_MOTOR_PORT, -(currentSpeed + 10), -TRAIN_SPEED, STOPPING_SPEED);
currentSpeed = -TRAIN_SPEED;
await hub.sleep(STOPPING_SPEED + 1000);
moving = true;
}
});
});

View File

@ -1,45 +0,0 @@
/*
*
* This example allows you to connect Vernie and a Powered UP Remote Control to your laptop, and enables the control of Vernie with the Remote.
*
*/
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning
console.log("Looking for Vernie...");
const Modes = {
AVOIDING: 0,
MOVING: 1
}
poweredUP.on("discover", async (hub) => { // Wait to discover Vernie and Remote
const vernie = hub;
await vernie.connect();
console.log("Connected to Vernie!");
let mode = Modes.MOVING;
vernie.setMotorSpeed("AB", 50);
vernie.on("distance", async (port, distance) => {
if (distance < 180 && mode === Modes.MOVING) {
mode = Modes.AVOIDING;
await vernie.setMotorSpeed("AB", 0, 1000);
await vernie.setMotorSpeed("AB", -20, 1000);
await vernie.setMotorSpeed("AB", 0, 1000);
vernie.setMotorSpeed("A", 30, 500);
await vernie.setMotorSpeed("B", -30, 500);
await vernie.setMotorSpeed("AB", 0, 1000);
vernie.setMotorSpeed("AB", 50);
mode = Modes.MOVING;
}
});
});

View File

@ -1,97 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Vernie / PlayStation DualShock 4 Remote Control</title>
<script src="https://cdn.jsdelivr.net/npm/node-poweredup@latest/dist/browser/poweredup.js"></script>
<link rel="stylesheet" type="text/css" href="./web_bluetooth.css" />
<script>
const poweredUP = new PoweredUP.PoweredUP();
let vernie = null;
let controller = null;
poweredUP.on("discover", async (hub) => { // Wait to discover Vernie
if (hub instanceof PoweredUP.BoostMoveHub) {
vernie = hub;
await vernie.connect();
vernie.setLEDColor(PoweredUP.Consts.Color.BLUE);
document.getElementById("color").style.backgroundColor = PoweredUP.Consts.ColorNames[PoweredUP.Consts.Color.BLUE];
console.log(`Connected to Vernie (${vernie.name})!`);
}
if (vernie && controller) {
console.log("You're now ready to go!");
}
});
const scan = function () {
if (PoweredUP.isWebBluetooth) {
poweredUP.scan(); // Start scanning for hubs
} else {
alert("Your browser does not support the Web Bluetooth specification.");
}
}
window.addEventListener("gamepadconnected", (event) => {
controller = event.gamepad;
if (!(controller.id.indexOf("54c") >= 0 && controller.id.indexOf("5c4") >= 0)) {
return;
}
console.log("Connected to PlayStation DualShock 4!");
let start = null;
let previousLeft = 0;
let previousRight = 0;
const inputLoop = async () => {
controller = navigator.getGamepads()[0];
if (vernie) {
if (controller.buttons[14].pressed) { // Move the head left when left is pressed
await vernie.setMotorAngle("D", 35, -20);
} else if (controller.buttons[15].pressed) { // Move the head right when right is pressed
await vernie.setMotorAngle("D", 35, 20);
} else if (controller.buttons[17].pressed) { // Fire when the touchpad is pressed down
await vernie.setMotorAngle("D", 80, 20);
await vernie.setMotorAngle("D", 80, -20);
}
const left = Math.floor(50 * (controller.axes[1] * -1));
const right = Math.floor(50 * (controller.axes[3] * -1));
if (left !== previousLeft || right !== previousRight) {
vernie.setMotorSpeed("AB", [left, right]); // Move tracks based on analog stick input
previousLeft = left;
previousRight = right;
}
}
start = requestAnimationFrame(inputLoop);
}
inputLoop();
if (vernie && controller) {
console.log("You're now ready to go!");
}
});
</script>
</head>
<body>
<div><h1>Vernie / PlayStation DualShock 4 Remote Control</h1></div>
<div>
<a class="button" href="#" onclick="scan();">Scan for Vernie</a>
</div>
<div id="current_color">
<span>Current Color: </span><div id="color">&nbsp;</div>
</div>
</body>
</html>

View File

@ -1,60 +0,0 @@
/*
*
* This runs the train under our Christmas tree. It uses the 10254 Winter Holiday Train retrofitted with a Powered UP hub and train motor.
* It also uses a WeDo 2.0 hub with Powered UP distance sensor to detect the train approaching the station and slow it down.
*
* Note that if you want to use this yourself you don't need to use a WeDo 2.0 hub, you can use any hub that can accept a distance or color/distance sensor.
*
* The maximum speed of the train is set to a constant 50. A further improvement can be made by scaling the speed up according to the current battery voltage,
* so the speed doesn't slow as the battery starts dying.
*
*/
const PoweredUP = require("..");
const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning for hubs
console.log("Looking for Hubs...");
let train = null;
let sensor = null;
let ramping = false;
poweredUP.on("discover", async (hub) => { // Wait to discover hubs
if (hub.name === "NK_Winter_Train") {
await hub.connect(); // Connect to hub
console.log(`Connected to train!`);
train = hub;
} else if (hub.name === "NK_Winter_Sensor") {
await hub.connect(); // Connect to hub
console.log(`Connected to sensor!`);
sensor = hub;
sensor.on("distance", (_, distance) => {
if (distance < 5 && !ramping) {
await stopTrain();
}
});
}
if (train && sensor) {
console.log("Train and sensor connected, starting!");
await startTrain();
}
});
const startTrain = async () => {
ramping = true;
await train.rampMotorSpeed("A", 0, 50, 2000);
ramping = false;
}
const stopTrain = async () => {
ramping = true;
await train.rampMotorSpeed("A", 50, 0, 2000);
}