Add pullup option to Arduino digital input

to Close #455
This commit is contained in:
Dave Conway-Jones 2018-06-27 21:36:06 +01:00
parent 76a221919a
commit 88f7f52f99
No known key found for this signature in database
GPG Key ID: 9E7F9C73F5168CD4
5 changed files with 15 additions and 4 deletions

View File

@ -6,8 +6,9 @@
</div>
<div class="form-row">
<label for="node-input-state"><i class="fa fa-wrench"></i> <span data-i18n="arduino.label.type"></span></label>
<select type="text" id="node-input-state" style="width: 150px;">
<select type="text" id="node-input-state" style="width:200px;">
<option value="INPUT" data-i18n="arduino.state.in.digital"></option>
<option value="PULLUP" data-i18n="arduino.state.in.pullup"></option>
<option value="ANALOG" data-i18n="arduino.state.in.analogue"></option>
<option value="STRING" data-i18n="arduino.state.in.string"></option>
</select>
@ -66,7 +67,7 @@
</div>
<div class="form-row">
<label for="node-input-state"><i class="fa fa-wrench"></i> <span data-i18n="arduino.label.type"></span></label>
<select type="text" id="node-input-state" style="width: 200px;">
<select type="text" id="node-input-state" style="width:200px;">
<option value="OUTPUT" data-i18n="arduino.state.out.digital"></option>
<option value="PWM" data-i18n="arduino.state.out.analogue"></option>
<option value="SERVO" data-i18n="arduino.state.out.servo"></option>

View File

@ -78,6 +78,15 @@ module.exports = function(RED) {
}
});
}
if (node.state === "PULLUP") {
node.board.pinMode(node.pin, 0x0B);
node.board.digitalRead(node.pin, function(v) {
if (v !== node.oldval) {
node.oldval = v;
node.send({payload:v, topic:node.pin});
}
});
}
if (node.state == "STRING") {
node.board.on('string', function(v) {
if (v !== node.oldval) {

View File

@ -23,7 +23,7 @@ details and examples of how to use this node.
Connects to local Arduino and monitors the selected pin for changes.
You can select either **Digital**, **Analogue**, or **String** input type.
You can select either **Digital**, **Pullup**, **Analogue**, or **String** input type.
Outputs the value read as `msg.payload` and the pin number as `msg.topic`.
It only outputs on a change of value - fine for digital inputs, but you can get a lot of data from analogue pins which you must then handle. For example you could use a `delay` node set to rate limit and drop intermediate values, or an `rbe` node to only report when it changes by a certain amount.

View File

@ -18,6 +18,7 @@
"state": {
"in": {
"digital": "Digital pin",
"pullup": "Digital pin with pullup",
"analogue": "Analogue pin",
"string": "String"
},

View File

@ -1,6 +1,6 @@
{
"name" : "node-red-node-arduino",
"version" : "0.0.17",
"version" : "0.0.18",
"description" : "A Node-RED node to talk to an Arduino running firmata",
"dependencies" : {
"firmata" : "~0.19.1"