diff --git a/libs/core/_locales/core-jsdoc-strings.json b/libs/core/_locales/core-jsdoc-strings.json index 8ce7b254..fe939df5 100644 --- a/libs/core/_locales/core-jsdoc-strings.json +++ b/libs/core/_locales/core-jsdoc-strings.json @@ -21,7 +21,7 @@ "input": "Respond to and read data from buttons and sensors.", "input.Button": "Generic button class, for device buttons and sensors.", "input.Button.isPressed": "Check if button is currently pressed or not.", - "input.Button.onEvent": "Do something when a button or sensor is clicked, double clicked, etc...", + "input.Button.onEvent": "Do something when a button or sensor is clicked, up or down.", "input.Button.onEvent|param|body": "code to run when the event is raised", "input.Button.wasPressed": "See if the button was pressed again since the last time you checked.", "input.ColorSensor.ambientLight": "Get current ambient light value from the color sensor.", @@ -36,6 +36,10 @@ "input.InfraredSensor.onObjectNear|param|handler": "the code to run when detected", "input.InfraredSensor.proximity": "Get the promixity measured by the infrared sensor, from ``0`` (close) to ``100`` (far)", "input.InfraredSensor.remoteCommand": "Get the remote commandreceived the infrared sensor.", + "input.RemoteInfraredBeaconButton.isPressed": "Check if a remote button is currently pressed or not.", + "input.RemoteInfraredBeaconButton.onEvent": "Do something when a button or sensor is clicked, up or down", + "input.RemoteInfraredBeaconButton.onEvent|param|body": "code to run when the event is raised", + "input.RemoteInfraredBeaconButton.wasPressed": "See if the remote button was pressed again since the last time you checked.", "input.TouchSensor.isTouched": "Check if touch sensor is touched.", "input.TouchSensor.onEvent": "Do something when a touch sensor is touched...", "input.TouchSensor.onEvent|param|body": "code to run when the event is raised", @@ -47,11 +51,11 @@ "input.buttonLeft": "Left button on the EV3 Brick.", "input.buttonRight": "Right button on the EV3 Brick.", "input.buttonUp": "Up button on the EV3 Brick.", - "input.remoteBottomLeft": "Remote bottom-left button.", - "input.remoteBottomRight": "Remote bottom-right button.", - "input.remoteCenter": "Remote beacon (center) button.", - "input.remoteTopLeft": "Remote top-left button.", - "input.remoteTopRight": "Remote top-right button.", + "input.remoteButtonBottomLeft": "Remote bottom-left button.", + "input.remoteButtonBottomRight": "Remote bottom-right button.", + "input.remoteButtonCenter": "Remote beacon (center) button.", + "input.remoteButtonTopLeft": "Remote top-left button.", + "input.remoteButtonTopRight": "Remote top-right button.", "output.Motor.off": "Power off the motor.", "output.Motor.on": "Power on the motor.", "output.Motor.onForTime": "Power on the motor for a specified number of milliseconds.", diff --git a/libs/core/_locales/core-strings.json b/libs/core/_locales/core-strings.json index 363812af..2c9edca4 100644 --- a/libs/core/_locales/core-strings.json +++ b/libs/core/_locales/core-strings.json @@ -44,6 +44,9 @@ "input.InfraredSensor.onObjectNear|block": "on %sensor|object near", "input.InfraredSensor.proximity|block": "%infrared|proximity", "input.InfraredSensor.remoteCommand|block": "%infrared|remote command", + "input.RemoteInfraredBeaconButton.isPressed|block": "%button|is pressed", + "input.RemoteInfraredBeaconButton.onEvent|block": "on %button|%event", + "input.RemoteInfraredBeaconButton.wasPressed|block": "%button|was pressed", "input.TouchSensor.isTouched|block": "%sensor|is touched", "input.TouchSensor.onEvent|block": "on %sensor|%event", "input.UltraSonicSensor.distance|block": "%sensor|distance", @@ -65,11 +68,11 @@ "input.infraredSensor2|block": "infrared sensor 2", "input.infraredSensor3|block": "infrared sensor 3", "input.infraredSensor4|block": "infrared sensor 4", - "input.remoteBottomLeft|block": "remote bottom-left", - "input.remoteBottomRight|block": "remote bottom-right", - "input.remoteCenter|block": "remote center", - "input.remoteTopLeft|block": "remote top-left", - "input.remoteTopRight|block": "remote top-right", + "input.remoteButtonBottomLeft|block": "remote button bottom-left", + "input.remoteButtonBottomRight|block": "remote button bottom-right", + "input.remoteButtonCenter|block": "remote button center", + "input.remoteButtonTopLeft|block": "remote button top-left", + "input.remoteButtonTopRight|block": "remote button top-right", "input.touchSensor1|block": "touch sensor 1", "input.touchSensor2|block": "touch sensor 2", "input.touchSensor3|block": "touch sensor 3", @@ -106,6 +109,7 @@ "{id:group}Gyro Sensor": "Gyro Sensor", "{id:group}Infrared Sensor": "Infrared Sensor", "{id:group}Motors": "Motors", + "{id:group}Remote Infrared Beacon": "Remote Infrared Beacon", "{id:group}Touch Sensor": "Touch Sensor", "{id:group}Ultrasonic Sensor": "Ultrasonic Sensor" } \ No newline at end of file diff --git a/libs/core/buttons.ts b/libs/core/buttons.ts index c2c84cbe..75fe9477 100644 --- a/libs/core/buttons.ts +++ b/libs/core/buttons.ts @@ -65,7 +65,7 @@ namespace input { } //% hidden - update(curr: boolean) { + _update(curr: boolean) { if (this._isPressed == curr) return this._isPressed = curr if (curr) { @@ -112,7 +112,7 @@ namespace input { } /** - * Do something when a button or sensor is clicked, double clicked, etc... + * Do something when a button or sensor is clicked, up or down. * @param button the button that needs to be clicked or used * @param event the kind of button gesture that needs to be detected * @param body code to run when the event is raised @@ -159,7 +159,7 @@ namespace input { if (curr & DAL.BUTTON_ID_ESCAPE) control.reset() for (let b of buttons) - b.update(!!(curr & b.mask)) + b._update(!!(curr & b.mask)) }) control.dmesg("runtime started, " + control.deviceFirmwareVersion()) } diff --git a/libs/core/ir.ts b/libs/core/ir.ts index 08624987..837d01bb 100644 --- a/libs/core/ir.ts +++ b/libs/core/ir.ts @@ -40,17 +40,17 @@ namespace input { } } - let buttons: Button[] + let buttons: RemoteInfraredBeaconButton[] function create(ir: InfraredSensor) { // it's created by referencing it } - export function irButton(id: IrRemoteButton) { + export function irButton(id: IrRemoteButton): RemoteInfraredBeaconButton { if (buttons == null) { buttons = [] for (let i = 0; i < 5; ++i) { - buttons.push(new Button()) + buttons.push(new RemoteInfraredBeaconButton(new Button())) } // make sure sensors are up @@ -68,6 +68,65 @@ namespace input { num = Math.clamp(0, buttons.length - 1, num) return buttons[num] } + + //% fixedInstances + export class RemoteInfraredBeaconButton extends control.Component { + private button: Button; + constructor(button: Button) { + super(); + this.button = button; + } + + _update(curr: boolean) { + this.button._update(curr); + } + + /** + * Check if a remote button is currently pressed or not. + * @param button the remote button to query the request + */ + //% help=input/remote-infrared-beacon/is-pressed + //% block="%button|is pressed" + //% blockId=remoteButtonIsPressed + //% parts="remote" + //% blockNamespace=input + //% weight=81 blockGap=8 + //% group="Remote Infrared Beacon" + isPressed() { + return this.button.isPressed(); + } + + /** + * See if the remote button was pressed again since the last time you checked. + * @param button the remote button to query the request + */ + //% help=input/remote-infrared-beacon/was-pressed + //% block="%button|was pressed" + //% blockId=remotebuttonWasPressed + //% parts="remote" + //% blockNamespace=input + //% weight=80 blockGap=8 + //% group="Remote Infrared Beacon" + wasPressed() { + return this.button.wasPressed(); + } + + /** + * Do something when a button or sensor is clicked, up or down + * @param button the button that needs to be clicked or used + * @param event the kind of button gesture that needs to be detected + * @param body code to run when the event is raised + */ + //% help=input/remote-infrared-beacon/on-event + //% blockId=remotebuttonEvent block="on %button|%event" + //% parts="remote" + //% blockNamespace=input + //% weight=99 blockGap=8 + //% group="Remote Infrared Beacon" + onEvent(ev: ButtonEvent, body: () => void) { + this.button.onEvent(ev, body); + } + } //% fixedInstances export class InfraredSensor extends internal.UartSensor { @@ -100,7 +159,7 @@ namespace input { if (this.mode == IrSensorMode.RemoteControl) { for (let i = 0; i < buttons.length; ++i) { let v = !!(curr & (1 << i)) - buttons[i].update(v) + buttons[i]._update(v) } } else { if (curr) @@ -194,33 +253,34 @@ namespace input { //% fixedInstance whenUsed block="infrared sensor 4" export const infraredSensor4: InfraredSensor = new InfraredSensor(4) - /** - * Remote top-left button. - */ - //% whenUsed block="remote top-left" weight=95 fixedInstance - export const remoteTopLeft = irButton(IrRemoteButton.TopLeft) - - /** - * Remote top-right button. - */ - //% whenUsed block="remote top-right" weight=95 fixedInstance - export const remoteTopRight = irButton(IrRemoteButton.TopRight) - - /** - * Remote bottom-left button. - */ - //% whenUsed block="remote bottom-left" weight=95 fixedInstance - export const remoteBottomLeft = irButton(IrRemoteButton.BottomLeft) - - /** - * Remote bottom-right button. - */ - //% whenUsed block="remote bottom-right" weight=95 fixedInstance - export const remoteBottomRight = irButton(IrRemoteButton.BottomRight) /** * Remote beacon (center) button. */ - //% whenUsed block="remote center" weight=95 fixedInstance - export const remoteCenter = irButton(IrRemoteButton.CenterBeacon) + //% whenUsed block="remote button center" weight=95 fixedInstance + export const remoteButtonCenter = irButton(IrRemoteButton.CenterBeacon) + + /** + * Remote top-left button. + */ + //% whenUsed block="remote button top-left" weight=95 fixedInstance + export const remoteButtonTopLeft = irButton(IrRemoteButton.TopLeft) + + /** + * Remote top-right button. + */ + //% whenUsed block="remote button top-right" weight=95 fixedInstance + export const remoteButtonTopRight = irButton(IrRemoteButton.TopRight) + + /** + * Remote bottom-left button. + */ + //% whenUsed block="remote button bottom-left" weight=95 fixedInstance + export const remoteButtonBottomLeft = irButton(IrRemoteButton.BottomLeft) + + /** + * Remote bottom-right button. + */ + //% whenUsed block="remote button bottom-right" weight=95 fixedInstance + export const remoteButtonBottomRight = irButton(IrRemoteButton.BottomRight) } diff --git a/libs/core/ns.ts b/libs/core/ns.ts index 7d1eea57..ee9b5613 100644 --- a/libs/core/ns.ts +++ b/libs/core/ns.ts @@ -1,5 +1,5 @@ //% color="#B4009E" weight=98 icon="\uf192" -//% groups='["Brick", "Touch Sensor", "Color Sensor", "Ultrasonic Sensor", "Infrared Sensor", "Remote", "Gyro Sensor"]' +//% groups='["Brick", "Touch Sensor", "Color Sensor", "Ultrasonic Sensor", "Infrared Sensor", "Remote Infrared Beacon", "Gyro Sensor"]' namespace input { } diff --git a/libs/core/test.ts b/libs/core/test.ts index 0e4833b9..6be67450 100644 --- a/libs/core/test.ts +++ b/libs/core/test.ts @@ -36,12 +36,12 @@ input.touchSensor1.onEvent(TouchSensorEvent.Bumped, () => { num++ }) -input.remoteTopLeft.onEvent(ButtonEvent.Click, () => { +input.remoteButtonTopLeft.onEvent(ButtonEvent.Click, () => { screen.print("TOPLEFT " + num, 10, 60) num++ }) -input.remoteTopRight.onEvent(ButtonEvent.Down, () => { +input.remoteButtonTopRight.onEvent(ButtonEvent.Down, () => { screen.print("TOPRIGH " + num, 10, 60) num++ }) diff --git a/libs/core/touch.ts b/libs/core/touch.ts index e45e42af..626f438f 100644 --- a/libs/core/touch.ts +++ b/libs/core/touch.ts @@ -28,7 +28,7 @@ namespace input { } _update(prev: number, curr: number) { - this.button.update(curr > 0) + this.button._update(curr > 0) } _deviceType() {