diff --git a/README.md b/README.md
index 493bf9157..d6246b29b 100644
--- a/README.md
+++ b/README.md
@@ -285,10 +285,12 @@ To interactively navigate the examples, visit the [Johnny-Five examples](http://
### Keypad
- [Keypad - VKEY](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-analog-vkey.md)
- [Keypad - Waveshare AD](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-analog-ad.md)
-- [Keypad - MPR121](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121.md)
-- [Keypad - MPR121, Sensitivity](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121-sensitivity.md)
-- [Keypad - MPR121QR2](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121QR2.md)
-- [Keypad - Grove QTouch](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-QTOUCH.md)
+- [Touchpad - MPR121](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121.md)
+- [Touchpad - MPR121_SHIELD](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121_SHIELD.md)
+- [Touchpad - MPR121_KEYPAD](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121_KEYPAD.md)
+- [Touchpad - MPR121, Sensitivity](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121-sensitivity.md)
+- [Touchpad - MPR121QR2_SHIELD](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-MPR121QR2_SHIELD.md)
+- [Touchpad - Grove QTouch](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-QTOUCH.md)
- [Keypad - 3x4 I2C Nano Backpack](https://github.com/rwaldron/johnny-five/blob/master/docs/keypad-3X4_I2C_NANO_BACKPACK.md)
### Relay
diff --git a/docs/breadboard/keypad-MPR121.fzz b/docs/breadboard/keypad-MPR121.fzz
new file mode 100644
index 000000000..b7109652e
Binary files /dev/null and b/docs/breadboard/keypad-MPR121.fzz differ
diff --git a/docs/breadboard/keypad-MPR121.png b/docs/breadboard/keypad-MPR121.png
index 55a932a7c..ca7cdab73 100644
Binary files a/docs/breadboard/keypad-MPR121.png and b/docs/breadboard/keypad-MPR121.png differ
diff --git a/docs/breadboard/keypad-MPR121QR2_SHIELD.fzz b/docs/breadboard/keypad-MPR121QR2_SHIELD.fzz
new file mode 100644
index 000000000..e3e406551
Binary files /dev/null and b/docs/breadboard/keypad-MPR121QR2_SHIELD.fzz differ
diff --git a/docs/breadboard/keypad-MPR121QR2_SHIELD.png b/docs/breadboard/keypad-MPR121QR2_SHIELD.png
new file mode 100644
index 000000000..d8a879779
Binary files /dev/null and b/docs/breadboard/keypad-MPR121QR2_SHIELD.png differ
diff --git a/docs/breadboard/keypad-MPR121_KEYPAD.png b/docs/breadboard/keypad-MPR121_KEYPAD.png
new file mode 100644
index 000000000..55a932a7c
Binary files /dev/null and b/docs/breadboard/keypad-MPR121_KEYPAD.png differ
diff --git a/docs/breadboard/keypad-MPR121_SHIELD.png b/docs/breadboard/keypad-MPR121_SHIELD.png
new file mode 100644
index 000000000..0416a4e28
Binary files /dev/null and b/docs/breadboard/keypad-MPR121_SHIELD.png differ
diff --git a/docs/images/mpr121_shield.jpg b/docs/images/mpr121_shield.jpg
index 8fb2d5ba0..79a0d14c7 100644
Binary files a/docs/images/mpr121_shield.jpg and b/docs/images/mpr121_shield.jpg differ
diff --git a/docs/keypad-3X4_I2C_NANO_BACKPACK.md b/docs/keypad-3X4_I2C_NANO_BACKPACK.md
index 7503fed53..1581a90b1 100644
--- a/docs/keypad-3X4_I2C_NANO_BACKPACK.md
+++ b/docs/keypad-3X4_I2C_NANO_BACKPACK.md
@@ -67,8 +67,8 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ keypad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/docs/keypad-MPR121-sensitivity.md b/docs/keypad-MPR121-sensitivity.md
index f1306328d..8ddaee777 100644
--- a/docs/keypad-MPR121-sensitivity.md
+++ b/docs/keypad-MPR121-sensitivity.md
@@ -1,6 +1,6 @@
-# Keypad - MPR121, Sensitivity
+# Touchpad - MPR121, Sensitivity
@@ -13,7 +13,7 @@
-![docs/breadboard/keypad-MPR121.png](breadboard/keypad-MPR121.png)
+![docs/breadboard/keypad-MPR121_SHIELD.png](breadboard/keypad-MPR121_SHIELD.png)
@@ -35,10 +35,10 @@ board.on("ready", function() {
// MPR121 3x4 Capacitive Touch Pad
// Demonstrates increasing the sensitivity
// deviation for touch and release.
- var keypad;
+ var touchpad;
if (argv.show === 1) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "MPR121",
sensitivity: {
press: 0.10,
@@ -48,7 +48,7 @@ board.on("ready", function() {
}
if (argv.show === 2) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "MPR121",
sensitivity: {
press: 0.10,
@@ -64,7 +64,7 @@ board.on("ready", function() {
}
if (argv.show === 3) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "MPR121",
sensitivity: {
press: 0.10,
@@ -75,7 +75,7 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
+ touchpad.on(eventType, function(data) {
console.log("Event: %s, Target: %s", eventType, data.which);
});
});
diff --git a/docs/keypad-MPR121.md b/docs/keypad-MPR121.md
index feecca3dc..14d0ec48e 100644
--- a/docs/keypad-MPR121.md
+++ b/docs/keypad-MPR121.md
@@ -1,6 +1,6 @@
-# Keypad - MPR121
+# Touchpad - MPR121
@@ -9,12 +9,14 @@
-##### Breadboard for "Keypad - MPR121"
+##### Breadboard for "Touchpad - MPR121"
![docs/breadboard/keypad-MPR121.png](breadboard/keypad-MPR121.png)
+Fritzing diagram: [docs/breadboard/keypad-MPR121.fzz](breadboard/keypad-MPR121.fzz)
+
@@ -27,42 +29,17 @@ node eg/keypad-MPR121.js
```javascript
-var argv = require("minimist")(process.argv.slice(2), { default: { show: 1 } });
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
- // MPR121 3x4 Capacitive Touch Pad
- var keypad;
-
- if (argv.show === 1) {
- keypad = new five.Keypad({
- controller: "MPR121"
- });
- }
-
- if (argv.show === 2) {
- keypad = new five.Keypad({
- controller: "MPR121",
- keys: [
- ["!", "@", "#"],
- ["$", "%", "^"],
- ["&", "-", "+"],
- ["_", "=", ":"]
- ]
- });
- }
-
- if (argv.show === 3) {
- keypad = new five.Keypad({
- controller: "MPR121",
- keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"]
- });
- }
+ var touchpad = new five.Touchpad({
+ controller: "MPR121",
+ });
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/docs/keypad-MPR121QR2_SHIELD.md b/docs/keypad-MPR121QR2_SHIELD.md
new file mode 100644
index 000000000..367c70e28
--- /dev/null
+++ b/docs/keypad-MPR121QR2_SHIELD.md
@@ -0,0 +1,90 @@
+
+
+# Touchpad - MPR121QR2_SHIELD
+
+
+
+
+
+
+
+
+##### Breadboard for "Touchpad - MPR121QR2_SHIELD"
+
+
+
+![docs/breadboard/keypad-MPR121QR2_SHIELD.png](breadboard/keypad-MPR121QR2_SHIELD.png)
+
+Fritzing diagram: [docs/breadboard/keypad-MPR121QR2_SHIELD.fzz](breadboard/keypad-MPR121QR2_SHIELD.fzz)
+
+
+
+
+
+
+Run this example from the command line with:
+```bash
+node eg/keypad-MPR121QR2_SHIELD.js
+```
+
+
+```javascript
+var argv = require("minimist")(process.argv.slice(2), { default: { show: 1 } });
+var five = require("johnny-five");
+var board = new five.Board();
+
+board.on("ready", function() {
+ // MPR121QR2 3x3 Capacitive Touch Shield
+ var touchpad;
+
+ if (argv.show === 1) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121QR2_SHIELD"
+ });
+ }
+
+ if (argv.show === 2) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121QR2_SHIELD",
+ keys: [
+ ["!", "@", "#"],
+ ["$", "%", "^"],
+ ["&", "-", "+"],
+ ]
+ });
+ }
+
+ if (argv.show === 3) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121QR2_SHIELD",
+ keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+"]
+ });
+ }
+
+ ["change", "press", "hold", "release"].forEach(function(eventType) {
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
+ });
+ });
+});
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+## License
+Copyright (c) 2012, 2013, 2014 Rick Waldron
+Licensed under the MIT license.
+Copyright (c) 2016 The Johnny-Five Contributors
+Licensed under the MIT license.
+
+
diff --git a/docs/keypad-MPR121_KEYPAD.md b/docs/keypad-MPR121_KEYPAD.md
new file mode 100644
index 000000000..632e9d125
--- /dev/null
+++ b/docs/keypad-MPR121_KEYPAD.md
@@ -0,0 +1,88 @@
+
+
+# Touchpad - MPR121_KEYPAD
+
+
+
+
+
+
+
+
+##### Breadboard for "Touchpad - MPR121_KEYPAD"
+
+
+
+![docs/breadboard/keypad-MPR121_KEYPAD.png](breadboard/keypad-MPR121_KEYPAD.png)
+
+
+
+
+
+
+Run this example from the command line with:
+```bash
+node eg/keypad-MPR121_KEYPAD.js
+```
+
+
+```javascript
+var argv = require("minimist")(process.argv.slice(2), { default: { show: 1 } });
+var five = require("johnny-five");
+var board = new five.Board();
+
+board.on("ready", function() {
+ var touchpad;
+
+ if (argv.show === 1) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_KEYPAD"
+ });
+ }
+
+ if (argv.show === 2) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_KEYPAD",
+ keys: [
+ ["!", "@", "#"],
+ ["$", "%", "^"],
+ ["&", "-", "+"],
+ ["_", "=", ":"]
+ ]
+ });
+ }
+
+ if (argv.show === 3) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_KEYPAD",
+ keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"]
+ });
+ }
+
+ ["change", "press", "hold", "release"].forEach(function(eventType) {
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
+ });
+ });
+});
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+## License
+Copyright (c) 2012, 2013, 2014 Rick Waldron
+Licensed under the MIT license.
+Copyright (c) 2016 The Johnny-Five Contributors
+Licensed under the MIT license.
+
+
diff --git a/docs/keypad-MPR121_SHIELD.md b/docs/keypad-MPR121_SHIELD.md
new file mode 100644
index 000000000..c42442348
--- /dev/null
+++ b/docs/keypad-MPR121_SHIELD.md
@@ -0,0 +1,89 @@
+
+
+# Touchpad - MPR121_SHIELD
+
+
+
+
+
+
+
+
+##### Breadboard for "Touchpad - MPR121_SHIELD"
+
+
+
+![docs/breadboard/keypad-MPR121_SHIELD.png](breadboard/keypad-MPR121_SHIELD.png)
+
+
+
+
+
+
+Run this example from the command line with:
+```bash
+node eg/keypad-MPR121_SHIELD.js
+```
+
+
+```javascript
+var argv = require("minimist")(process.argv.slice(2), { default: { show: 1 } });
+var five = require("johnny-five");
+var board = new five.Board();
+
+board.on("ready", function() {
+ // MPR121 3x4 Capacitive Touch Shield
+ var touchpad;
+
+ if (argv.show === 1) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_SHIELD"
+ });
+ }
+
+ if (argv.show === 2) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_SHIELD",
+ keys: [
+ ["!", "@", "#"],
+ ["$", "%", "^"],
+ ["&", "-", "+"],
+ ["_", "=", ":"]
+ ]
+ });
+ }
+
+ if (argv.show === 3) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_SHIELD",
+ keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"]
+ });
+ }
+
+ ["change", "press", "hold", "release"].forEach(function(eventType) {
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
+ });
+ });
+});
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+## License
+Copyright (c) 2012, 2013, 2014 Rick Waldron
+Licensed under the MIT license.
+Copyright (c) 2016 The Johnny-Five Contributors
+Licensed under the MIT license.
+
+
diff --git a/docs/keypad-QTOUCH.md b/docs/keypad-QTOUCH.md
index 830771916..82d4b0aeb 100644
--- a/docs/keypad-QTOUCH.md
+++ b/docs/keypad-QTOUCH.md
@@ -1,6 +1,6 @@
-# Keypad - Grove QTouch
+# Touchpad - Grove QTouch
@@ -25,16 +25,16 @@ var board = new five.Board();
board.on("ready", function() {
// AT42QT1070 Capacitive Touch Shield
// Same as QTOUCH
- var keypad;
+ var touchpad;
if (argv.show === 1) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "QTOUCH", // or "AT42QT1070"
});
}
if (argv.show === 2) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "QTOUCH", // or "AT42QT1070",
keys: [
["1", "2", "3"]
@@ -43,15 +43,15 @@ board.on("ready", function() {
}
if (argv.show === 3) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "QTOUCH", // or "AT42QT1070",
keys: ["1", "2", "3"]
});
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/docs/keypad-analog-ad.md b/docs/keypad-analog-ad.md
index 4b586378e..2db8cd3a7 100644
--- a/docs/keypad-analog-ad.md
+++ b/docs/keypad-analog-ad.md
@@ -62,8 +62,8 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ keypad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/docs/keypad-analog-vkey.md b/docs/keypad-analog-vkey.md
index 35255e819..b3298e803 100644
--- a/docs/keypad-analog-vkey.md
+++ b/docs/keypad-analog-vkey.md
@@ -64,8 +64,8 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ keypad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/eg/keypad-3X4_I2C_NANO_BACKPACK.js b/eg/keypad-3X4_I2C_NANO_BACKPACK.js
index d8ced0968..92380f960 100644
--- a/eg/keypad-3X4_I2C_NANO_BACKPACK.js
+++ b/eg/keypad-3X4_I2C_NANO_BACKPACK.js
@@ -36,8 +36,8 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ keypad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/eg/keypad-AT42QT1070.js b/eg/keypad-AT42QT1070.js
index 1e40bab59..8a0f09838 100644
--- a/eg/keypad-AT42QT1070.js
+++ b/eg/keypad-AT42QT1070.js
@@ -5,16 +5,16 @@ var board = new five.Board();
board.on("ready", function() {
// AT42QT1070 Capacitive Touch Shield
// Same as QTOUCH
- var keypad;
+ var touchpad;
if (argv.show === 1) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "AT42QT1070"
});
}
if (argv.show === 2) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "AT42QT1070",
keys: [
["!", "@", "#"],
@@ -25,15 +25,15 @@ board.on("ready", function() {
}
if (argv.show === 3) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "AT42QT1070",
keys: ["!", "@", "#", "$", "%", "^", "&"]
});
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/eg/keypad-MPR121-sensitivity.js b/eg/keypad-MPR121-sensitivity.js
index 1cd87f7b5..50a4712e1 100644
--- a/eg/keypad-MPR121-sensitivity.js
+++ b/eg/keypad-MPR121-sensitivity.js
@@ -6,10 +6,10 @@ board.on("ready", function() {
// MPR121 3x4 Capacitive Touch Pad
// Demonstrates increasing the sensitivity
// deviation for touch and release.
- var keypad;
+ var touchpad;
if (argv.show === 1) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "MPR121",
sensitivity: {
press: 0.10,
@@ -19,7 +19,7 @@ board.on("ready", function() {
}
if (argv.show === 2) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "MPR121",
sensitivity: {
press: 0.10,
@@ -35,7 +35,7 @@ board.on("ready", function() {
}
if (argv.show === 3) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "MPR121",
sensitivity: {
press: 0.10,
@@ -46,7 +46,7 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
+ touchpad.on(eventType, function(data) {
console.log("Event: %s, Target: %s", eventType, data.which);
});
});
diff --git a/eg/keypad-MPR121.js b/eg/keypad-MPR121.js
index 14a2e7319..f7f391acc 100644
--- a/eg/keypad-MPR121.js
+++ b/eg/keypad-MPR121.js
@@ -1,39 +1,14 @@
-var argv = require("minimist")(process.argv.slice(2), { default: { show: 1 } });
var five = require("../lib/johnny-five");
var board = new five.Board();
board.on("ready", function() {
- // MPR121 3x4 Capacitive Touch Pad
- var keypad;
-
- if (argv.show === 1) {
- keypad = new five.Keypad({
- controller: "MPR121"
- });
- }
-
- if (argv.show === 2) {
- keypad = new five.Keypad({
- controller: "MPR121",
- keys: [
- ["!", "@", "#"],
- ["$", "%", "^"],
- ["&", "-", "+"],
- ["_", "=", ":"]
- ]
- });
- }
-
- if (argv.show === 3) {
- keypad = new five.Keypad({
- controller: "MPR121",
- keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"]
- });
- }
+ var touchpad = new five.Touchpad({
+ controller: "MPR121"
+ });
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/eg/keypad-MPR121QR2.js b/eg/keypad-MPR121QR2_SHIELD.js
similarity index 62%
rename from eg/keypad-MPR121QR2.js
rename to eg/keypad-MPR121QR2_SHIELD.js
index 87e46d507..936f5dd3a 100644
--- a/eg/keypad-MPR121QR2.js
+++ b/eg/keypad-MPR121QR2_SHIELD.js
@@ -4,17 +4,17 @@ var board = new five.Board();
board.on("ready", function() {
// MPR121QR2 3x3 Capacitive Touch Shield
- var keypad;
+ var touchpad;
if (argv.show === 1) {
- keypad = new five.Keypad({
- controller: "MPR121QR2"
+ touchpad = new five.Touchpad({
+ controller: "MPR121QR2_SHIELD"
});
}
if (argv.show === 2) {
- keypad = new five.Keypad({
- controller: "MPR121QR2",
+ touchpad = new five.Touchpad({
+ controller: "MPR121QR2_SHIELD",
keys: [
["!", "@", "#"],
["$", "%", "^"],
@@ -24,15 +24,15 @@ board.on("ready", function() {
}
if (argv.show === 3) {
- keypad = new five.Keypad({
- controller: "MPR121QR2",
+ touchpad = new five.Touchpad({
+ controller: "MPR121QR2_SHIELD",
keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+"]
});
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/eg/keypad-MPR121_KEYPAD.js b/eg/keypad-MPR121_KEYPAD.js
new file mode 100644
index 000000000..dd97f1d77
--- /dev/null
+++ b/eg/keypad-MPR121_KEYPAD.js
@@ -0,0 +1,38 @@
+var argv = require("minimist")(process.argv.slice(2), { default: { show: 1 } });
+var five = require("../lib/johnny-five");
+var board = new five.Board();
+
+board.on("ready", function() {
+ var touchpad;
+
+ if (argv.show === 1) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_KEYPAD"
+ });
+ }
+
+ if (argv.show === 2) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_KEYPAD",
+ keys: [
+ ["!", "@", "#"],
+ ["$", "%", "^"],
+ ["&", "-", "+"],
+ ["_", "=", ":"]
+ ]
+ });
+ }
+
+ if (argv.show === 3) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_KEYPAD",
+ keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"]
+ });
+ }
+
+ ["change", "press", "hold", "release"].forEach(function(eventType) {
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
+ });
+ });
+});
diff --git a/eg/keypad-MPR121_SHIELD.js b/eg/keypad-MPR121_SHIELD.js
new file mode 100644
index 000000000..c2238be41
--- /dev/null
+++ b/eg/keypad-MPR121_SHIELD.js
@@ -0,0 +1,39 @@
+var argv = require("minimist")(process.argv.slice(2), { default: { show: 1 } });
+var five = require("../lib/johnny-five");
+var board = new five.Board();
+
+board.on("ready", function() {
+ // MPR121 3x4 Capacitive Touch Shield
+ var touchpad;
+
+ if (argv.show === 1) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_SHIELD"
+ });
+ }
+
+ if (argv.show === 2) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_SHIELD",
+ keys: [
+ ["!", "@", "#"],
+ ["$", "%", "^"],
+ ["&", "-", "+"],
+ ["_", "=", ":"]
+ ]
+ });
+ }
+
+ if (argv.show === 3) {
+ touchpad = new five.Touchpad({
+ controller: "MPR121_SHIELD",
+ keys: ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"]
+ });
+ }
+
+ ["change", "press", "hold", "release"].forEach(function(eventType) {
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
+ });
+ });
+});
diff --git a/eg/keypad-QTOUCH.js b/eg/keypad-QTOUCH.js
index 9c8b94853..aaa5d1ef7 100644
--- a/eg/keypad-QTOUCH.js
+++ b/eg/keypad-QTOUCH.js
@@ -5,16 +5,16 @@ var board = new five.Board();
board.on("ready", function() {
// AT42QT1070 Capacitive Touch Shield
// Same as QTOUCH
- var keypad;
+ var touchpad;
if (argv.show === 1) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "QTOUCH", // or "AT42QT1070"
});
}
if (argv.show === 2) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "QTOUCH", // or "AT42QT1070",
keys: [
["1", "2", "3"]
@@ -23,15 +23,15 @@ board.on("ready", function() {
}
if (argv.show === 3) {
- keypad = new five.Keypad({
+ touchpad = new five.Touchpad({
controller: "QTOUCH", // or "AT42QT1070",
keys: ["1", "2", "3"]
});
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ touchpad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/eg/keypad-analog-ad.js b/eg/keypad-analog-ad.js
index 991d62ea0..ba90b9018 100644
--- a/eg/keypad-analog-ad.js
+++ b/eg/keypad-analog-ad.js
@@ -33,8 +33,8 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ keypad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/eg/keypad-analog-vkey.js b/eg/keypad-analog-vkey.js
index 18d079d40..122917834 100644
--- a/eg/keypad-analog-vkey.js
+++ b/eg/keypad-analog-vkey.js
@@ -35,8 +35,8 @@ board.on("ready", function() {
}
["change", "press", "hold", "release"].forEach(function(eventType) {
- keypad.on(eventType, function(data) {
- console.log("Event: %s, Target: %s", eventType, data.which);
+ keypad.on(eventType, function(event) {
+ console.log("Event: %s, Target: %s", eventType, event.which);
});
});
});
diff --git a/firmwares/keypad_3x4_i2c_nano_backpack.ino b/firmwares/keypad_3x4_i2c_nano_backpack.ino
index 8968c3a9d..0a089b084 100644
--- a/firmwares/keypad_3x4_i2c_nano_backpack.ino
+++ b/firmwares/keypad_3x4_i2c_nano_backpack.ino
@@ -49,20 +49,24 @@ void setup() {
void loop() {
int state = read();
- int index = toIndex(state);
+ // int index = toIndex(state);
- if (state == 0) {
- index = 0xFF;
- }
+ // if (state == 0) {
+ // index = 0xFF;
+ // }
- #if DEBUG_MODE
- if (index != 0xff) {
- Serial.println(index);
- }
- #endif
+ // #if DEBUG_MODE
+ // if (index != 0xff) {
+ // Serial.println(index);
+ // }
+ // #endif
+
+ // buffer[0] = index >> 8;
+ // buffer[1] = index & 0xFF;
+
+ buffer[0] = state >> 8;
+ buffer[1] = state & 0xFF;
- buffer[0] = index >> 8;
- buffer[1] = index & 0xFF;
delay(10);
}
diff --git a/lib/definitions/mpr121.js b/lib/definitions/mpr121.js
index 01caca00a..55b16861e 100644
--- a/lib/definitions/mpr121.js
+++ b/lib/definitions/mpr121.js
@@ -1,7 +1,7 @@
// MPR121* Register Defines
module.exports = {
MAPS: {
- MPR121QR2: {
+ MPR121QR2_SHIELD: {
KEYS: {
0: 1,
1: 2,
@@ -26,6 +26,36 @@ module.exports = {
}
},
MPR121: {
+ KEYS: {
+ 0: 0,
+ 1: 1,
+ 2: 2,
+ 3: 3,
+ 4: 4,
+ 5: 5,
+ 6: 6,
+ 7: 7,
+ 8: 8,
+ 9: 9,
+ 10: 10,
+ 11: 11,
+ },
+ TARGETS: {
+ 1: 0,
+ 2: 1,
+ 4: 2,
+ 8: 3,
+ 16: 4,
+ 32: 5,
+ 64: 6,
+ 128: 7,
+ 256: 8,
+ 512: 9,
+ 1024: 10,
+ 2048: 11,
+ }
+ },
+ MPR121_KEYPAD: {
KEYS: {
0: 1,
1: 2,
@@ -53,7 +83,37 @@ module.exports = {
1: 9,
16: 10,
256: 11,
- }
+ },
+ },
+ MPR121_SHIELD: {
+ KEYS: {
+ 0: 0,
+ 1: 1,
+ 2: 2,
+ 3: 3,
+ 4: 4,
+ 5: 5,
+ 6: 6,
+ 7: 7,
+ 8: 8,
+ 9: 9,
+ 10: 10,
+ 11: 11,
+ },
+ TARGETS: {
+ 1: 0,
+ 2: 1,
+ 4: 2,
+ 8: 3,
+ 16: 4,
+ 32: 5,
+ 64: 6,
+ 128: 7,
+ 256: 8,
+ 512: 9,
+ 1024: 10,
+ 2048: 11,
+ },
},
},
MPR121_DEFAULT_ADDRESS: 0x5A,
diff --git a/lib/keypad.js b/lib/keypad.js
index 6ecc7b839..f2f8ce92f 100644
--- a/lib/keypad.js
+++ b/lib/keypad.js
@@ -13,13 +13,13 @@ var aliases = {
hold: ["hold"]
};
-var trigger = function(key, value) {
- var event = { which: value, timestamp: Date.now() };
- aliases[key].forEach(function(type) {
+var trigger = function(type, value) {
+ var event = { type: type, which: value, timestamp: Date.now() };
+ aliases[type].forEach(function(type) {
this.emit(type, event);
}, this);
- this.emit("change", Object.assign({}, event, { type: key }));
+ this.emit("change", Object.assign({}, event));
};
@@ -45,7 +45,10 @@ function flatKeys(opts) {
//
//
var Controllers = {
- MPR121QR2: {
+ MPR121: {
+ ADDRESSES: {
+ value: [0x5A, 0x5B, 0x5C, 0x5D]
+ },
REGISTER: {
value: require("./definitions/mpr121.js")
},
@@ -53,7 +56,7 @@ var Controllers = {
value: function(opts, dataHandler) {
var state = priv.get(this);
- var address = opts.address || 0x5A;
+ var address = opts.address || this.ADDRESSES[0];
var keys = flatKeys(opts);
var keyMap = this.REGISTER.MAPS[opts.controller].KEYS;
var targets = this.REGISTER.MAPS[opts.controller].TARGETS;
@@ -106,6 +109,12 @@ var Controllers = {
// https://github.com/adafruit/Adafruit_MPR121/blob/master/Adafruit_MPR121.cpp#L43
};
+ // If keys were specified for a MPR121_SHIELD (adafruit shield),
+ // then reverse the keys to align with the output of the.
+ if (opts.keys && opts.controller === "MPR121_SHIELD") {
+ keys = keys.reverse();
+ }
+
if (opts.sensitivity) {
if (Array.isArray(opts.sensitivity)) {
// Initialized as:
@@ -185,6 +194,7 @@ var Controllers = {
state.keys = keys;
state.mapping = mapping;
state.targets = targets;
+ state.isMultitouch = true;
this.io.i2cRead(address, 0x00, 2, function(bytes) {
dataHandler(uint16(bytes[1], bytes[0]));
@@ -197,13 +207,18 @@ var Controllers = {
return state.keys[index];
}
},
- toIndex: {
+ toIndices: {
value: function(raw) {
var state = priv.get(this);
- // console.log("raw", raw, state.targets[raw]);
- return state.targets[raw];
+ var indices = [];
+ for (var i = 0; i < 12; i++) {
+ if (raw & (1 << i)) {
+ indices.push(state.targets[raw & (1 << i)]);
+ }
+ }
+ return indices;
}
- }
+ },
},
// https://learn.sparkfun.com/tutorials/vkey-voltage-keypad-hookup-guide
@@ -227,6 +242,7 @@ var Controllers = {
state.touches = touches(length);
state.mapping = mapping;
state.keys = keys;
+ state.isMultitouch = false;
this.io.pinMode(this.pin, this.io.MODES.ANALOG);
this.io.analogRead(this.pin, function(adc) {
@@ -240,17 +256,17 @@ var Controllers = {
return state.keys[index];
}
},
- toIndex: {
+ toIndices: {
value: function(raw) {
var state = priv.get(this);
var scale = state.scale;
var length = state.length;
if (raw < scale.bottom || raw > scale.top) {
- return null;
+ return [];
}
- return (length - ((raw - scale.bottom) / scale.step)) | 0;
+ return [ (length - ((raw - scale.bottom) / scale.step)) | 0 ];
}
}
},
@@ -301,6 +317,7 @@ var Controllers = {
state.touches = touches(length);
state.mapping = mapping;
state.keys = keys;
+ state.isMultitouch = true;
this.io.pinMode(this.pin, this.io.MODES.ANALOG);
this.io.analogRead(this.pin, function(adc) {
@@ -314,7 +331,7 @@ var Controllers = {
return state.keys[index];
}
},
- toIndex: {
+ toIndices: {
value: function(raw) {
var state = priv.get(this);
var ranges = state.ranges;
@@ -327,10 +344,10 @@ var Controllers = {
}
if (index < 0) {
- return null;
+ return [];
}
- return index;
+ return [index];
}
}
},
@@ -361,6 +378,7 @@ var Controllers = {
state.touches = touches(length);
state.mapping = mapping;
state.keys = keys;
+ state.isMultitouch = true;
this.io.i2cConfig(opts);
this.io.i2cRead(address, this.REGISTER.READ, 1, function(data) {
@@ -374,13 +392,15 @@ var Controllers = {
return state.keys[index];
}
},
- toIndex: {
+ toIndices: {
value: function(raw) {
+ var indices = [];
for (var i = 0; i < 7; i++) {
if (raw & (1 << i)) {
- return i;
+ indices.push(i);
}
}
+ return indices;
}
}
},
@@ -407,6 +427,7 @@ var Controllers = {
state.touches = touches(length);
state.mapping = mapping;
state.keys = keys;
+ state.isMultitouch = true;
opts.address = address;
@@ -422,9 +443,16 @@ var Controllers = {
return state.keys[index];
}
},
- toIndex: {
+ toIndices: {
value: function(raw) {
- return raw;
+ var state = priv.get(this);
+ var indices = [];
+ for (var i = 0; i < state.length; i++) {
+ if (raw & (1 << i)) {
+ indices.push(i);
+ }
+ }
+ return indices;
}
}
},
@@ -432,12 +460,18 @@ var Controllers = {
// Otherwise known as...
-Controllers.MPR121 = Controllers.MPR121QR2;
+Controllers.MPR121QR2 = Controllers.MPR121;
+Controllers.MPR121QR2_SHIELD = Controllers.MPR121;
+Controllers.MPR121_KEYPAD = Controllers.MPR121;
+Controllers.MPR121_SHIELD = Controllers.MPR121;
Controllers.QTOUCH = Controllers.AT42QT1070;
function touches(length) {
return Array.from({ length: length }, function() {
- return 0;
+ return {
+ timeout: null,
+ value: 0,
+ };
});
}
@@ -463,8 +497,6 @@ function Keypad(opts) {
holdtime: null,
};
-
-
if (opts.controller && typeof opts.controller === "string") {
controller = Controllers[opts.controller.toUpperCase()];
} else {
@@ -483,43 +515,70 @@ function Keypad(opts) {
if (typeof this.initialize === "function") {
this.initialize(opts, function(data) {
- var target = this.toIndex(data);
- var length = state.length;
- var alias = null;
raw = data;
- for (var i = 0; i < length; i++) {
- alias = this.toAlias(i);
+ var now = Date.now();
+ var indices = this.toIndices(data);
+ var iLength = indices.length;
+ var kLength = state.length;
+ var aliases = indices.map(function(index) {
+ return this.toAlias(index);
+ }, this);
+
+ var lists = {
+ down: [],
+ hold: [],
+ up: [],
+ };
+
+ var target = null;
+ var alias = null;
+
+ for (var k = 0; k < kLength; k++) {
+ alias = this.toAlias(k);
- if (target === i) {
- if (state.touches[i] === 0) {
+ if (indices.includes(k)) {
+ if (state.touches[k].value === 0) {
- state.timeout = Date.now() + state.holdtime;
- trigger.call(this, "down", alias);
+ state.touches[k].timeout = now + state.holdtime;
+ lists.down.push(alias);
- } else if (state.touches[i] === 1) {
- if (state.timeout !== null && Date.now() > state.timeout) {
- state.timeout = Date.now() + state.holdtime;
- trigger.call(this, "hold", alias);
+ } else if (state.touches[k].value === 1) {
+ if (state.touches[k].timeout !== null && now > state.touches[k].timeout) {
+ state.touches[k].timeout = now + state.holdtime;
+ lists.hold.push(alias);
}
}
- state.touches[i] = 1;
+ state.touches[k].value = 1;
} else {
- if (state.touches[i] === 1) {
- state.timeout = null;
- trigger.call(this, "up", alias);
+ if (state.touches[k].value === 1) {
+ state.touches[k].timeout = null;
+ lists.up.push(alias);
}
-
- state.touches[i] = 0;
+ state.touches[k].value = 0;
}
+ target = null;
alias = null;
}
+
+ Object.keys(lists).forEach(function(key) {
+ var list = lists[key];
+
+ if (list.length) {
+ trigger.call(this, key, list);
+ }
+ }, this);
}.bind(this));
}
Object.defineProperties(this, {
+ isMultitouch: {
+ get: function() {
+ return state.isMultitouch;
+ }
+ },
value: {
get: function() {
return raw;
@@ -527,7 +586,7 @@ function Keypad(opts) {
},
target: {
get: function() {
- return state.keys[this.toIndex(this.value)];
+ return state.keys[this.toIndices(this.value)];
}
}
});
diff --git a/test/keypad.js b/test/keypad.js
index 07a4e5d4f..a63c10a77 100644
--- a/test/keypad.js
+++ b/test/keypad.js
@@ -107,7 +107,7 @@ exports["Keypad: Analog"] = {
callback(960);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -150,7 +150,7 @@ exports["Keypad: Analog"] = {
callback(960);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -188,7 +188,7 @@ exports["Keypad: Analog"] = {
callback(960);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -318,7 +318,7 @@ exports["Keypad: VKey"] = {
callback(38);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -358,7 +358,7 @@ exports["Keypad: VKey"] = {
callback(38);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -393,7 +393,7 @@ exports["Keypad: VKey"] = {
callback(38);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -464,7 +464,7 @@ exports["Keypad: VKey"] = {
}
};
-exports["Keypad: MPR121QR2"] = {
+exports["Keypad: MPR121"] = {
setUp: function(done) {
this.board = newBoard();
this.clock = sinon.useFakeTimers();
@@ -473,7 +473,7 @@ exports["Keypad: MPR121QR2"] = {
this.i2cRead = sinon.spy(MockFirmata.prototype, "i2cRead");
this.keypad = new Keypad({
- controller: "MPR121QR2",
+ controller: "MPR121",
address: 0x5A,
board: this.board
});
@@ -493,7 +493,7 @@ exports["Keypad: MPR121QR2"] = {
this.i2cConfig.reset();
new Keypad({
- controller: "MPR121QR2",
+ controller: "MPR121",
address: 0xff,
bus: "i2c-1",
board: this.board
@@ -533,11 +533,11 @@ exports["Keypad: MPR121QR2"] = {
test.expect(9);
var keys = Array.from({ length: 9 }, function(_, index) {
- return index + 1;
+ return index;
});
var keypad = new five.Keypad({
board: this.board,
- controller: "MPR121QR2",
+ controller: "MPR121",
address: 0x5A
});
var callback = this.i2cRead.getCall(1).args[3];
@@ -545,18 +545,21 @@ exports["Keypad: MPR121QR2"] = {
keypad.on("down", spy);
- callback([ 0, 1 ]);
- callback([ 32, 0 ]);
+ callback([ 1, 0 ]);
+ callback([ 2, 0 ]);
callback([ 4, 0 ]);
- callback([ 128, 0 ]);
+ callback([ 8, 0 ]);
callback([ 16, 0 ]);
- callback([ 2, 0 ]);
+ callback([ 32, 0 ]);
callback([ 64, 0 ]);
- callback([ 8, 0 ]);
- callback([ 1, 0 ]);
+ callback([ 128, 0 ]);
+ callback([ 256, 0 ]);
+ callback([ 512, 0 ]);
+ callback([ 1024, 0 ]);
+ callback([ 2048, 0 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -568,7 +571,7 @@ exports["Keypad: MPR121QR2"] = {
var keys = ["!", "@", "#", "$", "%", "^", "&", "-", "+"];
var keypad = new five.Keypad({
board: this.board,
- controller: "MPR121QR2",
+ controller: "MPR121",
address: 0x5A,
keys: [
["!", "@", "#"],
@@ -581,18 +584,31 @@ exports["Keypad: MPR121QR2"] = {
keypad.on("down", spy);
- callback([ 0, 1 ]);
- callback([ 32, 0 ]);
+ // callback([ 0, 1 ]);
+ // callback([ 32, 0 ]);
+ // callback([ 4, 0 ]);
+ // callback([ 128, 0 ]);
+ // callback([ 16, 0 ]);
+ // callback([ 2, 0 ]);
+ // callback([ 64, 0 ]);
+ // callback([ 8, 0 ]);
+ // callback([ 1, 0 ]);
+
+ callback([ 1, 0 ]);
+ callback([ 2, 0 ]);
callback([ 4, 0 ]);
- callback([ 128, 0 ]);
+ callback([ 8, 0 ]);
callback([ 16, 0 ]);
- callback([ 2, 0 ]);
+ callback([ 32, 0 ]);
callback([ 64, 0 ]);
- callback([ 8, 0 ]);
- callback([ 1, 0 ]);
+ callback([ 128, 0 ]);
+ callback([ 256, 0 ]);
+ callback([ 512, 0 ]);
+ callback([ 1024, 0 ]);
+ callback([ 2048, 0 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -604,7 +620,7 @@ exports["Keypad: MPR121QR2"] = {
var keys = ["!", "@", "#", "$", "%", "^", "&", "-", "+"];
var keypad = new five.Keypad({
board: this.board,
- controller: "MPR121QR2",
+ controller: "MPR121",
address: 0x5A,
keys: keys
});
@@ -613,19 +629,31 @@ exports["Keypad: MPR121QR2"] = {
keypad.on("down", spy);
- callback([ 0, 1 ]);
- callback([ 32, 0 ]);
+ // callback([ 0, 1 ]);
+ // callback([ 32, 0 ]);
+ // callback([ 4, 0 ]);
+ // callback([ 128, 0 ]);
+ // callback([ 16, 0 ]);
+ // callback([ 2, 0 ]);
+ // callback([ 64, 0 ]);
+ // callback([ 8, 0 ]);
+ // callback([ 1, 0 ]);
+
+ callback([ 1, 0 ]);
+ callback([ 2, 0 ]);
callback([ 4, 0 ]);
- callback([ 128, 0 ]);
+ callback([ 8, 0 ]);
callback([ 16, 0 ]);
- callback([ 2, 0 ]);
+ callback([ 32, 0 ]);
callback([ 64, 0 ]);
- callback([ 8, 0 ]);
- callback([ 1, 0 ]);
-
+ callback([ 128, 0 ]);
+ callback([ 256, 0 ]);
+ callback([ 512, 0 ]);
+ callback([ 1024, 0 ]);
+ callback([ 2048, 0 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -642,14 +670,32 @@ exports["Keypad: MPR121QR2"] = {
// Only 3 are valid.
callback([ 64, 0 ]);
callback([ 2, 0 ]);
- callback([ 4, 0, 0 ]);
- callback([ 4 ]);
+ callback([ 0, 0 ]);
callback([ 4, 0 ]);
+ callback([ 0, 0 ]);
test.equal(spy.callCount, 3);
test.done();
},
+ multiPress: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[3];
+ var spy = sinon.spy();
+
+ this.keypad.on("down", spy);
+
+ callback([ 192, 0 ]);
+ callback([ 48, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 6, 7 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 4, 5 ]);
+
+ test.done();
+ },
+
hold: function(test) {
test.expect(1);
@@ -666,6 +712,27 @@ exports["Keypad: MPR121QR2"] = {
test.done();
},
+ multiHold: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[3];
+ var spy = sinon.spy();
+
+ this.keypad.on("hold", spy);
+
+ callback([ 192, 0 ]);
+ this.clock.tick(600);
+ callback([ 192, 0 ]);
+ this.clock.tick(600);
+ callback([ 128, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 6, 7 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 7 ]);
+
+ test.done();
+ },
+
release: function(test) {
test.expect(1);
@@ -681,6 +748,25 @@ exports["Keypad: MPR121QR2"] = {
test.done();
},
+ multiRelease: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[3];
+ var spy = sinon.spy();
+
+ this.keypad.on("release", spy);
+
+ callback([ 192, 0 ]);
+ callback([ 128, 0 ]);
+ callback([ 0, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 6 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 7 ]);
+
+ test.done();
+ },
+
sensitivityDefault: function(test) {
test.expect(26);
@@ -712,7 +798,7 @@ exports["Keypad: MPR121QR2"] = {
// Set custom
this.keypad = new Keypad({
board: this.board,
- controller: "MPR121QR2",
+ controller: "MPR121",
sensitivity: {
press: 0.5,
release: 0,
@@ -746,7 +832,7 @@ exports["Keypad: MPR121QR2"] = {
// Set custom
this.keypad = new Keypad({
board: this.board,
- controller: "MPR121QR2",
+ controller: "MPR121",
sensitivity: {
press: 1,
release: 0.9,
@@ -780,7 +866,7 @@ exports["Keypad: MPR121QR2"] = {
// Set a custom
this.keypad = new Keypad({
board: this.board,
- controller: "MPR121QR2",
+ controller: "MPR121",
sensitivity: [
{ press: 1, release: 0.5, },
{ press: 1, release: 0.5, },
@@ -817,7 +903,7 @@ exports["Keypad: MPR121QR2"] = {
};
-exports["Keypad: MPR121"] = {
+exports["Keypad: MPR121_KEYPAD"] = {
setUp: function(done) {
this.board = newBoard();
this.clock = sinon.useFakeTimers();
@@ -826,7 +912,7 @@ exports["Keypad: MPR121"] = {
this.i2cRead = sinon.spy(MockFirmata.prototype, "i2cRead");
this.keypad = new Keypad({
- controller: "MPR121",
+ controller: "MPR121_KEYPAD",
address: 0x5A,
board: this.board
});
@@ -846,7 +932,7 @@ exports["Keypad: MPR121"] = {
this.i2cConfig.reset();
new Keypad({
- controller: "MPR121",
+ controller: "MPR121_KEYPAD",
address: 0xff,
bus: "i2c-1",
board: this.board
@@ -890,7 +976,7 @@ exports["Keypad: MPR121"] = {
});
var keypad = new five.Keypad({
board: this.board,
- controller: "MPR121",
+ controller: "MPR121_KEYPAD",
address: 0x5A
});
var callback = this.i2cRead.getCall(1).args[3];
@@ -900,19 +986,19 @@ exports["Keypad: MPR121"] = {
callback([ 8, 0 ]);
callback([ 128, 0 ]);
- callback([ 0, 8 ]);
+ callback([ 2048, 0 ]);
callback([ 4, 0 ]);
callback([ 64, 0 ]);
- callback([ 0, 4 ]);
+ callback([ 1024 , 0 ]);
callback([ 2, 0 ]);
callback([ 32, 0 ]);
- callback([ 0, 2 ]);
+ callback([ 512, 0 ]);
callback([ 1, 0 ]);
callback([ 16, 0 ]);
- callback([ 0, 1 ]);
+ callback([ 256, 0 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -924,7 +1010,7 @@ exports["Keypad: MPR121"] = {
var keys = ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"];
var keypad = new five.Keypad({
board: this.board,
- controller: "MPR121",
+ controller: "MPR121_KEYPAD",
address: 0x5A,
keys: [
["!", "@", "#"],
@@ -952,7 +1038,7 @@ exports["Keypad: MPR121"] = {
callback([ 0, 1 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -964,7 +1050,7 @@ exports["Keypad: MPR121"] = {
var keys = ["!", "@", "#", "$", "%", "^", "&", "-", "+", "_", "=", ":"];
var keypad = new five.Keypad({
board: this.board,
- controller: "MPR121",
+ controller: "MPR121_KEYPAD",
address: 0x5A,
keys: keys
});
@@ -987,7 +1073,7 @@ exports["Keypad: MPR121"] = {
callback([ 0, 1 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -1004,14 +1090,32 @@ exports["Keypad: MPR121"] = {
// Only 3 are valid.
callback([ 64, 0 ]);
callback([ 2, 0 ]);
- callback([ 4, 0, 0 ]);
- callback([ 4 ]);
+ callback([ 0, 0 ]);
callback([ 4, 0 ]);
+ callback([ 0, 0 ]);
test.equal(spy.callCount, 3);
test.done();
},
+ multiPress: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[3];
+ var spy = sinon.spy();
+
+ this.keypad.on("down", spy);
+
+ callback([ 65, 0 ]);
+ callback([ 7, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 5, 10 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 4, 7 ]);
+
+ test.done();
+ },
+
hold: function(test) {
test.expect(1);
@@ -1028,6 +1132,27 @@ exports["Keypad: MPR121"] = {
test.done();
},
+ multiHold: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[3];
+ var spy = sinon.spy();
+
+ this.keypad.on("hold", spy);
+
+ callback([ 3, 0 ]);
+ this.clock.tick(600);
+ callback([ 3, 0 ]);
+ this.clock.tick(600);
+ callback([ 2, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 7, 10 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 7 ]);
+
+ test.done();
+ },
+
release: function(test) {
test.expect(1);
@@ -1042,6 +1167,26 @@ exports["Keypad: MPR121"] = {
test.equal(spy.callCount, 1);
test.done();
},
+
+ multiRelease: function(test) {
+ // test.expect(1);
+
+ var callback = this.i2cRead.getCall(0).args[3];
+ var spy = sinon.spy();
+
+ this.keypad.on("release", spy);
+
+ callback([ 3, 0 ]);
+ callback([ 2, 0 ]);
+ callback([ 1, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 10 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 7 ]);
+
+ test.done();
+ },
+
};
@@ -1122,7 +1267,7 @@ exports["Keypad: QTOUCH"] = {
callback([ 64 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -1156,7 +1301,7 @@ exports["Keypad: QTOUCH"] = {
callback([ 64 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -1186,7 +1331,7 @@ exports["Keypad: QTOUCH"] = {
callback([ 64 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -1311,21 +1456,21 @@ exports["Keypad: 3X4_I2C_NANO_BACKPACK"] = {
keypad.on("down", spy);
- callback([ 0, 0 ]);
callback([ 0, 1 ]);
callback([ 0, 2 ]);
- callback([ 0, 3 ]);
callback([ 0, 4 ]);
- callback([ 0, 5 ]);
- callback([ 0, 6 ]);
- callback([ 0, 7 ]);
callback([ 0, 8 ]);
- callback([ 0, 9 ]);
- callback([ 0, 10 ]);
- callback([ 0, 11 ]);
+ callback([ 0, 16 ]);
+ callback([ 0, 32 ]);
+ callback([ 0, 64 ]);
+ callback([ 0, 128 ]);
+ callback([ 1, 0 ]);
+ callback([ 2, 0 ]);
+ callback([ 4, 0 ]);
+ callback([ 8, 0 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -1351,22 +1496,22 @@ exports["Keypad: 3X4_I2C_NANO_BACKPACK"] = {
keypad.on("down", spy);
- callback([ 0, 0 ]);
callback([ 0, 1 ]);
callback([ 0, 2 ]);
- callback([ 0, 3 ]);
callback([ 0, 4 ]);
- callback([ 0, 5 ]);
- callback([ 0, 6 ]);
- callback([ 0, 7 ]);
callback([ 0, 8 ]);
- callback([ 0, 9 ]);
- callback([ 0, 10 ]);
- callback([ 0, 11 ]);
+ callback([ 0, 16 ]);
+ callback([ 0, 32 ]);
+ callback([ 0, 64 ]);
+ callback([ 0, 128 ]);
+ callback([ 1, 0 ]);
+ callback([ 2, 0 ]);
+ callback([ 4, 0 ]);
+ callback([ 8, 0 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -1387,21 +1532,21 @@ exports["Keypad: 3X4_I2C_NANO_BACKPACK"] = {
keypad.on("down", spy);
- callback([ 0, 0 ]);
callback([ 0, 1 ]);
callback([ 0, 2 ]);
- callback([ 0, 3 ]);
callback([ 0, 4 ]);
- callback([ 0, 5 ]);
- callback([ 0, 6 ]);
- callback([ 0, 7 ]);
callback([ 0, 8 ]);
- callback([ 0, 9 ]);
- callback([ 0, 10 ]);
- callback([ 0, 11 ]);
+ callback([ 0, 16 ]);
+ callback([ 0, 32 ]);
+ callback([ 0, 64 ]);
+ callback([ 0, 128 ]);
+ callback([ 1, 0 ]);
+ callback([ 2, 0 ]);
+ callback([ 4, 0 ]);
+ callback([ 8, 0 ]);
keys.forEach(function(key, index) {
- test.equal(spy.args[index][0].which, key);
+ test.deepEqual(spy.args[index][0].which, [key]);
});
test.done();
@@ -1415,17 +1560,37 @@ exports["Keypad: 3X4_I2C_NANO_BACKPACK"] = {
this.keypad.on("down", spy);
+
// Only 3 are valid.
- callback([ 0, 0 ]);
+ callback([ 0, 1 ]);
callback([ 0, 20 ]);
- callback([ 0, 6 ]);
+ callback([ 0, 4 ]);
callback([ 0, 10 ]);
- callback([ 0, 14 ]);
+ callback([ 0, 8 ]);
test.equal(spy.callCount, 3);
test.done();
},
+ multiPress: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[2];
+ var spy = sinon.spy();
+
+ this.keypad.on("down", spy);
+
+ callback([ 0, 3 ]);
+ callback([ 12, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 1, 2 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 0, "#" ]);
+
+ test.done();
+ },
+
+
hold: function(test) {
test.expect(1);
@@ -1434,14 +1599,36 @@ exports["Keypad: 3X4_I2C_NANO_BACKPACK"] = {
this.keypad.on("hold", spy);
- callback([ 0, 11 ]);
+ callback([ 0, 8 ]);
this.clock.tick(600);
- callback([ 0, 11 ]);
+ callback([ 0, 8 ]);
test.equal(spy.callCount, 1);
test.done();
},
+ multiHold: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[2];
+ var spy = this.sandbox.spy();
+
+ this.keypad.on("hold", spy);
+
+ callback([ 0, 3 ]);
+ this.clock.tick(600);
+ callback([ 0, 3 ]);
+ this.clock.tick(600);
+ callback([ 0, 1 ]);
+
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 1, 2 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 1 ]);
+
+ test.done();
+ },
+
release: function(test) {
test.expect(1);
@@ -1450,10 +1637,29 @@ exports["Keypad: 3X4_I2C_NANO_BACKPACK"] = {
this.keypad.on("release", spy);
- callback([ 0, 11 ]);
- callback([ 0, 255 ]);
+ callback([ 0, 1 ]);
+ callback([ 0, 0 ]);
test.equal(spy.callCount, 1);
test.done();
},
+
+ multiRelease: function(test) {
+ test.expect(3);
+
+ var callback = this.i2cRead.getCall(0).args[2];
+ var spy = this.sandbox.spy();
+
+ this.keypad.on("release", spy);
+
+ callback([ 0, 3 ]);
+ callback([ 0, 1 ]);
+ callback([ 0, 0 ]);
+
+ test.equal(spy.callCount, 2);
+ test.deepEqual(spy.firstCall.args[0].which, [ 2 ]);
+ test.deepEqual(spy.lastCall.args[0].which, [ 1 ]);
+
+ test.done();
+ },
};
diff --git a/tpl/programs.json b/tpl/programs.json
index 67555587e..219c4dd34 100644
--- a/tpl/programs.json
+++ b/tpl/programs.json
@@ -572,7 +572,7 @@
},
{
"topic": "Keypad",
- "classes": ["Keypad"],
+ "classes": ["Keypad", "Touchpad"],
"examples": [
{
"file": "keypad-analog-vkey.js",
@@ -584,22 +584,30 @@
},
{
"file": "keypad-MPR121.js",
- "title": "Keypad - MPR121"
+ "title": "Touchpad - MPR121"
+ },
+ {
+ "file": "keypad-MPR121_SHIELD.js",
+ "title": "Touchpad - MPR121_SHIELD"
+ },
+ {
+ "file": "keypad-MPR121_KEYPAD.js",
+ "title": "Touchpad - MPR121_KEYPAD"
},
{
"file": "keypad-MPR121-sensitivity.js",
- "title": "Keypad - MPR121, Sensitivity",
+ "title": "Touchpad - MPR121, Sensitivity",
"breadboards": [
- {"name": "keypad-MPR121"}
+ {"name": "keypad-MPR121_SHIELD"}
]
},
{
- "file": "keypad-MPR121QR2.js",
- "title": "Keypad - MPR121QR2"
+ "file": "keypad-MPR121QR2_SHIELD.js",
+ "title": "Touchpad - MPR121QR2_SHIELD"
},
{
"file": "keypad-QTOUCH.js",
- "title": "Keypad - Grove QTouch"
+ "title": "Touchpad - Grove QTouch"
},
{
"file": "keypad-3X4_I2C_NANO_BACKPACK.js",