diff --git a/hardware/pigpiod/package.json b/hardware/pigpiod/package.json index d8ecd235..82474b44 100644 --- a/hardware/pigpiod/package.json +++ b/hardware/pigpiod/package.json @@ -1,6 +1,6 @@ { "name": "node-red-node-pi-gpiod", - "version": "0.0.11", + "version": "0.0.12", "description": "A node-red node for PiGPIOd", "dependencies" : { "js-pigpio": "*" diff --git a/hardware/pigpiod/pi-gpiod.html b/hardware/pigpiod/pi-gpiod.html index 824399c6..859070d8 100644 --- a/hardware/pigpiod/pi-gpiod.html +++ b/hardware/pigpiod/pi-gpiod.html @@ -427,6 +427,7 @@ and will set the selected physical pin high or low depending on the value passed in.

The initial value of the pin at deploy time can also be set to 0 or 1.

When using PWM and Servo modes, the input value should be a number 0 - 100, and can be floating point.

+

In Servo mode you can stop the output by sending a msg.payload of null or "".

If using with Docker on Pi then the default Host IP should be 172.17.0.1. You will also need to run sudo pigpiod on the host.

Note: the pin numbers refer the physical pin numbers on connector P1 as they are easier to locate.

diff --git a/hardware/pigpiod/pi-gpiod.js b/hardware/pigpiod/pi-gpiod.js index 143629da..0da0c0e6 100644 --- a/hardware/pigpiod/pi-gpiod.js +++ b/hardware/pigpiod/pi-gpiod.js @@ -99,32 +99,41 @@ module.exports = function(RED) { var PiGPIO; function inputlistener(msg) { - if (msg.payload === "true") { msg.payload = true; } - if (msg.payload === "false") { msg.payload = false; } - var out = Number(msg.payload); - var limit = 1; - if (node.out !== "out") { limit = 100; } - var pre = ""; - if ((out >= 0) && (out <= limit)) { - if (RED.settings.verbose) { node.log("out: "+msg.payload); } + if (node.out === "ser" && (msg.payload === null || msg.payload === "")) { if (!inerror) { - if (node.out === "out") { - PiGPIO.write(node.pin, msg.payload); - } - if (node.out === "pwm") { - PiGPIO.set_PWM_dutycycle(node.pin, parseInt(msg.payload * 2.55)); - } - if (node.out === "ser") { - var r = (node.sermax - node.sermin) * 100; - PiGPIO.setServoPulsewidth(node.pin, parseInt(1500 - (r/2) + (msg.payload * r / 100))); - } - node.status({fill:"green",shape:"dot",text:msg.payload.toString()}); - } - else { - node.status({fill:"grey",shape:"ring",text:"N/C: " + msg.payload.toString()}); + PiGPIO.setServoPulsewidth(node.pin, 0); + node.status({fill:"green",shape:"dot",text:""}); } + else { node.status({fill:"grey",shape:"ring",text:"N/C: " + msg.payload.toString()}); } + } + else { + if (msg.payload === "true") { msg.payload = true; } + if (msg.payload === "false") { msg.payload = false; } + var out = Number(msg.payload); + var limit = 1; + if (node.out !== "out") { limit = 100; } + var pre = ""; + if ((out >= 0) && (out <= limit)) { + if (RED.settings.verbose) { node.log("out: "+msg.payload); } + if (!inerror) { + if (node.out === "out") { + PiGPIO.write(node.pin, msg.payload); + } + if (node.out === "pwm") { + PiGPIO.set_PWM_dutycycle(node.pin, parseInt(msg.payload * 2.55)); + } + if (node.out === "ser") { + var r = (node.sermax - node.sermin) * 100; + PiGPIO.setServoPulsewidth(node.pin, parseInt(1500 - (r/2) + (msg.payload * r / 100))); + } + node.status({fill:"green",shape:"dot",text:msg.payload.toString()}); + } + else { + node.status({fill:"grey",shape:"ring",text:"N/C: " + msg.payload.toString()}); + } + } + else { node.warn(RED._("pi-gpiod:errors.invalidinput")+": "+out); } } - else { node.warn(RED._("pi-gpiod:errors.invalidinput")+": "+out); } } if (node.pin !== undefined) {