UNPKG

@mixly/micropython

Version:
1,264 lines (1,209 loc) 69.4 kB
import * as Blockly from 'blockly/core'; const DISPLAY_EXTERN_HUE = '5BA5A5'; //var IMG = [["HEART", "HEART"],["HEART_SMALL", "HEART_SMALL"],["HAPPY", "HAPPY"],["SAD", "SAD"],["SMILE", "SMILE"],["SILLY", "SILLY"],["FABULOUS", "FABULOUS"],["SURPRISED", "SURPRISED"],["ASLEEP", "ASLEEP"],["ANGRY", "ANGRY"],["CONFUSED", "CONFUSED"],["NO", "NO"],["YES", "YES"],["LEFT_ARROW", "LEFT_ARROW"],["RIGHT_ARROW", "RIGHT_ARROW"],["DRESS", "DRESS"],["TRANSFORMERS", "TRANSFORMERS"],["SCISSORS", "SCISSORS"],["EXIT", "EXIT"],["TREE", "TREE"],["PACMAN", "PACMAN"],["TARGET", "TARGET"],["TSHIRT", "TSHIRT"],["ROLLERSKATE", "ROLLERSKATE"],["DUCK", "DUCK"],["HOUSE", "HOUSE"],["TORTOISE", "TORTOISE"],["BUTTERFLY", "BUTTERFLY"],["STICKFIGURE", "STICKFIGURE"],["GHOST", "GHOST"],["PITCHFORK", "PITCHFORK"],["MUSIC_QUAVERS", "MUSIC_QUAVERS"],["MUSIC_QUAVER", "MUSIC_QUAVER"],["MUSIC_CROTCHET", "MUSIC_CROTCHET"],["COW", "COW"],["RABBIT", "RABBIT"],["SQUARE_SMALL", "SQUARE_SMALL"],["SQUARE", "SQUARE"],["DIAMOND_SMALL", "DIAMOND_SMALL"],["DIAMOND", "DIAMOND"],["CHESSBOARD", "CHESSBOARD"],["TRIANGLE_LEFT", "TRIANGLE_LEFT"],["TRIANGLE", "TRIANGLE"],["SNAKE", "SNAKE"],["UMBRELLA", "UMBRELLA"],["SKULL", "SKULL"],["GIRAFFE", "GIRAFFE"],["SWORD", "SWORD"]]; // var IMG = [["HEART", "HEART"], ["HEART_SMALL", "HEART_SMALL"], ["HAPPY", "HAPPY"], ["SAD", "SAD"], ["SMILE", "SMILE"], ["SILLY", "SILLY"], ["FABULOUS", "FABULOUS"], ["SURPRISED", "SURPRISED"], ["ASLEEP", "ASLEEP"], ["ANGRY", "ANGRY"], ["CONFUSED", "CONFUSED"], ["NO", "NO"], ["YES", "YES"]]; export const display_matrix_use_i2c_init = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('I2CSUB') .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "I2C") .setCheck("var"); this.appendValueInput('SUB') .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO) .appendField(new Blockly.FieldDropdown([ ["32x12 Matrix", "32x12 Matrix"], ["16x8 Matrix", "16x8 Matrix"] ]), "key"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); } }; export const display_matrix_extern_show_image = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('data') .setCheck([String, "esp32_image", "List", 'Tuple']) .appendField(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING); } }; export const display_matrix_extern_show_image_or_string_delay = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .setCheck("var"); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.OLED_DRAWSTR); this.appendValueInput("space") .setCheck(Number) .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE); this.appendDummyInput("") .appendField(Blockly.Msg.TEXT_CENTER) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MICROPYTHON_DISPLAY_YES, "True"], [Blockly.Msg.MICROPYTHON_DISPLAY_NO, "False"] ]), 'center') this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY); } }; export const display_matrix_extern_scroll_string = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); } }; export const display_matrix_extern_scroll_string_delay = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING); this.appendValueInput("space") .setCheck(Number) .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE); this.appendValueInput("time") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY); } }; export const display_matrix_extern_show_frame_string = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); } }; export const display_matrix_extern_show_frame_string_delay = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME); this.appendValueInput("time") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); } }; export const display_matrix_extern_shift = { init: function () { //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL); this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); // this.setOutput(true); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.appendDummyInput('') .appendField(Blockly.Msg.DISPLAY_IMAGE_LET) this.appendDummyInput('') .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2) .appendField(new Blockly.FieldDropdown(display_matrix_extern_shift.OPERATORS), 'OP'); this.appendValueInput('val') .appendField(Blockly.Msg.DISPLAY_IMAGE_SHIFT) .setCheck(Number); this.appendDummyInput('') .appendField(Blockly.Msg.DISPLAY_IMAGE_UNIT) var thisBlock = this; this.setTooltip(function () { var mode = thisBlock.getFieldValue('OP'); var mode0 = Blockly.Msg.DISPLAY_IMAGE_LET; var mode1 = Blockly.Msg.DISPLAY_IMAGE_LET2; var mode2 = Blockly.Msg.DISPLAY_IMAGE_LET3; var TOOLTIPS = { 'up': Blockly.Msg.MIXLY_UP, 'down': Blockly.Msg.MIXLY_DOWN, 'left': Blockly.Msg.MIXLY_LEFT, 'right': Blockly.Msg.MIXLY_RIGHT }; return mode0 + mode1 + TOOLTIPS[mode] + mode2; }); }, OPERATORS: [ [Blockly.Msg.MIXLY_UP, 'shift_up'], [Blockly.Msg.MIXLY_DOWN, 'shift_down'], [Blockly.Msg.MIXLY_LEFT, 'shift_left'], [Blockly.Msg.MIXLY_RIGHT, 'shift_right'], ] }; export const display_matrix_extern_get_pixel = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('x') .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X); this.appendValueInput('y') .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT); this.setInputsInline(true); this.setOutput(true, Number); this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS); } }; export const display_matrix_extern_bright_point = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('x') .setCheck(Number) .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X); this.appendValueInput('y') .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y); this.appendValueInput("STAT") .setCheck([Number, Boolean]); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL); } }; export const display_matrix_extern_get_screen_pixel = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS); this.setInputsInline(true); this.setOutput(true, Number); this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS); } }; export const display_matrix_extern_bright_screen = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('x') .setCheck(Number) .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS) this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0'); } }; export const display_matrix_extern_clear = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_MICROBIT_Clear_display); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display); } }; export const display_matrix_extern_image_builtins = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_MICROBIT_Built_in_image1) .appendField(new Blockly.FieldDropdown(display_matrix_extern_image_builtins.OPERATORS), 'image'); this.setOutput(true, "esp32_image"); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display); }, OPERATORS: [ ["HEART", "HEART"], ["HEART_SMALL", "HEART_SMALL"], ["HAPPY", "HAPPY"], ["SAD", "SAD"], ["SMILE", "SMILE"], ["SILLY", "SILLY"], ["FABULOUS", "FABULOUS"], ["SURPRISED", "SURPRISED"], ["ASLEEP", "ASLEEP"], ["ANGRY", "ANGRY"], ["CONFUSED", "CONFUSED"], ["NO", "NO"], ["YES", "YES"] ] }; export const matrix_extern_image_arithmetic = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.setOutput(true, "esp32_image"); this.appendValueInput('A') // .setCheck(["esp32_image", "List", String]) .appendField(Blockly.Msg.MICROBIT_DISPLAY_MERGE_SHAPE); this.appendValueInput('B') // .setCheck(["esp32_image", "List", String]) .appendField(new Blockly.FieldDropdown(matrix_extern_image_arithmetic.OPERATORS), 'OP'); this.setInputsInline(true); var thisBlock = this; this.setTooltip(function () { var mode = thisBlock.getFieldValue('OP'); var TOOLTIPS = { '+': Blockly.Msg.MIXLY_MICROBIT_image_add, '-': Blockly.Msg.MIXLY_MICROBIT_image_reduce }; return TOOLTIPS[mode]; }); }, OPERATORS: [ [Blockly.Msg.MICROBIT_DISPLAY_UNION, 'add'], [Blockly.Msg.MICROBIT_DISPLAY_MINUS, 'sub'] ] }; export const matrix_extern_image_invert = { init: function () { this.appendValueInput('SUB') .setCheck("var"); this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('A') .setCheck("esp32_image") .appendField(Blockly.Msg.MIXLY_MICROBIT_Invert_image1); this.setInputsInline(true); this.setOutput(true, "esp32_image"); } }; //oled export const display_use_i2c_init = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('I2CSUB') .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "I2C") .setCheck("var"); this.appendValueInput('SUB') .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE) .setCheck("var"); // this.appendDummyInput("") // .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + "OLED") // .appendField(new Blockly.FieldDropdown([ // ["OLED 128¡Á64", "OLED 128¡Á64"] // ]), "key"); this.appendValueInput('row') .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + "OLED") .setCheck(Number); this.appendValueInput('column') .appendField("X") .setCheck(Number); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(); } }; export const display_draw_4strings = { init: function () { // this.appendDummyInput() // .appendField(Blockly.Msg.OLED) // this.appendDummyInput("") // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR') // .appendField(Blockly.Msg.OLEDDISPLAY); //.appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/display-oled-128x64-i2c/display-oled-128x64-i2c.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize)); this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) .setCheck("var"); this.appendValueInput("Text_line1", 'String') .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.OLEDDISPLAY + Blockly.Msg.line1); this.appendValueInput("Text_line2", 'String') .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.line2); this.appendValueInput("Text_line3", 'String') .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.line3); this.appendValueInput("Text_line4", 'String') .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.line4); this.setInputsInline(false); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(DISPLAY_EXTERN_HUE); this.setTooltip(Blockly.Msg.MIXLY_DF_LCD + Blockly.Msg.OLEDDISPLAY + Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING); } }; export const display_image_size = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_MICROBIT_IMAGE); this.appendValueInput('VAR') .setCheck("esp32_image") // .appendField(Blockly.Msg.blockpy_USE_LIST); this.appendDummyInput("") .appendField(new Blockly.FieldDropdown(display_image_size.OPERATORS), 'OP'); this.setInputsInline(true); this.setOutput(true); var thisBlock = this; this.setTooltip(function () { var mode = thisBlock.getFieldValue('OP'); var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET; var mode1 = Blockly.Msg.MIXLY_MICROBIT_IMAGE var TOOLTIPS = { 'height': Blockly.Msg.MIXLY_HEIGHT, 'width': Blockly.Msg.MIXLY_WIDTH, }; return mode0 + mode1 + TOOLTIPS[mode]; }); }, OPERATORS: [ [Blockly.Msg.MIXLY_HEIGHT, 'height'], [Blockly.Msg.MIXLY_WIDTH, 'width'] ] }; export const display_rect = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); // this.appendDummyInput() // .appendField(Blockly.Msg.OLED) // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR') this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_RECT) .appendField(new Blockly.FieldDropdown(display_rect.STATUS), 'OP') // this.appendValueInput("PIN", Number) // .setCheck(Number) // .setAlign(Blockly.inputs.Align.RIGHT) // .appendField(Blockly.Msg.MIXLY_PIN); this.jsonInit({ "message0": Blockly.Msg.MIXLY_MICROBIT_SHOW_RECT, "args0": [ { "check": Number, "type": "input_value", "name": "x" }, { "check": Number, "type": "input_value", "name": "y" }, { "check": Number, "type": "input_value", "name": "width" }, { "check": Number, "type": "input_value", "name": "height" }, { "type": "input_dummy" }, { "checked": false, "type": "field_checkbox", "name": "fill" } ] }); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(''); this.setTooltip(Blockly.Msg.MIXLY_OLED_RECT); }, STATUS: [ [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'], [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0'] ] }; export const display_line = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); // this.appendDummyInput() // .appendField(Blockly.Msg.OLED) // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR') this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) .setCheck("var"); // this.appendValueInput("PIN", Number) // .setCheck(Number) // .setAlign(Blockly.inputs.Align.RIGHT) // .appendField(Blockly.Msg.MIXLY_PIN); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_DISPLAY_DRAW) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MIXLY_DISPLAY_RLINE, "hline"], [Blockly.Msg.MIXLY_DISPLAY_VLINE, "vline"] ]), "direction"); this.jsonInit({ "message0": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE, "args0": [ { "check": Number, "type": "input_value", "name": "x" }, { "check": Number, "type": "input_value", "name": "y" }, { "check": Number, "type": "input_value", "name": "length" } ] }); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE); } }; export const display_line_arbitrarily = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); // this.appendDummyInput() // .appendField(Blockly.Msg.OLED) // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR') this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) .setCheck("var"); // this.appendValueInput("PIN", Number) // .setCheck(Number) // .setAlign(Blockly.inputs.Align.RIGHT) // .appendField(Blockly.Msg.MIXLY_PIN); this.jsonInit({ "message0": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY, "args0": [ { "check": Number, "type": "input_value", "name": "x1" }, { "check": Number, "type": "input_value", "name": "y1" }, { "check": Number, "type": "input_value", "name": "x2" }, { "check": Number, "type": "input_value", "name": "y2" }, ] }); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE_ARBIT); } } export const display_get_screen_image = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE); this.setInputsInline(true); this.setOutput(true, "esp32_image"); this.setTooltip(Blockly.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE_TOOLTIP); } }; export const display_blink_rate = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('x') .setCheck(Number) .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE) this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE); } }; export const display_rgb_color = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_RGB) this.appendValueInput("_LED_") .setCheck(Number) .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.MIXLY_RGB_NUM); this.appendDummyInput("") .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_AS) .appendField(new Blockly.FieldColour('#000', null, { colourOptions: ['#f00', '#000'], columns: 2 }), 'FIELDNAME'); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(''); this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B); } }; export const display_onoff = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput("") .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MIXLY_ESP32_ON, "ON"], [Blockly.Msg.MIXLY_ESP32_OFF, "OFF"] ]), 'ONOFF') this.setOutput(true, Boolean); this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW); } }; // export const switch = { // init: function () { // this.setColour(DISPLAY_EXTERN_HUE); // this.appendDummyInput("") // .appendField(new Blockly.FieldDropdown([ // [Blockly.Msg.MIXLY_ESP32_ON, "1"], // [Blockly.Msg.MIXLY_ESP32_OFF, "0"] // ]), "flag"); // this.setOutput(true); // this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW); // } // }; export const display_fill = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .setCheck("var"); this.appendDummyInput() .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, "0"], [Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, "1"] ]), "key"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION); var thisBlock = this; this.setTooltip(function () { var mode = thisBlock.getFieldValue('key'); var TOOLTIPS = { '0': Blockly.Msg.MIXLY_LCD_STAT_CLEAR, '1': Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL }; return Blockly.Msg.MIXLY_DF_LCD + TOOLTIPS[mode]; }); } }; export const display_animate = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.setOutput(true, 'Tuple'); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_ESP32_DISPLAY_ANIMATE) .appendField(new Blockly.FieldDropdown(display_animate.ANIMATE), 'ANIMATION') //this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP); }, ANIMATE: [ ["ALL_CLOCKS", 'ALL_CLOCKS'], ["ALL_ARROWS", 'ALL_ARROWS'] ] }; export const display_circle = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE) .appendField(new Blockly.FieldDropdown(display_circle.STATUS), 'OP') this.jsonInit({ "message0": Blockly.Msg.MIXLY_HANBIT_SHOW_CIRCLE, "args0": [ { "check": Number, "type": "input_value", "name": "x" }, { "check": Number, "type": "input_value", "name": "y" }, { "check": Number, "type": "input_value", "name": "r" }, { "type": "input_dummy" }, { "checked": false, "type": "field_checkbox", "name": "fill" } ] }); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(''); this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE); }, STATUS: [ [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'], [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0'] ] }; export const display_triangle = { init: function () { var brightness_or_not = [ [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'], [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0'] ]; this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_DISPLAY_DRAW + Blockly.Msg.MIXLY_HANBIT_DRAW_TRIANGLE) .appendField(new Blockly.FieldDropdown(brightness_or_not), 'OP') this.jsonInit({ "message0": Blockly.Msg.MIXLY_HANBIT_SHOW_triangle, "args0": [ { "check": Number, "type": "input_value", "name": "x0" }, { "check": Number, "type": "input_value", "name": "y0" }, { "check": Number, "type": "input_value", "name": "x1" }, { "check": Number, "type": "input_value", "name": "y1" }, { "check": Number, "type": "input_value", "name": "x2" }, { "check": Number, "type": "input_value", "name": "y2" }, { "type": "input_dummy" }, { "checked": false, "type": "field_checkbox", "name": "fill" } ] }); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(''); this.setTooltip(Blockly.Msg.MIXLY_DISPLAY_DRAW + Blockly.Msg.MIXLY_HANBIT_DRAW_TRIANGLE); } }; export const display_help = { init: function () { this.setColour('#555555'); this.appendDummyInput("") .appendField(Blockly.Msg.MIXGO_ONBOARDDISPLAY_HELP); this.setInputsInline(true); this.setTooltip(''); } }; //显示-OLED-显示图像 export const display_oled_showBitmap = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.OLED_BITMAP); this.appendValueInput("START_X", Number) .appendField(Blockly.Msg.OLED_START_X) .setCheck(Number); this.appendValueInput("START_Y", Number) .appendField(Blockly.Msg.OLED_START_Y) .setCheck(Number); this.appendValueInput("bitmap_name", String) .appendField(Blockly.Msg.OLED_BITMAP_NAME); this.appendValueInput("WIDTH", Number) .appendField(Blockly.Msg.MIXLY_WIDTH) .setCheck(Number); this.appendValueInput("HEIGHT", Number) .appendField(Blockly.Msg.MIXLY_HEIGHT) .setCheck(Number); this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setTooltip(Blockly.Msg.OLED_SHOW_BMP_TOOLTIP); } }; //显示-OLED-画点 export const display_oled_drawPixel = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('VAR') .appendField(Blockly.Msg.OLED) this.appendDummyInput("") .appendField(Blockly.Msg.OLED_DRAWPIXEL); this.appendValueInput("POS_X") .appendField(Blockly.Msg.OLED_POSX) this.appendValueInput("POS_Y") .appendField(Blockly.Msg.OLED_POSY) this.setInputsInline(true); this.setPreviousStatement(true); this.setNextStatement(true); this.setTooltip(Blockly.Msg.OLED_DRAW_PIXE_TOOLTIP); } }; export const display_tm_use_i2c_init = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('I2CSUB') .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "I2C") .setCheck("var"); this.appendValueInput('SUB') .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO) .appendField(new Blockly.FieldDropdown([ // ["MPU9250", "MPU9250"], // ["TM1637", "TM1637"], ["TM1650", "TM1650"] ]), "key"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); var thisBlock = this; this.setTooltip(function () { var mode = thisBlock.getFieldValue('key'); var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP; var TOOLTIPS = { // "MPU9250": "MPU9250", // "TM1637": "TM1637", "TM1650": "TM1650" }; return mode0 + TOOLTIPS[mode] }); } }; export const display_tm1650_power = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY) .appendField(new Blockly.FieldDropdown([["TM1650", "tm1650"]]), "TYPE"); this.appendValueInput("VAR") this.appendDummyInput() .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MIXLY_ON, "on"], [Blockly.Msg.MIXLY_OFF, "off"], [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, "clear"] ]), "STAT"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_power); } }; export const display_tm1650_show_num = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY) .appendField(new Blockly.FieldDropdown([["TM1650", "tm1650"]]), "TYPE"); this.appendValueInput("VAR") this.appendValueInput("VALUE") .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_NUMBER); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); // this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_displayString); } }; export const display_tm1650_show_dot = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY) .appendField(new Blockly.FieldDropdown([["TM1650", "tm1650"]]), "TYPE"); this.appendValueInput("VAR") this.appendValueInput("NO") .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1) this.appendValueInput("STAT") .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + Blockly.Msg.MIXLY_4DIGITDISPLAY_DOT) this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_showDot); } }; export const display_tm1650_set_brightness = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY) .appendField(new Blockly.FieldDropdown([["TM1650", "tm1650"]]), "TYPE"); this.appendValueInput("VAR") this.appendValueInput("VALUE") .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SET_BRIGHTNESS); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.MIXLY_4DIGITDISPLAY_4DIGITDISPLAY_BRIGHTNESS_TOOLTIP); } }; export const tft_use_spi_init = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SPISUB') .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "SPI") .setCheck("var"); this.appendValueInput('PINDC') .appendField("DC") this.appendValueInput('PINCS') .appendField("CS") this.appendValueInput('SUB') .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + Blockly.Msg.MSG.catTFT) this.appendValueInput("WIDTH") .appendField(Blockly.Msg.MIXLY_WIDTH) .setCheck(Number); this.appendValueInput("HEIGHT") .appendField(Blockly.Msg.MIXLY_HEIGHT) .setCheck(Number); this.appendDummyInput("") .appendField(Blockly.Msg.blockpy_turtle_rotate) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MICROPYTHON_DISPLAY_NO, "0"], [Blockly.Msg.ANTI_CLOCKWISE + '90°', "1"], [Blockly.Msg.ANTI_CLOCKWISE + '180°', "2"], [Blockly.Msg.ANTI_CLOCKWISE + '270°', "3"] ]), 'rotate') this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); } }; export const tft_show_image_xy = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .appendField(Blockly.Msg.MSG.catTFT); this.appendValueInput('data') .appendField(Blockly.Msg.OLED_BITMAP); this.appendValueInput("x") .setCheck(Number) .appendField('x'); this.appendValueInput("y") .setCheck(Number) .appendField('y'); this.appendValueInput("size") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_NUMBER); this.appendValueInput('VAR') .appendField(Blockly.Msg.HTML_COLOUR); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING); } }; export const display_color_seclet = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendDummyInput("") .setAlign(Blockly.inputs.Align.RIGHT) .appendField(new Blockly.FieldColour('#000', null, { colourOptions: [ // grays '#ffffff', '#cccccc', '#c0c0c0', '#999999', '#666666', '#333333', '#000000', // reds '#ffcccc', '#ff6666', '#ff0000', '#cc0000', '#990000', '#660000', '#330000', // oranges '#ffcc99', '#ff9966', '#ff9900', '#ff6600', '#cc6600', '#993300', '#663300', // yellows '#ffff99', '#ffff66', '#ffcc66', '#ffcc33', '#cc9933', '#996633', '#663333', // olives '#ffffcc', '#ffff33', '#ffff00', '#ffcc00', '#999900', '#666600', '#333300', // greens '#99ff99', '#66ff99', '#33ff33', '#33cc00', '#009900', '#006600', '#003300', // turquoises '#99ffff', '#33ffff', '#66cccc', '#00cccc', '#339999', '#336666', '#003333', // blues '#ccffff', '#66ffff', '#33ccff', '#3366ff', '#3333ff', '#000099', '#000066', // purples '#ccccff', '#9999ff', '#6666cc', '#6633ff', '#6600cc', '#333399', '#330099', // violets '#ffccff', '#ff99ff', '#cc66cc', '#cc33cc', '#993399', '#663366', '#330033' ], columns: 7 }), "COLOR"); this.setInputsInline(true); this.setOutput(true, String); } }; export const tft_show_image_or_string_delay = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .appendField(Blockly.Msg.MSG.catTFT); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.OLED_DRAWSTR); this.appendValueInput("x") .setCheck(Number) .appendField('x'); this.appendValueInput("y") .setCheck(Number) .appendField('y'); this.appendValueInput("size") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM); this.appendValueInput("space") .setCheck(Number) .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE); this.appendDummyInput("") .appendField(Blockly.Msg.TEXT_CENTER) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MICROPYTHON_DISPLAY_YES, "True"], [Blockly.Msg.MICROPYTHON_DISPLAY_NO, "False"] ]), 'center') this.appendValueInput('VAR') .appendField(Blockly.Msg.HTML_COLOUR); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY); } }; export const tft_scroll_string_delay = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .appendField(Blockly.Msg.MSG.catTFT); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING); this.appendValueInput("y") .setCheck(Number) .appendField('y'); this.appendValueInput("size") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM); this.appendValueInput("space") .setCheck(Number) .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE); this.appendValueInput("time") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL); this.appendValueInput('VAR') .appendField(Blockly.Msg.HTML_COLOUR); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY); } }; export const tft_show_frame_string_delay = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .appendField(Blockly.Msg.MSG.catTFT); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME); this.appendValueInput("size") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM); this.appendValueInput("time") .setCheck(Number) .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL); this.appendValueInput('VAR') .appendField(Blockly.Msg.HTML_COLOUR); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); } }; export const tft_fill = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .setCheck("var") .appendField(Blockly.Msg.MSG.catTFT); this.appendDummyInput() .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, "BLACK"], [Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, "WHITE"] ]), "key"); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION); var thisBlock = this; this.setTooltip(function () { var mode = thisBlock.getFieldValue('key'); var TOOLTIPS = { '0': Blockly.Msg.MIXLY_LCD_STAT_CLEAR, '1': Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL }; return Blockly.Msg.MIXLY_DF_LCD + TOOLTIPS[mode]; }); } }; export const tft_line_arbitrarily = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); // this.appendDummyInput() // .appendField(Blockly.Msg.OLED) // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR') this.appendValueInput('SUB') .appendField(Blockly.Msg.MSG.catTFT) .setCheck("var"); // this.appendValueInput("PIN", Number) // .setCheck(Number) // .setAlign(Blockly.inputs.Align.RIGHT) // .appendField(Blockly.Msg.MIXLY_PIN); this.jsonInit({ "message0": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY, "args0": [ { "check": Number, "type": "input_value", "name": "x1" }, { "check": Number, "type": "input_value", "name": "y1" }, { "check": Number, "type": "input_value", "name": "x2" }, { "check": Number, "type": "input_value", "name": "y2" }, ] }); this.appendValueInput('VAR') .appendField(Blockly.Msg.HTML_COLOUR); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE_ARBIT); } } export const display_lcd_use_i2c_init = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('I2CSUB') .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "I2C") .setCheck("var"); this.appendValueInput('SUB') .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE) .setCheck("var"); this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO) .appendField(new Blockly.FieldDropdown([ // ["MPU9250", "MPU9250"], // ["TM1637", "TM1637"], ["LCD1602", "16"], ["LCD2004", "20"] ]), "key"); this.appendValueInput("ADDR") .setCheck(Number) .appendField(Blockly.Msg.MQTT_SERVER_ADD); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); var thisBlock = this; this.setTooltip(function () { var mode = thisBlock.getFieldValue('key'); var mode0 = Blockly.Msg.MIXLY_SETUP; var TOOLTIPS = { "16": "LCD1602", "20": "LCD2004" }; return mode0 + TOOLTIPS[mode] }); } }; export const lcd_show_image_or_string_delay = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .appendField(Blockly.Msg.MSG.catLCD); this.appendValueInput('data') .setCheck(String) .appendField(Blockly.Msg.OLED_DRAWSTR); this.appendValueInput("x") .setCheck(Number) .appendField(Blockly.Msg.array2_cols); this.appendValueInput("y") .setCheck(Number) .appendField(Blockly.Msg.array2_rows); this.appendDummyInput("") .appendField(Blockly.Msg.TEXT_CENTER) .appendField(new Blockly.FieldDropdown([ [Blockly.Msg.MICROPYTHON_DISPLAY_YES, "True"], [Blockly.Msg.MICROPYTHON_DISPLAY_NO, "False"] ]), 'center') this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(true); this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY); } }; export const lcd_print_string = { init: function () { this.setColour(DISPLAY_EXTERN_HUE); this.appendValueInput('SUB') .appendField(Blockly.Msg.MSG.catLCD); this.appendValueInput('data')