From f6eaa2c436cee9637be40a3593d16ab7ae783a0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E7=AB=8B=E5=B8=AE?= <3294713004@qq.com>
Date: Thu, 27 Mar 2025 00:05:13 +0800
Subject: [PATCH] =?UTF-8?q?feat(boards):=20=E8=B0=83=E6=95=B4micropython?=
=?UTF-8?q?=5Frobot=E4=B8=8B=20`=E5=88=9B=E5=BB=BA=E5=9B=BE=E5=83=8F`=20?=
=?UTF-8?q?=E5=9B=BE=E5=BD=A2=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../micropython/blocks/display_onboard.js | 36 ++++++++++++
.../micropython/generators/display_onboard.js | 55 +++++++++++++++++++
.../micropython_robot/template.xml | 4 +-
3 files changed, 93 insertions(+), 2 deletions(-)
diff --git a/boards/default_src/micropython/blocks/display_onboard.js b/boards/default_src/micropython/blocks/display_onboard.js
index f5c5316b..b55e9a45 100644
--- a/boards/default_src/micropython/blocks/display_onboard.js
+++ b/boards/default_src/micropython/blocks/display_onboard.js
@@ -921,6 +921,24 @@ export const mixbot_display_image_create = {
}
};
+export const mixbot_display_bitmap_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ this.appendDummyInput('')
+ .setAlign(Blockly.inputs.Align.CENTRE)
+ .appendField(new Blockly.FieldBitmap(mixbot_display_bitmap_create.BITMAP, null, {
+ filledColor: '#000',
+ emptyColor: '#5ba5a5',
+ bgColor: '#e5e7f1'
+ }), 'BITMAP');
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);
+ },
+ BITMAP: Array.from({ length: 5 }, () => new Array(5).fill(0))
+};
+
export const mixbot_display_get_screen_pixel = {
init: function () {
this.setColour(DISPLAY_ONBOARD_HUE);
@@ -992,6 +1010,24 @@ export const bitbot_display_image_create = {
}
};
+export const bitbot_display_bitmap_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ this.appendDummyInput('')
+ .setAlign(Blockly.inputs.Align.CENTRE)
+ .appendField(new Blockly.FieldBitmap(bitbot_display_bitmap_create.BITMAP, null, {
+ filledColor: '#000',
+ emptyColor: '#5ba5a5',
+ bgColor: '#e5e7f1'
+ }), 'BITMAP');
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);
+ },
+ BITMAP: Array.from({ length: 12 }, () => new Array(12).fill(0))
+};
+
export const onboard_tft_show_image_xy = {
init: function () {
this.setColour(DISPLAY_ONBOARD_HUE);
diff --git a/boards/default_src/micropython/generators/display_onboard.js b/boards/default_src/micropython/generators/display_onboard.js
index 21d0dcf2..4a7a5c81 100644
--- a/boards/default_src/micropython/generators/display_onboard.js
+++ b/boards/default_src/micropython/generators/display_onboard.js
@@ -687,6 +687,27 @@ export const mixbot_display_image_create = function (block, generator) {
return [code, generator.ORDER_ATOMIC];
}
+export const mixbot_display_bitmap_create = function (block, generator) {
+ const BITMAP = block.getFieldValue('BITMAP');
+ const data = [];
+ for (let i = 0; i < 5; i++) {
+ let temp = 0;
+ let str = '';
+ for (let k = 0; k < 5; k++) {
+ if (!BITMAP[i][k]) {
+ continue;
+ }
+ temp |= BITMAP[i][k] << k;
+ }
+ str = temp.toString(16);
+ if (str.length == 1) {
+ str = '0' + str;
+ }
+ data.push('\\x' + str);
+ }
+ return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC];
+}
+
export const mixbot_display_get_screen_pixel = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
@@ -749,6 +770,40 @@ export const bitbot_display_image_create = function (block, generator) {
return [code, generator.ORDER_ATOMIC];
}
+export const bitbot_display_bitmap_create = function (block, generator) {
+ const BITMAP = block.getFieldValue('BITMAP');
+ const data = [];
+ for (let i = 0; i < 12; i++) {
+ let temp = 0;
+ let str = '';
+ for (let k = 0; k < 8; k++) {
+ if (!BITMAP[i][k]) {
+ continue;
+ }
+ temp |= BITMAP[i][k] << k;
+ }
+ str = temp.toString(16);
+ if (str.length == 1) {
+ str = '0' + str;
+ }
+ data.push('\\x' + str);
+ temp = 0;
+ str = '';
+ for (let k = 0; k < 4; k++) {
+ if (!BITMAP[i][k]) {
+ continue;
+ }
+ temp |= BITMAP[i][k + 8] << k;
+ }
+ str = temp.toString(16);
+ if (str.length == 1) {
+ str = '0' + str;
+ }
+ data.push('\\x' + str);
+ }
+ return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC];
+}
+
export const onboard_tft_show_image_xy = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
diff --git a/boards/default_src/micropython_robot/template.xml b/boards/default_src/micropython_robot/template.xml
index cdc688bf..f62faaca 100644
--- a/boards/default_src/micropython_robot/template.xml
+++ b/boards/default_src/micropython_robot/template.xml
@@ -1771,8 +1771,8 @@
-
-
+
+