59 lines
2.0 KiB
JavaScript
59 lines
2.0 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
});
|
|
|
|
}); |