From 92178f3371edf9a3855a6bda088c03de922aa4c0 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 13 Dec 2017 22:54:08 -0800 Subject: [PATCH] bring back speed --- libs/core/_locales/core-jsdoc-strings.json | 6 ++-- libs/core/_locales/core-strings.json | 6 ++-- libs/core/output.ts | 42 +++++++++++----------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/libs/core/_locales/core-jsdoc-strings.json b/libs/core/_locales/core-jsdoc-strings.json index 1056d98f..25e0f3b5 100644 --- a/libs/core/_locales/core-jsdoc-strings.json +++ b/libs/core/_locales/core-jsdoc-strings.json @@ -53,19 +53,21 @@ "motors.Motor.clearCount": "Clears the motor count", "motors.Motor.count": "Gets motor step count.", "motors.Motor.move": "Moves the motor by a number of rotations, degress or seconds", + "motors.Motor.move|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50", "motors.Motor.move|param|unit": "the meaning of the value", "motors.Motor.move|param|value": "the move quantity, eg: 2", - "motors.Motor.power": "Turns the motor on or off at the current speed", - "motors.Motor.power|param|on": "true if the motor should be on", "motors.Motor.reset": "Resets the motor and clears any synchronization", "motors.Motor.setBrake": "Sets the automatic brake on or off when the motor is off", "motors.Motor.setBrake|param|brake": "a value indicating if the motor should break when off", "motors.Motor.setReversed": "Reverses the motor polarity", + "motors.Motor.setSpeed": "Sets the speed of the motor.", + "motors.Motor.setSpeed|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50", "motors.Motor.speed": "Gets motor actual speed.", "motors.Motor.sync": "Synchronizes a follower motor to this motor", "motors.Motor.sync|param|follower": "the motor that follows this motor commands, eg: motors.largeC", "motors.Motor.tachoCount": "Gets motor tacho count.", "motors.Motor.turn": "Turns the motor and the follower motor by a number of rotations", + "motors.Motor.turn|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50", "motors.Motor.turn|param|turnRatio": "the ratio of power sent to the follower motor, from -200 to 200", "motors.Motor.turn|param|unit": "the meaning of the value", "motors.Motor.turn|param|value": "the move quantity, eg: 2", diff --git a/libs/core/_locales/core-strings.json b/libs/core/_locales/core-strings.json index 4e152d05..4a8cd96c 100644 --- a/libs/core/_locales/core-strings.json +++ b/libs/core/_locales/core-strings.json @@ -40,15 +40,15 @@ "control.raiseEvent|block": "raise event|from %src|with value %value", "control|block": "control", "motors.Motor.count|block": "`icons.motorLarge` %motor|count", - "motors.Motor.move|block": "move `icons.motorLarge` %motor|for %value|%unit", - "motors.Motor.power|block": "power `icons.motorLarge` %motor|%on", + "motors.Motor.move|block": "move `icons.motorLarge` %motor|for %value|%unit|at %speed|%", "motors.Motor.reset|block": "reset `icons.motorLarge` %motor", "motors.Motor.setBrake|block": "set `icons.motorLarge` %motor|brake %brake", "motors.Motor.setReversed|block": "set `icons.motorLarge` %motor|reversed %reversed", + "motors.Motor.setSpeed|block": "set speed of `icons.motorLarge` %motor|to %speed|%", "motors.Motor.speed|block": "`icons.motorLarge` %motor|speed", "motors.Motor.sync|block": "sync `icons.motorLarge` %motor|with `icons.motorLarge` %follower", "motors.Motor.tachoCount|block": "`icons.motorLarge` %motor|tacho count", - "motors.Motor.turn|block": "turn `icons.motorLarge` %motor|by %value|%unit|turn %turnRadio", + "motors.Motor.turn|block": "turn `icons.motorLarge` %motor|by %value|%unit|at %speed|% turn %turnRadio", "motors.largeMotorA|block": "large A", "motors.largeMotorB|block": "large B", "motors.largeMotorC|block": "large C", diff --git a/libs/core/output.ts b/libs/core/output.ts index 902b3b93..4a0b5126 100644 --- a/libs/core/output.ts +++ b/libs/core/output.ts @@ -91,7 +91,6 @@ namespace motors { private _large: boolean; private _initialized: boolean; - private _speed: number; private _brake: boolean; private _follower: Motor; // @@ -100,7 +99,6 @@ namespace motors { this._port = port; this._large = large; this._brake = false; - this._speed = 50; } private __init() { @@ -113,18 +111,21 @@ namespace motors { } /** - * Turns the motor on or off at the current speed - * @param on true if the motor should be on + * Sets the speed of the motor. + * @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50 */ - //% blockId=motorPower block="power `icons.motorLarge` %motor|%on" + //% blockId=motorPower block="set speed of `icons.motorLarge` %motor|to %speed|%" //% on.fieldEditor=toggleonoff //% weight=99 blockGap=8 - power(on: boolean) { - if (!this._speed || !on) { // always stop + //% speed.min=-100 speed.max=100 + setSpeed(speed: number) { + this.__init(); + speed = Math.clamp(-100, 100, speed >> 0); + if (!speed) { // always stop this.stop(); } else { - if (this._follower) this.setSpeedSync(this._speed); - else this.setSpeedSingle(this._speed); + if (this._follower) this.setSpeedSync(speed); + else this.setSpeedSingle(speed); } } @@ -149,21 +150,21 @@ namespace motors { * @param unit the meaning of the value * @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50 */ - //% blockId=motorMove block="move `icons.motorLarge` %motor|for %value|%unit" + //% blockId=motorMove block="move `icons.motorLarge` %motor|for %value|%unit|at %speed|%" //% weight=98 //% speed.min=-100 speed.max=100 - move(value: number, unit: MoveUnit) { - this.output(value, unit, 0); + move(value: number, unit: MoveUnit, speed: number) { + this.output(value, unit, speed, 0); } - private output(value: number, unit: MoveUnit, turnRatio: number) { + private output(value: number, unit: MoveUnit, speed: number, turnRatio: number) { this.__init(); - if (!this._speed) { + speed = Math.clamp(-100, 100, speed >> 0); + if (!speed) { this.stop(); return; } turnRatio = Math.clamp(-200, 200, turnRatio >> 0); - let useSteps: boolean; let stepsOrTime: number; switch (unit) { @@ -185,7 +186,7 @@ namespace motors { syncMotors(this._port | this._follower._port, { useSteps: useSteps, stepsOrTime: stepsOrTime, - speed: this._speed, + speed: speed, turnRatio: turnRatio, useBrake: this._brake }) @@ -195,7 +196,7 @@ namespace motors { step1: 0, step2: stepsOrTime, step3: 0, - speed: this._speed, + speed: speed, useBrake: this._brake }) } @@ -218,6 +219,7 @@ namespace motors { //% brake.fieldEditor=toggleonoff //% weight=60 blockGap=8 setBrake(brake: boolean) { + this.__init(); this._brake = brake; } @@ -312,11 +314,11 @@ namespace motors { * @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50 * @param turnRatio the ratio of power sent to the follower motor, from -200 to 200 */ - //% blockId=motorTurn block="turn `icons.motorLarge` %motor|by %value|%unit|turn %turnRadio" + //% blockId=motorTurn block="turn `icons.motorLarge` %motor|by %value|%unit|at %speed|% turn %turnRadio" //% weight=9 blockGap=8 //% turnRatio.min=-200 turnRatio=200 - turn(value: number, unit: MoveUnit, turnRatio: number) { - this.output(value, unit, turnRatio); + turn(value: number, unit: MoveUnit, speed: number, turnRatio: number) { + this.output(value, unit, speed, turnRatio); } }