From 951b9be6e40f9b30c09d7c646b33beae1484adb3 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 10 Jan 2018 11:14:18 -0800 Subject: [PATCH 1/4] fixing motors --- libs/core/output.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/core/output.ts b/libs/core/output.ts index 3be020a4..90028164 100644 --- a/libs/core/output.ts +++ b/libs/core/output.ts @@ -216,10 +216,16 @@ namespace motors { setSpeed(speed: number, value: number = 0, unit: MoveUnit = MoveUnit.MilliSeconds) { this.init(); speed = Math.clamp(-100, 100, speed >> 0); + // stop if speed is 0 if (!speed) { this.stop(); return; } + // special: 0 is infinity + if (value == 0) { + this._setSpeed(speed); + return; + } let useSteps: boolean; let stepsOrTime: number; switch (unit) { From 9912d68c8b9a8d6d0f3c1ef35110ef63b06cd339 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 10 Jan 2018 11:14:25 -0800 Subject: [PATCH 2/4] fixing chassis --- .../_locales/chassis-jsdoc-strings.json | 5 +---- libs/chassis/_locales/chassis-strings.json | 1 - libs/chassis/chassis.ts | 19 +++---------------- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/libs/chassis/_locales/chassis-jsdoc-strings.json b/libs/chassis/_locales/chassis-jsdoc-strings.json index 95696473..c9a373d5 100644 --- a/libs/chassis/_locales/chassis-jsdoc-strings.json +++ b/libs/chassis/_locales/chassis-jsdoc-strings.json @@ -1,12 +1,9 @@ { "chassis.Chassis": "A differential drive robot", "chassis.Chassis.drive": "Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s)\nusing a unicycle model.", - "chassis.Chassis.driveFor": "Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s)\nusing a unicycle model.", - "chassis.Chassis.driveFor|param|rotationSpeed": "rotation of the robot around the center point, eg: 30", - "chassis.Chassis.driveFor|param|speed": "speed of the center point between motors, eg: 10", - "chassis.Chassis.driveFor|param|value": "the amount of movement, eg: 2", "chassis.Chassis.drive|param|rotationSpeed": "rotation of the robot around the center point, eg: 30", "chassis.Chassis.drive|param|speed": "speed of the center point between motors, eg: 10", + "chassis.Chassis.drive|param|value": "the amount of movement, eg: 2", "chassis.Chassis.setMotors": "Sets the motors used by the chassis, default is B+C", "chassis.Chassis.setProperty": "Sets a property of the robot", "chassis.Chassis.setProperty|param|property": "the property to set", diff --git a/libs/chassis/_locales/chassis-strings.json b/libs/chassis/_locales/chassis-strings.json index 45b84814..3ca1aed1 100644 --- a/libs/chassis/_locales/chassis-strings.json +++ b/libs/chassis/_locales/chassis-strings.json @@ -1,7 +1,6 @@ { "ChassisProperty.BaseLength|block": "base length (cm)", "ChassisProperty.WheelRadius|block": "wheel radius (cm)", - "chassis.Chassis.driveFor|block": "drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s|for %value|%unit", "chassis.Chassis.drive|block": "drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s", "chassis.Chassis.setMotors|block": "set %chassis|motors to %motors", "chassis.Chassis.setProperty|block": "set %chassis|%property|to %value", diff --git a/libs/chassis/chassis.ts b/libs/chassis/chassis.ts index 845cbb7c..03155949 100644 --- a/libs/chassis/chassis.ts +++ b/libs/chassis/chassis.ts @@ -24,19 +24,6 @@ namespace chassis { this.baseLength = 12; } - /** - * Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s) - * using a unicycle model. - * @param speed speed of the center point between motors, eg: 10 - * @param rotationSpeed rotation of the robot around the center point, eg: 30 - */ - //% blockId=motorDrive block="drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s" - //% inlineInputMode=inline - //% weight=99 blockGap=8 - drive(speed: number, rotationSpeed: number) { - this.driveFor(speed, rotationSpeed, 0, MoveUnit.Degrees); - } - /** * Makes a differential drive robot move with a given speed (cm/s) and rotation rate (deg/s) * using a unicycle model. @@ -45,10 +32,10 @@ namespace chassis { * @param value the amount of movement, eg: 2 * @param unit */ - //% blockId=motorDriveFor block="drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s|for %value|%unit" + //% blockId=motorDrive block="drive %chassis|at %speed|cm/s|turning %rotationSpeed|deg/s" //% inlineInputMode=inline //% weight=95 blockGap=8 - driveFor(speed: number, rotationSpeed: number, value: number, unit: MoveUnit) { + drive(speed: number, rotationSpeed: number, value: number = 0, unit: MoveUnit = MoveUnit.MilliSeconds) { // speed is expressed in % const R = this.wheelRadius; // cm const L = this.baseLength; // cm @@ -65,7 +52,7 @@ namespace chassis { const sr = vr / maxw * 100; // % const sl = vl / maxw * 100; // % - this.motors.tankFor(sr, sl, value, unit) + this.motors.tank(sr, sl, value, unit) } /** From b9f5096480316ecc4b93e010b719a0c3877cd8ac Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 10 Jan 2018 11:29:27 -0800 Subject: [PATCH 3/4] pause until motor measured move is done --- libs/core/output.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/core/output.ts b/libs/core/output.ts index 90028164..ab55eacb 100644 --- a/libs/core/output.ts +++ b/libs/core/output.ts @@ -226,6 +226,7 @@ namespace motors { this._setSpeed(speed); return; } + // timed motor moves let useSteps: boolean; let stepsOrTime: number; switch (unit) { @@ -248,6 +249,8 @@ namespace motors { } this._move(useSteps, stepsOrTime, speed); + // wait till motor is done with this work + this.pauseUntilReady(); } /** From e61dffff034c914239f15b64e5f17368411bcf23 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 10 Jan 2018 11:45:08 -0800 Subject: [PATCH 4/4] fixing threshold --- libs/color-sensor/_locales/color-sensor-strings.json | 2 +- libs/color-sensor/color.ts | 3 ++- libs/infrared-sensor/_locales/infrared-sensor-strings.json | 2 +- libs/infrared-sensor/ir.ts | 3 ++- libs/ultrasonic-sensor/_locales/ultrasonic-sensor-strings.json | 2 +- libs/ultrasonic-sensor/ultrasonic.ts | 3 ++- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libs/color-sensor/_locales/color-sensor-strings.json b/libs/color-sensor/_locales/color-sensor-strings.json index cb650083..c7eaad2e 100644 --- a/libs/color-sensor/_locales/color-sensor-strings.json +++ b/libs/color-sensor/_locales/color-sensor-strings.json @@ -19,7 +19,7 @@ "sensors.ColorSensor.onLightChanged|block": "on %sensor|%mode|%condition", "sensors.ColorSensor.pauseForColor|block": "pause %sensor|for color %color", "sensors.ColorSensor.pauseForLight|block": "pause %sensor|for %mode|%condition", - "sensors.ColorSensor.setThreshold|block": "set %condition|to %value", + "sensors.ColorSensor.setThreshold|block": "set %sensor|%condition|to %value", "sensors.color1|block": "color 1", "sensors.color2|block": "color 2", "sensors.color3|block": "color 3", diff --git a/libs/color-sensor/color.ts b/libs/color-sensor/color.ts index f6590e9f..9886689e 100644 --- a/libs/color-sensor/color.ts +++ b/libs/color-sensor/color.ts @@ -227,8 +227,9 @@ namespace sensors { * @param condition the dark or bright light condition * @param value the value threshold */ - //% blockId=colorSetThreshold block="set %condition|to %value" + //% blockId=colorSetThreshold block="set %sensor|%condition|to %value" //% group="Threshold" blockGap=8 weight=90 + //% value.min=0 value.max=100 setThreshold(condition: LightCondition, value: number) { if (condition == LightCondition.Dark) this.thresholdDetector.setLowThreshold(value) diff --git a/libs/infrared-sensor/_locales/infrared-sensor-strings.json b/libs/infrared-sensor/_locales/infrared-sensor-strings.json index 1d53da6d..b00bc03f 100644 --- a/libs/infrared-sensor/_locales/infrared-sensor-strings.json +++ b/libs/infrared-sensor/_locales/infrared-sensor-strings.json @@ -5,7 +5,7 @@ "sensors.InfraredSensor.pauseUntil|block": "pause until %sensor| %event", "sensors.InfraredSensor.proximity|block": "%sensor|proximity", "sensors.InfraredSensor.remoteCommand|block": "%sensor|remote command", - "sensors.InfraredSensor.setThreshold|block": "set %condition|to %value", + "sensors.InfraredSensor.setThreshold|block": "set %sensor|%condition|to %value", "sensors.RemoteInfraredBeaconButton.isPressed|block": "%button|is pressed", "sensors.RemoteInfraredBeaconButton.onEvent|block": "on %button|%event", "sensors.RemoteInfraredBeaconButton.wasPressed|block": "%button|was pressed", diff --git a/libs/infrared-sensor/ir.ts b/libs/infrared-sensor/ir.ts index 79da5f07..17426c68 100644 --- a/libs/infrared-sensor/ir.ts +++ b/libs/infrared-sensor/ir.ts @@ -257,8 +257,9 @@ namespace sensors { * @param condition the dark or bright light condition * @param value the value threshold */ - //% blockId=irSetThreshold block="set %condition|to %value" + //% blockId=irSetThreshold block="set %sensor|%condition|to %value" //% group="Threshold" blockGap=8 + //% value.min=0 value.max=100 setThreshold(condition: InfraredSensorEvent, value: number) { if (condition == InfraredSensorEvent.ObjectNear) this.proximityThreshold.setLowThreshold(value) diff --git a/libs/ultrasonic-sensor/_locales/ultrasonic-sensor-strings.json b/libs/ultrasonic-sensor/_locales/ultrasonic-sensor-strings.json index d5ffd898..8059b245 100644 --- a/libs/ultrasonic-sensor/_locales/ultrasonic-sensor-strings.json +++ b/libs/ultrasonic-sensor/_locales/ultrasonic-sensor-strings.json @@ -5,7 +5,7 @@ "sensors.UltraSonicSensor.distance|block": "%sensor|distance", "sensors.UltraSonicSensor.onEvent|block": "on %sensor|%event", "sensors.UltraSonicSensor.pauseUntil|block": "pause until %sensor| %event", - "sensors.UltraSonicSensor.setThreshold|block": "set %condition|to %value", + "sensors.UltraSonicSensor.setThreshold|block": "set %sensor|%condition|to %value", "sensors.ultrasonic1|block": "ultrasonic 1", "sensors.ultrasonic2|block": "ultrasonic 2", "sensors.ultrasonic3|block": "ultrasonic 3", diff --git a/libs/ultrasonic-sensor/ultrasonic.ts b/libs/ultrasonic-sensor/ultrasonic.ts index fa879b04..906ba98d 100644 --- a/libs/ultrasonic-sensor/ultrasonic.ts +++ b/libs/ultrasonic-sensor/ultrasonic.ts @@ -92,8 +92,9 @@ namespace sensors { * @param condition the dark or bright light condition * @param value the value threshold */ - //% blockId=ultrasonicSetThreshold block="set %condition|to %value" + //% blockId=ultrasonicSetThreshold block="set %sensor|%condition|to %value" //% group="Threshold" blockGap=8 + //% value.min=0 value.max=255 setThreshold(condition: UltrasonicSensorEvent, value: number) { switch(condition) { case UltrasonicSensorEvent.ObjectNear: this.promixityThreshold.setLowThreshold(value); break;