diff --git a/clover_blocks/www/blocks.js b/clover_blocks/www/blocks.js
index 02514ec9..8757cb83 100644
--- a/clover_blocks/www/blocks.js
+++ b/clover_blocks/www/blocks.js
@@ -583,3 +583,20 @@ Blockly.Blocks['set_servo'] = {
this.setHelpUrl(DOCS_URL + '#GPIO');
}
};
+
+Blockly.Blocks['set_duty_cycle'] = {
+ init: function () {
+ this.appendValueInput("PIN")
+ .setCheck("Number")
+ .appendField("set GPIO pin");
+ this.appendValueInput("DUTY_CYCLE")
+ .setCheck("Number")
+ .appendField("to duty cycle");
+ this.setInputsInline(true);
+ this.setColour(COLOR_GPIO);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip("Set PWM duty cycle on a GPIO pin (better to control LEDs, etc). Duty cycle is set in range of 0–1.");
+ this.setHelpUrl(DOCS_URL + '#GPIO');
+ }
+};
diff --git a/clover_blocks/www/index.html b/clover_blocks/www/index.html
index 770325d8..6383f41c 100644
--- a/clover_blocks/www/index.html
+++ b/clover_blocks/www/index.html
@@ -120,6 +120,10 @@
1
1500
+
+ 1
+ 0.5
+
diff --git a/clover_blocks/www/python.js b/clover_blocks/www/python.js
index a598ad68..b8ee9510 100644
--- a/clover_blocks/www/python.js
+++ b/clover_blocks/www/python.js
@@ -430,6 +430,10 @@ const SET_SERVO = `\ndef set_servo(pin, pwm):
pi.set_mode(pin, pigpio.OUTPUT)
pi.set_servo_pulsewidth(pin, pwm)\n`;
+const SET_DUTY_CYCLE = `\ndef set_duty_cycle(pin, duty_cycle):
+ pi.set_mode(pin, pigpio.OUTPUT)
+ pi.set_PWM_dutycycle(pin, duty_cycle * 255)\n`;
+
Blockly.Python.gpio_read = function(block) {
pigpio();
Blockly.Python.definitions_['gpio_read'] = GPIO_READ;
@@ -452,3 +456,11 @@ Blockly.Python.set_servo = function(block) {
var pwm = Blockly.Python.valueToCode(block, 'PWM', Blockly.Python.ORDER_NONE);
return `set_servo(${pin}, ${pwm})\n`;
}
+
+Blockly.Python.set_duty_cycle = function(block) {
+ pigpio();
+ Blockly.Python.definitions_['set_duty_cycle'] = SET_DUTY_CYCLE;
+ var pin = Blockly.Python.valueToCode(block, 'PIN', Blockly.Python.ORDER_NONE);
+ var dutyCycle = Blockly.Python.valueToCode(block, 'DUTY_CYCLE', Blockly.Python.ORDER_NONE);
+ return `set_duty_cycle(${pin}, ${dutyCycle})\n`;
+}