Let gpiod turn off output in servo mode by sending null or ""

to close #543
This commit is contained in:
Dave Conway-Jones 2019-05-26 15:39:55 +01:00
parent af4eefa5fb
commit b74aacd266
No known key found for this signature in database
GPG Key ID: 9E7F9C73F5168CD4
3 changed files with 34 additions and 24 deletions

View File

@ -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": "*"

View File

@ -427,6 +427,7 @@
and will set the selected physical pin high or low depending on the value passed in.</p>
<p>The initial value of the pin at deploy time can also be set to 0 or 1.</p>
<p>When using PWM and Servo modes, the input value should be a number 0 - 100, and can be floating point.</p>
<p>In Servo mode you can stop the output by sending a <code>msg.payload</code> of <code>null</code> or <code>""</code>.</p>
<p>If using with Docker on Pi then the default Host IP should be <code>172.17.0.1</code>. You will also need to run <code>sudo pigpiod</code> on the host.</p>
<p><b>Note</b>: the pin numbers refer the physical pin numbers on connector P1 as they are easier to locate.</p>
</script>

View File

@ -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) {