pxt-ev3/libs/touch-sensor/touch.ts

117 lines
3.8 KiB
TypeScript
Raw Normal View History

2017-10-25 00:58:47 +02:00
// keep TouchSensorEvent in sync with ButtonEvent
/**
* Touch sensor interactions
*/
const enum TouchSensorEvent {
2017-10-25 06:55:37 +02:00
//% block="pressed"
Pressed = 4,
2017-10-25 00:58:47 +02:00
//% block="bumped"
Bumped = 1,
//% block="released"
Released = 3,
}
2017-10-28 18:13:02 +02:00
namespace sensors {
//% fixedInstances
2017-07-10 12:37:14 +02:00
export class TouchSensor extends internal.AnalogSensor {
2017-10-28 18:13:02 +02:00
private button: brick.Button;
2017-07-10 12:37:14 +02:00
2017-10-24 20:58:52 +02:00
constructor(port: number) {
super(port)
2017-10-28 18:13:02 +02:00
this.button = new brick.Button();
2017-07-10 12:37:14 +02:00
}
_query() {
return this._readPin6() > 2500 ? 1 : 0
}
_update(prev: number, curr: number) {
2017-10-27 06:10:37 +02:00
this.button._update(curr > 0)
2017-07-10 12:37:14 +02:00
}
2017-07-10 13:47:00 +02:00
_deviceType() {
return DAL.DEVICE_TYPE_TOUCH
2017-07-10 13:47:00 +02:00
}
2017-07-10 12:37:14 +02:00
2017-10-25 00:58:47 +02:00
/**
* Do something when a touch sensor is touched...
* @param sensor the touch sensor 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/touch-sensor/on-event
2017-11-16 21:58:37 +01:00
//% blockId=touchEvent block="on `icons.touchSensor` %sensor|%event"
2017-10-25 00:58:47 +02:00
//% parts="touch"
2017-12-07 07:34:11 +01:00
//% sensor.fieldEditor="imagedropdown"
//% sensor.fieldOptions.columns=4
2017-10-28 18:13:02 +02:00
//% blockNamespace=sensors
2017-10-25 00:58:47 +02:00
//% weight=99 blockGap=8
//% group="Touch Sensor"
2017-10-25 00:58:47 +02:00
onEvent(ev: TouchSensorEvent, body: () => void) {
this.button.onEvent(<ButtonEvent><number>ev, body)
}
2017-11-16 21:58:37 +01:00
2017-11-30 19:05:00 +01:00
/**
* Wait until the touch sensor is touched
* @param sensor the touch sensor that needs to be clicked or used
* @param event the kind of button gesture that needs to be detected
*/
//% help=input/touch-sensor/wait-until
//% blockId=touchWaitUntil block="wait until `icons.touchSensor` %sensor|%event"
//% parts="touch"
2017-12-07 07:34:11 +01:00
//% sensor.fieldEditor="imagedropdown"
//% sensor.fieldOptions.columns=4
2017-11-30 19:05:00 +01:00
//% blockNamespace=sensors
//% weight=98 blockGap=8
//% group="Touch Sensor"
waitUntil(ev: TouchSensorEvent) {
this.button.waitUntil(<ButtonEvent><number>ev);
}
2017-11-16 21:58:37 +01:00
/**
* Check if touch sensor is touched.
* @param sensor the port to query the request
*/
//% help=input/touch-sensor/is-pressed
//% block="`icons.touchSensor` %sensor|is pressed"
//% blockId=touchIsPressed
2017-11-16 21:58:37 +01:00
//% parts="touch"
2017-12-07 07:34:11 +01:00
//% sensor.fieldEditor="imagedropdown"
//% sensor.fieldOptions.columns=4
2017-11-16 21:58:37 +01:00
//% blockNamespace=sensors
//% weight=81 blockGap=8
//% group="Touch Sensor"
isPressed() {
2017-11-16 21:58:37 +01:00
return this.button.isPressed();
}
/**
* Check if touch sensor is touched since it was last checked.
* @param sensor the port to query the request
*/
//% help=input/touch-sensor/was-pressed
//% block="`icons.touchSensor` %sensor|was pressed"
//% blockId=touchWasPressed
//% parts="touch"
2017-12-07 07:34:11 +01:00
//% sensor.fieldEditor="imagedropdown"
//% sensor.fieldOptions.columns=4
//% blockNamespace=sensors
//% weight=81 blockGap=8
//% group="Touch Sensor"
wasPressed() {
return this.button.wasPressed();
}
2017-10-25 00:58:47 +02:00
}
2017-10-24 20:58:52 +02:00
2017-12-07 07:34:11 +01:00
//% whenUsed block="1" weight=95 fixedInstance jres=icons.port1
2017-10-25 00:58:47 +02:00
export const touchSensor1: TouchSensor = new TouchSensor(1)
2017-12-07 07:34:11 +01:00
//% whenUsed block="2" weight=95 fixedInstance jres=icons.port2
2017-10-25 00:58:47 +02:00
export const touchSensor2: TouchSensor = new TouchSensor(2)
2017-12-07 07:34:11 +01:00
//% whenUsed block="3" weight=95 fixedInstance jres=icons.port3
2017-10-25 00:58:47 +02:00
export const touchSensor3: TouchSensor = new TouchSensor(3)
2017-12-07 07:34:11 +01:00
//% whenUsed block="4" weight=95 fixedInstance jres=icons.port4
2017-10-25 00:58:47 +02:00
export const touchSensor4: TouchSensor = new TouchSensor(4)
2017-07-10 12:37:14 +02:00
}