diff --git a/boards/default_src/micropython/blocks/sensor_extern.js b/boards/default_src/micropython/blocks/sensor_extern.js
index 2154a6d0..12828134 100644
--- a/boards/default_src/micropython/blocks/sensor_extern.js
+++ b/boards/default_src/micropython/blocks/sensor_extern.js
@@ -2299,4 +2299,99 @@ export const weigh_sensor_get_weight = {
this.setOutput(true);
this.setInputsInline(true);
}
-};
\ No newline at end of file
+};
+
+export const init_matrix_keyboard = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_Keypad)
+ .setAlign(Blockly.ALIGN_RIGHT)
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldTextInput(''), 'VAR')
+ .setAlign(Blockly.ALIGN_RIGHT)
+ this.appendValueInput('VALUE1')
+ .appendField(Blockly.Msg.MIXLY_line_tube_foot + '#')
+ .setAlign(Blockly.ALIGN_RIGHT)
+ this.appendValueInput('VALUE2')
+ .appendField(Blockly.Msg.MIXLY_column_tube_foot + '#')
+ .setAlign(Blockly.ALIGN_RIGHT)
+ this.appendValueInput('VALUE3')
+ .appendField(Blockly.Msg.MIXLY_DEFINE_KEYBOARDS)
+ .setAlign(Blockly.ALIGN_RIGHT)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(false);
+ }
+}
+
+export const line_tube_foot ={
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('PIN1')
+ .appendField('1#')
+ this.appendValueInput('PIN2')
+ .appendField('2#')
+ this.appendValueInput('PIN3')
+ .appendField('3#')
+ this.appendValueInput('PIN4')
+ .appendField('4#')
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+export const column_tube_foot = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('PIN1')
+ .appendField('1#')
+ this.appendValueInput('PIN2')
+ .appendField('2#')
+ this.appendValueInput('PIN3')
+ .appendField('3#')
+ this.appendValueInput('PIN4')
+ .appendField('4#')
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+export const define_keyboards = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldTextInput(''), 'VAR1')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR2')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR3')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR4')
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldTextInput(''), 'VAR5')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR6')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR7')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR8')
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldTextInput(''), 'VAR9')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR10')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR11')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR12')
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldTextInput(''), 'VAR13')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR14')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR15')
+ .appendField(new Blockly.FieldTextInput(''), 'VAR16')
+ this.setOutput(true);
+ this.setInputsInline(false);
+ }
+}
+
+export const get_keboards_value = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldTextInput(''), 'VAR')
+ .appendField(Blockly.Msg.MIXLY_Keypad_GETKEY)
+ 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 9f4dbc34..d6dd28ee 100644
--- a/boards/default_src/micropython/generators/sensor_extern.js
+++ b/boards/default_src/micropython/generators/sensor_extern.js
@@ -1087,4 +1087,71 @@ export const weigh_sensor_get_weight = function (_, generator) {
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var code = v + ".read_weight(10)";
return [code, generator.ORDER_ATOMIC];
+}
+
+export const line_tube_foot = function (_, generator) {
+ generator.definitions_['import_machine_Pin'] = "from machine import Pin";
+ generator.definitions_['import_keypad_Keypad'] = "from keypad import Keypad";
+ var pin1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
+ var pin2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
+ var pin3 = generator.valueToCode(this, 'PIN3', generator.ORDER_ATOMIC);
+ var pin4 = generator.valueToCode(this, 'PIN4', generator.ORDER_ATOMIC);
+ var code = '[Pin(' + pin1 +'),Pin(' + pin2 +'),Pin(' + pin3 +'),Pin(' + pin4 +')]';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const column_tube_foot = function (_, generator) {
+ generator.definitions_['import_machine_Pin'] = "from machine import Pin";
+ generator.definitions_['import_keypad_Keypad'] = "from keypad import Keypad";
+ var pin1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
+ var pin2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
+ var pin3 = generator.valueToCode(this, 'PIN3', generator.ORDER_ATOMIC);
+ var pin4 = generator.valueToCode(this, 'PIN4', generator.ORDER_ATOMIC);
+ var code = '[Pin(' + pin1 +'),Pin(' + pin2 +'),Pin(' + pin3 +'),Pin(' + pin4 +')]';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const define_keyboards = function (_, generator) {
+ generator.definitions_['import_machine_Pin'] = "from machine import Pin";
+ generator.definitions_['import_keypad_Keypad'] = "from keypad import Keypad";
+ var var1 = this.getFieldValue('VAR1');
+ var var2 = this.getFieldValue('VAR2');
+ var var3 = this.getFieldValue('VAR3');
+ var var4 = this.getFieldValue('VAR4');
+ var var5 = this.getFieldValue('VAR5');
+ var var6 = this.getFieldValue('VAR6');
+ var var7 = this.getFieldValue('VAR7');
+ var var8 = this.getFieldValue('VAR8');
+ var var9 = this.getFieldValue('VAR9');
+ var var10 = this.getFieldValue('VAR10');
+ var var11 = this.getFieldValue('VAR11');
+ var var12 = this.getFieldValue('VAR12');
+ var var13 = this.getFieldValue('VAR13');
+ var var14 = this.getFieldValue('VAR14');
+ var var15 = this.getFieldValue('VAR15');
+ var var16 = this.getFieldValue('VAR16');
+ var code = "[\n['"+var1+"','"+var2+"','"+var3+"','"+var4+"'],\n['"+var5+"','"+var6+"','"+var7+"','"+var8+"'],\n['"+var9+"','"+var10+"','"+var11+"','"+var12+"'],\n['"+var13+"','"+var14+"','"+var15+"','"+var16+"']]"
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const init_matrix_keyboard = function (_, generator) {
+ generator.definitions_['import_machine_Pin'] = "from machine import Pin";
+ generator.definitions_['import_keypad_Keypad'] = "from keypad import Keypad";
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
+ var argument1 = generator.valueToCode(this, 'VALUE1',
+ generator.ORDER_ASSIGNMENT) || 'None';
+ var argument2 = generator.valueToCode(this, 'VALUE2',
+ generator.ORDER_ASSIGNMENT) || 'None';
+ var argument3 = generator.valueToCode(this, 'VALUE3',
+ generator.ORDER_ASSIGNMENT) || 'None';
+ var code = varName +'= Keypad('+ argument1 +','+argument2+','+argument3+')'
+ return code;
+}
+
+export const get_keboards_value = function (_, generator) {
+ generator.definitions_['import_machine_Pin'] = "from machine import Pin";
+ generator.definitions_['import_keypad_Keypad'] = "from keypad import Keypad";
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
+ var code = varName + '.read_keypad()'
+ return [code, generator.ORDER_ATOMIC];
}
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32s3/origin/config.json b/boards/default_src/micropython_esp32s3/origin/config.json
index 60790603..ca17fc32 100644
--- a/boards/default_src/micropython_esp32s3/origin/config.json
+++ b/boards/default_src/micropython_esp32s3/origin/config.json
@@ -1,7 +1,8 @@
{
"board": {
"元控青春": "micropython:esp32s3:mixgo_nova",
- "元控自强": "micropython:esp32s3:mixgo_sant"
+ "元控自强": "micropython:esp32s3:mixgo_sant",
+ "S3_generic":"micropython:esp32s3:generic"
},
"language": "MicroPython",
"burn": {
diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml
index 06f165d5..fe5b8152 100644
--- a/boards/default_src/micropython_esp32s3/template.xml
+++ b/boards/default_src/micropython_esp32s3/template.xml
@@ -1380,10 +1380,8 @@
-
+ m-hide='micropython:esp32s3:generic'>
@@ -1542,7 +1540,7 @@
+ m-hide='micropython:esp32s3:generic'>
@@ -1829,7 +1827,7 @@
-
+
@@ -2587,7 +2585,7 @@
-
+
@@ -3104,7 +3102,7 @@
-
+
@@ -3895,36 +3893,7 @@
-
-
+
@@ -4522,8 +4491,75 @@
+
+ KEYPAD_4_4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+ 3
+ A
+ 4
+ 5
+ 6
+ B
+ 7
+ 8
+ 9
+ C
+ *
+ 0
+ #
+ D
+
+
+
+
+ KEYPAD_4_4
+
+
-
+
@@ -4958,7 +4994,7 @@
-
+
@@ -5967,7 +6003,7 @@
-
+
@@ -6386,7 +6422,7 @@
-
+
@@ -6751,43 +6787,8 @@
-
-
-
+
@@ -6953,7 +6954,7 @@
-
+
@@ -7327,7 +7328,7 @@
-->
-
+
response
diff --git a/common/msg/blockly/en.js b/common/msg/blockly/en.js
index 73e1e130..18a6d3ea 100644
--- a/common/msg/blockly/en.js
+++ b/common/msg/blockly/en.js
@@ -3964,4 +3964,7 @@ En.MIXLY_synchronize = 'Synchronize';
En.MIXLY_Display_long_text = 'Display long text';
En.MIXLY_BROADCAST_SYSTEM_TIME = 'Broadcast system time';
En.MIXLY_DETAILED = 'Detailed';
+En.MIXLY_line_tube_foot = 'line tube foot';
+En.MIXLY_column_tube_foot = 'column tube foot';
+En.MIXLY_DEFINE_KEYBOARDS= 'define the keyboard';
})();
diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js
index 91c124de..f38a0ac5 100644
--- a/common/msg/blockly/zh-hans.js
+++ b/common/msg/blockly/zh-hans.js
@@ -4123,4 +4123,7 @@ ZhHans.MIXLY_synchronize = '实时刷新';
ZhHans.MIXLY_Display_long_text = '显示长文本';
ZhHans.MIXLY_BROADCAST_SYSTEM_TIME = '播报系统时间';
ZhHans.MIXLY_DETAILED = '详细地';
+ZhHans.MIXLY_line_tube_foot = '行管脚';
+ZhHans.MIXLY_column_tube_foot = '列管脚';
+ZhHans.MIXLY_DEFINE_KEYBOARDS= '定义键盘';
})();
\ No newline at end of file
diff --git a/common/msg/blockly/zh-hant.js b/common/msg/blockly/zh-hant.js
index 1bf8a03f..00344fa6 100644
--- a/common/msg/blockly/zh-hant.js
+++ b/common/msg/blockly/zh-hant.js
@@ -4118,4 +4118,7 @@ ZhHant.MIXLY_synchronize = '實時刷新';
ZhHant.MIXLY_Display_long_text = '顯示長文本';
ZhHant.MIXLY_BROADCAST_SYSTEM_TIME = '播報系統時間';
ZhHant.MIXLY_DETAILED = '詳細地';
+ZhHant.MIXLY_line_tube_foot = '行管腳';
+ZhHant.MIXLY_column_tube_foot = '列管腳';
+ZhHant.MIXLY_DEFINE_KEYBOARDS= '定義鍵盤';
})();
\ No newline at end of file