diff --git a/hardware/pigpiod/locales/en-US/pi-gpiod.json b/hardware/pigpiod/locales/en-US/pi-gpiod.json
index 5eaa33e6..8e6bd7b9 100644
--- a/hardware/pigpiod/locales/en-US/pi-gpiod.json
+++ b/hardware/pigpiod/locales/en-US/pi-gpiod.json
@@ -7,6 +7,8 @@
"resistor": "Resistor?",
"readinitial": "Read initial state of pin on deploy/restart?",
"type": "Type",
+ "setfreq": "Set frequency?",
+ "freq": "Frequency",
"initpin": "Initialise pin state?",
"debounce": "Debounce",
"limits": "Limits",
diff --git a/hardware/pigpiod/pi-gpiod.html b/hardware/pigpiod/pi-gpiod.html
index 824399c6..e900d24d 100644
--- a/hardware/pigpiod/pi-gpiod.html
+++ b/hardware/pigpiod/pi-gpiod.html
@@ -381,6 +381,15 @@
+
+
+
+
+
+
+
+ Hz
+
uS
@@ -448,6 +457,8 @@
set: { value:"" },
level: { value:"0" },
out: { value:"out" },
+ setfreq: { value:""},
+ freq: { value:"800" },
sermin: { value:"1000" },
sermax: { value:"2000" }
},
@@ -479,8 +490,9 @@
if ($("#node-input-out").val() === "pwm") {
$('#node-set-tick').hide();
$('#node-set-state').hide();
- $('#node-set-minimax').hide();
$('#node-input-set').prop('checked', false);
+ $('#node-set-freq-tick').show();
+ $('#node-set-minimax').hide();
$("#dig-tip").hide();
$("#pwm-tip").show();
$("#ser-tip").hide();
@@ -488,14 +500,20 @@
else if ($("#node-input-out").val() === "ser") {
$('#node-set-tick').hide();
$('#node-set-state').hide();
- $('#node-set-minimax').show();
$('#node-input-set').prop('checked', false);
+ $('#node-set-freq-tick').hide();
+ $("#node-set-frequency").hide();
+ $('#node-input-setfreq').prop('checked', false);
+ $('#node-set-minimax').show();
$("#dig-tip").hide();
$("#pwm-tip").hide();
$("#ser-tip").show();
}
else {
$('#node-set-tick').show();
+ $('#node-set-freq-tick').hide();
+ $("#node-set-frequency").hide();
+ $('#node-input-setfreq').prop('checked', false);
$('#node-set-minimax').hide();
$("#dig-tip").show();
$("#pwm-tip").hide();
@@ -515,6 +533,16 @@
$("#node-input-set").change(function () { setstate(); });
setstate();
+ var setfreqstate = function () {
+ if ($('#node-input-setfreq').is(":checked")) {
+ $("#node-set-frequency").show();
+ } else {
+ $("#node-set-frequency").hide();
+ }
+ };
+ $("#node-input-setfreq").change(function () { setfreqstate(); });
+ setfreqstate();
+
$('#pinform input').on('change', function() {
this.pin = $("#pinform input[type='radio']:checked").val();
$("#node-input-pin").val(this.pin);
diff --git a/hardware/pigpiod/pi-gpiod.js b/hardware/pigpiod/pi-gpiod.js
index 143629da..3414f83f 100644
--- a/hardware/pigpiod/pi-gpiod.js
+++ b/hardware/pigpiod/pi-gpiod.js
@@ -86,6 +86,10 @@ module.exports = function(RED) {
this.set = n.set || false;
this.level = parseInt(n.level || 0);
this.out = n.out || "out";
+ this.setfreq = n.setfreq || false;
+ this.freq = Number(n.freq || 800);
+ if (this.freq < 5) { this.freq = 5; }
+ if (this.freq > 40000) { this.freq = 40000; }
this.sermin = Number(n.sermin)/100;
this.sermax = Number(n.sermax)/100;
if (this.sermin > this.sermax) {
@@ -146,10 +150,10 @@ module.exports = function(RED) {
} else {
node.status({fill:"green",shape:"dot",text:"node-red:common.status.ok"});
}
- // if (node.out === "pwm") {
- // PiGPIO.set_PWM_frequency(1000);
- // PiGPIO.set_PWM_range(1000);
- // }
+ if (node.setfreq) {
+ PiGPIO.set_PWM_frequency(node.pin,node.freq);
+ }
+ //PiGPIO.set_PWM_range(node.pin,1000);
}
});
}