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`; +}