From b74aacd266f12fe765a0fd90a299e1cafc7ffea0 Mon Sep 17 00:00:00 2001
From: Dave Conway-Jones
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) {