separating touch sensor stuff

This commit is contained in:
Peli de Halleux 2017-10-24 15:58:47 -07:00
parent e6ef86101f
commit 46175fc7db
4 changed files with 64 additions and 23 deletions

View File

@ -9,6 +9,7 @@
"MMap.setNumber": "Write a number in specified format in the buffer.", "MMap.setNumber": "Write a number in specified format in the buffer.",
"MMap.slice": "Read a range of bytes into a buffer.", "MMap.slice": "Read a range of bytes into a buffer.",
"MMap.write": "Perform write(2) on the underlaying file", "MMap.write": "Perform write(2) on the underlaying file",
"TouchSensorEvent": "Touch sensor interactions",
"control": "Program controls and events.", "control": "Program controls and events.",
"control.allocateNotifyEvent": "Allocates the next user notification event", "control.allocateNotifyEvent": "Allocates the next user notification event",
"control.deviceFirmwareVersion": "Determine the version of system software currently running.", "control.deviceFirmwareVersion": "Determine the version of system software currently running.",
@ -30,6 +31,9 @@
"input.GyroSensor.rate": "Get the current rotation rate from the gyroscope.", "input.GyroSensor.rate": "Get the current rotation rate from the gyroscope.",
"input.IrSensor.distance": "Get the distance measured by the infrared sensor.", "input.IrSensor.distance": "Get the distance measured by the infrared sensor.",
"input.IrSensor.remoteCommand": "Get the remote commandreceived the infrared sensor.", "input.IrSensor.remoteCommand": "Get the remote commandreceived the infrared sensor.",
"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",
"input.UltraSonicSensor.distance": "Gets the distance from the sonar in millimeters", "input.UltraSonicSensor.distance": "Gets the distance from the sonar in millimeters",
"input.buttonDown": "Down button.", "input.buttonDown": "Down button.",
"input.buttonEnter": "Enter button.", "input.buttonEnter": "Enter button.",

View File

@ -1,7 +1,6 @@
{ {
"ButtonEvent.Click|block": "click", "ButtonEvent.Click|block": "click",
"ButtonEvent.Down|block": "down", "ButtonEvent.Down|block": "down",
"ButtonEvent.LongClick|block": "long click",
"ButtonEvent.Up|block": "up", "ButtonEvent.Up|block": "up",
"LightsPattern.GreenFlash|block": "Flashing Green", "LightsPattern.GreenFlash|block": "Flashing Green",
"LightsPattern.GreenPulse|block": "Pulsing Green", "LightsPattern.GreenPulse|block": "Pulsing Green",
@ -13,6 +12,9 @@
"LightsPattern.RedFlash|block": "Flashing Red", "LightsPattern.RedFlash|block": "Flashing Red",
"LightsPattern.RedPulse|block": "Pulsing Red", "LightsPattern.RedPulse|block": "Pulsing Red",
"LightsPattern.Red|block": "Red", "LightsPattern.Red|block": "Red",
"TouchSensorEvent.Bumped|block": "bumped",
"TouchSensorEvent.Released|block": "released",
"TouchSensorEvent.Touched|block": "touched",
"control.raiseEvent|block": "raise event|from %src|with value %value", "control.raiseEvent|block": "raise event|from %src|with value %value",
"control|block": "control", "control|block": "control",
"input.Button.isPressed|block": "%button|is pressed", "input.Button.isPressed|block": "%button|is pressed",
@ -25,6 +27,8 @@
"input.GyroSensor.rate|block": "%sensor|rotation rate", "input.GyroSensor.rate|block": "%sensor|rotation rate",
"input.IrSensor.distance|block": "%infrared|distance", "input.IrSensor.distance|block": "%infrared|distance",
"input.IrSensor.remoteCommand|block": "%infrared|remote command", "input.IrSensor.remoteCommand|block": "%infrared|remote command",
"input.TouchSensor.isTouched|block": "%sensor|is touched",
"input.TouchSensor.onEvent|block": "on %sensor|%event",
"input.UltraSonicSensor.distance|block": "%sensor|distance", "input.UltraSonicSensor.distance|block": "%sensor|distance",
"input.buttonDown|block": "button down", "input.buttonDown|block": "button down",
"input.buttonEnter|block": "button enter", "input.buttonEnter|block": "button enter",
@ -77,5 +81,6 @@
"{id:group}Lights": "Lights", "{id:group}Lights": "Lights",
"{id:group}Motors": "Motors", "{id:group}Motors": "Motors",
"{id:group}Screen": "Screen", "{id:group}Screen": "Screen",
"{id:group}Touch sensor": "Touch sensor",
"{id:group}Ultrasonic sensor": "Ultrasonic sensor" "{id:group}Ultrasonic sensor": "Ultrasonic sensor"
} }

View File

@ -41,8 +41,6 @@ const enum LightsPattern {
const enum ButtonEvent { const enum ButtonEvent {
//% block="click" //% block="click"
Click = 1, Click = 1,
//% block="long click"
LongClick = 2,
//% block="up" //% block="up"
Up = 3, Up = 3,
//% block="down" //% block="down"
@ -76,7 +74,8 @@ namespace input {
} else { } else {
control.raiseEvent(this._id, ButtonEvent.Up) control.raiseEvent(this._id, ButtonEvent.Up)
let delta = control.millis() - this.downTime let delta = control.millis() - this.downTime
control.raiseEvent(this._id, delta > 500 ? ButtonEvent.LongClick : ButtonEvent.Click) control.raiseEvent(this._id, ButtonEvent.Click)
//control.raiseEvent(this._id, delta > 500 ? ButtonEvent.LongClick : ButtonEvent.Click)
} }
} }
@ -131,7 +130,7 @@ namespace input {
//% button.fieldEditor="gridpicker" //% button.fieldEditor="gridpicker"
//% button.fieldOptions.width=220 //% button.fieldOptions.width=220
//% button.fieldOptions.columns=3 //% button.fieldOptions.columns=3
//% weight=99 //% weight=99 blockGap=8
//% group="Buttons" //% group="Buttons"
onEvent(ev: ButtonEvent, body: () => void) { onEvent(ev: ButtonEvent, body: () => void) {
control.onEvent(this._id, ev, body) control.onEvent(this._id, ev, body)

View File

@ -1,12 +1,26 @@
// keep TouchSensorEvent in sync with ButtonEvent
/**
* Touch sensor interactions
*/
const enum TouchSensorEvent {
//% block="touched"
Touched = 4,
//% block="bumped"
Bumped = 1,
//% block="released"
Released = 3,
}
namespace input { namespace input {
//% fixedInstances //% fixedInstances
export class TouchSensor extends internal.AnalogSensor { export class TouchSensor extends internal.AnalogSensor {
button: Button; private button: Button;
constructor(port: number) { constructor(port: number) {
super(port) super(port)
this.button = new Button() this.button = new Button();
} }
_query() { _query() {
@ -20,26 +34,45 @@ namespace input {
_deviceType() { _deviceType() {
return DAL.DEVICE_TYPE_TOUCH return DAL.DEVICE_TYPE_TOUCH
} }
/**
* Check if touch sensor is touched.
* @param sensor the port to query the request
*/
//% help=input/touch/is-touched
//% block="%sensor|is touched"
//% blockId=touchIsTouched
//% parts="touch"
//% blockNamespace=input
//% weight=81 blockGap=8
//% group="Touch sensor"
isTouched() {
return this.button.isPressed();
}
/**
* 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/on-event
//% blockId=touchEvent block="on %sensor|%event"
//% parts="touch"
//% blockNamespace=input
//% weight=99 blockGap=8
//% group="Touch sensor"
onEvent(ev: TouchSensorEvent, body: () => void) {
this.button.onEvent(<ButtonEvent><number>ev, body)
}
} }
//% whenUsed
export const touchSensorImpl1: TouchSensor = new TouchSensor(1)
//% whenUsed
export const touchSensorImpl2: TouchSensor = new TouchSensor(2)
//% whenUsed
export const touchSensorImpl3: TouchSensor = new TouchSensor(3)
//% whenUsed
export const touchSensorImpl4: TouchSensor = new TouchSensor(4)
//% whenUsed block="touch sensor 1" weight=95 fixedInstance //% whenUsed block="touch sensor 1" weight=95 fixedInstance
export const touchSensor1: Button = touchSensorImpl1.button export const touchSensor1: TouchSensor = new TouchSensor(1)
//% whenUsed block="touch sensor 2" weight=95 fixedInstance //% whenUsed block="touch sensor 2" weight=95 fixedInstance
export const touchSensor2: Button = touchSensorImpl2.button export const touchSensor2: TouchSensor = new TouchSensor(2)
//% whenUsed block="touch sensor 3" weight=95 fixedInstance //% whenUsed block="touch sensor 3" weight=95 fixedInstance
export const touchSensor3: Button = touchSensorImpl3.button export const touchSensor3: TouchSensor = new TouchSensor(3)
//% whenUsed block="touch sensor 4" weight=95 fixedInstance //% whenUsed block="touch sensor 4" weight=95 fixedInstance
export const touchSensor4: Button = touchSensorImpl4.button export const touchSensor4: TouchSensor = new TouchSensor(4)
} }