diff --git a/boards/default_src/micropython/blocks/sensor_extern.js b/boards/default_src/micropython/blocks/sensor_extern.js
index ad8f8cd6..5249f12a 100644
--- a/boards/default_src/micropython/blocks/sensor_extern.js
+++ b/boards/default_src/micropython/blocks/sensor_extern.js
@@ -2415,4 +2415,41 @@ export const get_keboards_value = {
this.setOutput(true);
this.setInputsInline(true);
}
+}
+
+export const init_init_rotary_encoder = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(Blockly.Msg.MIXLY_SETUP)
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_AS + Blockly.Msg.MIXLY_ROTARY_ENCODER)
+ this.appendValueInput('PIN1')
+ .appendField('PINA#')
+ this.appendValueInput('PIN2')
+ .appendField('PINB#')
+ this.appendValueInput('KEY')
+ .appendField('KEY#')
+ this.appendValueInput('METHOD')
+ .appendField(Blockly.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+export const rotary_key = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_ROTARY_ENCODER)
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.CLOCKWISE + Blockly.Msg.MIXLY_REVOLVE,"ROT_CW"],
+ [Blockly.Msg.ANTI_CLOCKWISE + Blockly.Msg.MIXLY_REVOLVE,"ROT_CCW"],
+ [Blockly.Msg.MIXLY_BUTTON2 + Blockly.Msg.MIXLY_BUTTON_PRESSED, "SW_PRESS"],
+ [Blockly.Msg.MIXLY_BUTTON2 + Blockly.Msg.MIXLY_BUTTON_RELEASED,"SW_RELEASE"]
+ ]),"key")
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
}
\ No newline at end of file
diff --git a/boards/default_src/micropython/generators/sensor_extern.js b/boards/default_src/micropython/generators/sensor_extern.js
index 5b0f9040..f4bb695b 100644
--- a/boards/default_src/micropython/generators/sensor_extern.js
+++ b/boards/default_src/micropython/generators/sensor_extern.js
@@ -1168,4 +1168,22 @@ export const get_keboards_value = function (_, generator) {
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
var code = varName + '.read_keypad()'
return [code, generator.ORDER_ATOMIC];
+}
+
+export const init_init_rotary_encoder = function (_, generator) {
+ generator.definitions_['import_rotary'] = 'import rotary';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var p1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
+ var p2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
+ var key = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
+ var m = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
+ var code = v + " = rotary.Encoder("+ p1 +","+ p2 +","+ key +","+ m +")\n";
+ return code;
+}
+
+export const rotary_key = function (_, generator) {
+ generator.definitions_['import_rotary'] = 'import rotary';
+ var key = this.getFieldValue("key");
+ var code = 'rotary.'+ key ;
+ return [code,generator.ORDER_ATOMIC];
}
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/template.xml b/boards/default_src/micropython_esp32/template.xml
index fb1a65cc..4a0a15ab 100644
--- a/boards/default_src/micropython_esp32/template.xml
+++ b/boards/default_src/micropython_esp32/template.xml
@@ -4349,6 +4349,41 @@
+
+
+
+ var_re
+
+
+
+ 3
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ rotary_cb
+
+
+
+
+
+
+
+
+ rotary_cb
+
+
+
+
diff --git a/boards/default_src/micropython_esp32c2/template.xml b/boards/default_src/micropython_esp32c2/template.xml
index 236cb7f9..ab0d52e9 100644
--- a/boards/default_src/micropython_esp32c2/template.xml
+++ b/boards/default_src/micropython_esp32c2/template.xml
@@ -4260,6 +4260,41 @@
+
+
+
+ var_re
+
+
+
+ 3
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ rotary_cb
+
+
+
+
+
+
+
+
+ rotary_cb
+
+
+
+
diff --git a/boards/default_src/micropython_esp32c3/template.xml b/boards/default_src/micropython_esp32c3/template.xml
index 2f793ddd..78a0b6e7 100644
--- a/boards/default_src/micropython_esp32c3/template.xml
+++ b/boards/default_src/micropython_esp32c3/template.xml
@@ -4144,6 +4144,76 @@
+
+
+
+ var_re
+
+
+
+ 3
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ rotary_cb
+
+
+
+
+
+
+
+
+ rotary_cb
+
+
+
+
+
+
+
+ var_re
+
+
+
+ 3
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ rotary_cb
+
+
+
+
+
+
+
+
+ rotary_cb
+
+
+
+
diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml
index d3a3bfa8..6907f3eb 100644
--- a/boards/default_src/micropython_esp32s3/template.xml
+++ b/boards/default_src/micropython_esp32s3/template.xml
@@ -4610,6 +4610,41 @@
KEYPAD_4_4
+
+
+
+ var_re
+
+
+
+ 3
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ rotary_cb
+
+
+
+
+
+
+
+
+ rotary_cb
+
+
+
+
diff --git a/common/msg/blockly/en.js b/common/msg/blockly/en.js
index 1774377a..2e2e8ea3 100644
--- a/common/msg/blockly/en.js
+++ b/common/msg/blockly/en.js
@@ -3992,4 +3992,6 @@ En.MIXLY_MICROPYTHON_SOCKET_READLINE = 'Readline';
En.MIXLY_MICROPYTHON_SOCKET_READLINE_TOOLTIP = 'Read a line of data, ending with a newline character.';
En.MIXLY_DISPLAY_SCROLL_WAY = 'direction of scrolling';
En.MIXLY_LIGHT_SENSOR2 = 'light sensor';
+En.MIXLY_ROTARY_ENCODER = 'rotary encoder';
+En.MIXLY_REVOLVE = 'revolue';
})();
diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js
index d61c6a14..80694ab8 100644
--- a/common/msg/blockly/zh-hans.js
+++ b/common/msg/blockly/zh-hans.js
@@ -4151,4 +4151,6 @@ ZhHans.MIXLY_MICROPYTHON_SOCKET_READLINE = '接收套接字的一行数据';
ZhHans.MIXLY_MICROPYTHON_SOCKET_READLINE_TOOLTIP = '读取一行数据,以换行符结尾。';
ZhHans.MIXLY_DISPLAY_SCROLL_WAY = '滚动显示方向';
ZhHans.MIXLY_LIGHT_SENSOR2 = '光照传感器';
+ZhHans.MIXLY_ROTARY_ENCODER = '旋转解码器';
+ZhHans.MIXLY_REVOLVE = '旋';
})();
\ No newline at end of file
diff --git a/common/msg/blockly/zh-hant.js b/common/msg/blockly/zh-hant.js
index abce8e1c..c2283004 100644
--- a/common/msg/blockly/zh-hant.js
+++ b/common/msg/blockly/zh-hant.js
@@ -4146,4 +4146,6 @@ ZhHant.MIXLY_MICROPYTHON_SOCKET_READLINE = '接收套接字的一行資料';
ZhHant.MIXLY_MICROPYTHON_SOCKET_READLINE_TOOLTIP = '讀取一行數據,以換行符號結尾。 ';
ZhHant.MIXLY_DISPLAY_SCROLL_WAY = '滾動顯示方向';
ZhHant.MIXLY_LIGHT_SENSOR2 = '光照傳感器';
+ZhHant.MIXLY_ROTARY_ENCODER = '旋轉解碼器';
+ZhHant.MIXLY_REVOLVE = '旋';
})();