From 17fc37240e0a2d29dc35f25037413883a8096f90 Mon Sep 17 00:00:00 2001 From: Irene-Maxine <114802521+Irene-Maxine@users.noreply.github.com> Date: Thu, 29 May 2025 12:29:39 +0800 Subject: [PATCH] =?UTF-8?q?import=20=E5=92=8C=E6=8B=BC=E5=86=99=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../micropython/blocks/display_onboard.js | 36 +++++++++++++++ .../micropython/generators/ai_local.js | 4 +- .../micropython/generators/display_onboard.js | 45 ++++++++++--------- .../micropython_esp32s3/template.xml | 34 +++++++------- common/msg/blockly/zh-hans.js | 1 + 5 files changed, 80 insertions(+), 40 deletions(-) diff --git a/boards/default_src/micropython/blocks/display_onboard.js b/boards/default_src/micropython/blocks/display_onboard.js index fc655bdc..4847b6c9 100644 --- a/boards/default_src/micropython/blocks/display_onboard.js +++ b/boards/default_src/micropython/blocks/display_onboard.js @@ -9,6 +9,15 @@ export const display_show_image = { this.appendValueInput('data') .setCheck([String, "esp32_image", "List", 'Tuple']) .appendField(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING); + var version = Boards.getSelectedBoardKey() + if (version == 'micropython:esp32s3:mixgo_nova'||'micropython:esp32s3:mixgo_sant') { + this.appendDummyInput() + .appendField( Blockly.Msg.MIXLY_synchronize + ':') + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"1"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"0"] + ]),"sync"); + } this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); @@ -34,6 +43,15 @@ export const display_show_image_or_string_delay = { [Blockly.Msg.MICROPYTHON_DISPLAY_YES, "True"], [Blockly.Msg.MICROPYTHON_DISPLAY_NO, "False"] ]), 'center') + var version = Boards.getSelectedBoardKey() + if (version == 'micropython:esp32s3:mixgo_nova'||'micropython:esp32s3:mixgo_sant') { + this.appendDummyInput() + .appendField( Blockly.Msg.MIXLY_synchronize + ':') + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"1"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"0"] + ]),"sync"); + } this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); @@ -1087,6 +1105,15 @@ export const onboard_tft_show_image_xy = { .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_NUMBER); this.appendValueInput('VAR') .appendField(Blockly.Msg.HTML_COLOUR); + var version = Boards.getSelectedBoardKey() + if (version == 'micropython:esp32s3:mixgo_nova'||'micropython:esp32s3:mixgo_sant') { + this.appendDummyInput() + .appendField( Blockly.Msg.MIXLY_synchronize + ':') + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"1"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"0"] + ]),"sync"); + } this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); @@ -1138,6 +1165,15 @@ export const onboard_tft_show_image_or_string_delay = { ]), 'center') this.appendValueInput('VAR') .appendField(Blockly.Msg.HTML_COLOUR); + var version = Boards.getSelectedBoardKey() + if (version == 'micropython:esp32s3:mixgo_nova'||'micropython:esp32s3:mixgo_sant') { + this.appendDummyInput() + .appendField( Blockly.Msg.MIXLY_synchronize + ':') + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"1"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"0"] + ]),"sync"); + } this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); diff --git a/boards/default_src/micropython/generators/ai_local.js b/boards/default_src/micropython/generators/ai_local.js index 85db7da9..c47acf47 100644 --- a/boards/default_src/micropython/generators/ai_local.js +++ b/boards/default_src/micropython/generators/ai_local.js @@ -130,7 +130,7 @@ export const STOP_SCREEN_DISPLAY = function (_, generator) { } export const AI_CAMERA_INIT = function (_, generator) { - generator.definitions_['from_ai_camera_import_AI'] = 'from ai_camera import AI'; + generator.definitions_['import_ai_camera'] = 'import ai_camera'; var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); var cmd = this.getFieldValue('kind'); var code = sub +' = ai_camera.AI(ai_camera.' + cmd + ')\n'; @@ -139,7 +139,7 @@ export const AI_CAMERA_INIT = function (_, generator) { export const GET_QR_CODE_RECOGNITION_DATA = function (_, generator) { var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); - var code = sub + '.code_recognitionn()'; + var code = sub + '.code_recognition()'; return [code, generator.ORDER_ATOMIC]; } diff --git a/boards/default_src/micropython/generators/display_onboard.js b/boards/default_src/micropython/generators/display_onboard.js index 578369f0..0fe969e3 100644 --- a/boards/default_src/micropython/generators/display_onboard.js +++ b/boards/default_src/micropython/generators/display_onboard.js @@ -6,7 +6,8 @@ export const display_show_image = function (_, generator) { if (JSFuncs.getPlatform() === 'Python ESP32-S3') { generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft"; var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT); - var code = "onboard_tft.image(" + data + ", color=0xffff)\n"; + var s = this.getFieldValue('sync'); + var code = "onboard_tft.image(" + data + ", color=0xffff,sync="+ s +")\n"; } else { if (version == "educore") { generator.definitions_['import_' + version + '_oled'] = "from " + version + " import oled"; @@ -24,9 +25,10 @@ export const display_show_image_or_string_delay = function (_, generator) { var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT); var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT); var op = this.getFieldValue('center'); + var s = this.getFieldValue('sync'); if (version == "mixgo_sant" || version == "mixgo_nova") { generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft"; - var code = "onboard_tft.shows(" + data + ", space=" + space + ', center=' + op + ")\n"; + var code = "onboard_tft.shows(" + data + ", space=" + space + ', center=' + op + ",sync="+ s +")\n"; return code; } else if (version == "educore") { generator.definitions_['import_' + version + '_oled'] = "from " + version + " import oled"; @@ -255,7 +257,7 @@ export const display_clear = function (block, generator) { var code = 'onboard_oled.fill(0)\n' + 'onboard_oled.show()\n'; } else if (version == 'mixgo_nova'||'mixgo_sant') { generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft"; - var code = 'onboard_tft.fill(0)\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.fill(0)\n'; } else { generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix"; var code = 'onboard_matrix.fill(0)\n' + 'onboard_matrix.show()\n'; @@ -343,7 +345,7 @@ export const display_bright_point = function (_, generator) { generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft"; var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT); var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT); - var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), 0xffff)\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), 0xffff)\n'; } else { generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix"; var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT); @@ -833,8 +835,9 @@ export const onboard_tft_show_image_xy = function (_, generator) { var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT); var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT); var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); + var s = this.getFieldValue('sync'); if (color.slice(0, 2) == "0x") { - var code = "onboard_tft.image(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', color=' + color + ")\n"; + var code = "onboard_tft.image(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', color='+ color +",sync=" + s +")\n"; } else { const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); @@ -842,7 +845,7 @@ export const onboard_tft_show_image_xy = function (_, generator) { const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = "onboard_tft.image(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', color=0x' + rgb565.toString(16) + ")\n"; + var code = "onboard_tft.image(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', color=0x' + rgb565.toString(16) + ",sync=" + s + ")\n"; } return code; } @@ -866,9 +869,10 @@ export const onboard_tft_show_image_or_string_delay = function (_, generator) { var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT); var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT); var op = this.getFieldValue('center'); + var s = this.getFieldValue('sync'); var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); if (color.slice(0, 2) == "0x") { - var code = "onboard_tft.shows(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', space=' + space + ', center=' + op + ', color=' + color + ")\n"; + var code = "onboard_tft.shows(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', space=' + space + ', center=' + op + ', color=' + color + ",sync=" + s + ")\n"; } else { const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); @@ -876,7 +880,7 @@ export const onboard_tft_show_image_or_string_delay = function (_, generator) { const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = "onboard_tft.shows(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', space=' + space + ', center=' + op + ', color=0x' + rgb565.toString(16) + ")\n"; + var code = "onboard_tft.shows(" + data + ', x=' + x + ', y=' + y + ', size=' + size + ', space=' + space + ', center=' + op + ', color=0x' + rgb565.toString(16) +",sync=" + s +")\n"; } return code; } @@ -912,7 +916,7 @@ export const onboard_tft_display_shape_rect = function (block, generator) { var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); var shape = block.getFieldValue('shape'); if (color.slice(0, 2) == "0x") { - var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + color + ')\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + color + ')\n'; } else { const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); @@ -920,7 +924,7 @@ export const onboard_tft_display_shape_rect = function (block, generator) { const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', 0x' + rgb565.toString(16) + ')\n'; } return code; } @@ -934,7 +938,7 @@ export const onboard_tft_display_hvline = function (block, generator) { //水平 var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); var hv = block.getFieldValue('dir_h_v'); if (color.slice(0, 2) == "0x") { - var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + color + ')\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + color + ')\n'; } else { const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); @@ -942,7 +946,7 @@ export const onboard_tft_display_hvline = function (block, generator) { //水平 const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', 0x' + rgb565.toString(16) + ')\n'; } return code; } @@ -956,15 +960,14 @@ export const onboard_tft_display_line = function (block, generator) { var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC); var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); if (color.slice(0, 2) == "0x") { - var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + color + ')\n' + 'onboard_tft.show()\n'; - } else { + var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + color + ')\n'; const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); const g = parseInt(rgbValues[1]); const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', 0x' + rgb565.toString(16) + ')\n'; } return code; } @@ -985,7 +988,7 @@ export const onboard_tft_bright_point = function (_, generator) { var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT); var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); if (color.slice(0, 2) == "0x") { - var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), ' + color + ")\n" + 'onboard_tft.show()\n'; + var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), ' + color + ")\n"; } else { const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); @@ -993,7 +996,7 @@ export const onboard_tft_bright_point = function (_, generator) { const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), 0x' + rgb565.toString(16) + ")\n" + 'onboard_tft.show()\n'; + var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), 0x' + rgb565.toString(16) + ")\n"; } return code; } @@ -1003,7 +1006,7 @@ export const onboard_tft_fill = function (_, generator) { generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft"; var color = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT); if (color.slice(0, 2) == "0x") { - var code = 'onboard_tft.fill(' + color + ')\nonboard_tft.show()\n'; + var code = 'onboard_tft.fill(' + color + ')\n'; } else { const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); @@ -1011,7 +1014,7 @@ export const onboard_tft_fill = function (_, generator) { const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = 'onboard_tft.fill(0x' + rgb565.toString(16) + ')\nonboard_tft.show()\n'; + var code = 'onboard_tft.fill(0x' + rgb565.toString(16) + ')\n'; } return code; } @@ -1093,7 +1096,7 @@ export const onboard_tft_display_shape_circle = function (block, generator) { var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC); var shape = block.getFieldValue('shape'); if (color.slice(0, 2) == "0x") { - var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', ' + color + ', ' + shape + ')\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', ' + color + ', ' + shape + ')\n'; } else { const rgbValues = color.match(/\d+/g); const r = parseInt(rgbValues[0]); @@ -1101,7 +1104,7 @@ export const onboard_tft_display_shape_circle = function (block, generator) { const b = parseInt(rgbValues[2]); var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0"); var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3; - var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', 0x' + rgb565.toString(16) + ', ' + shape + ')\n' + 'onboard_tft.show()\n'; + var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', 0x' + rgb565.toString(16) + ', ' + shape + ')\n'; } return code; } diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml index 7813b4f3..2e6b6b88 100644 --- a/boards/default_src/micropython_esp32s3/template.xml +++ b/boards/default_src/micropython_esp32s3/template.xml @@ -1864,23 +1864,6 @@ - - - - 0 - - - - - 0 - - - - - 12.jpg - - - @@ -1928,6 +1911,23 @@ + + + + 0 + + + + + 0 + + + + + 12.jpg + + + diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js index aa7861a0..3e3a09fa 100644 --- a/common/msg/blockly/zh-hans.js +++ b/common/msg/blockly/zh-hans.js @@ -4121,4 +4121,5 @@ ZhHans.MIXLY_NOSE = '鼻子'; ZhHans.MIXLY_LEFT_MOUSE_CORNER = '左嘴角'; ZhHans.MIXLY_RIGHT_MOUSE_CORNER = '右嘴角'; ZhHans.MIXLY_RECOGNITION_RECGNITION = '识别'; +ZhHans.MIXLY_synchronize = '实时刷新'; })(); \ No newline at end of file