/** * @license Licensed under the Apache License, Version 2.0 (the "License"): * http://www.apache.org/licenses/LICENSE-2.0 */ /** * @fileoverview Code generator for the test 2 blocks. */ 'use strict'; goog.provide('Blockly.Python.led'); goog.require('Blockly.Python'); var globalBrightness; Blockly.Python['led_neopixel_setup'] = function(block) { Blockly.Python.addInclude('Aadafruit_GFX', '#include '); Blockly.Python.addInclude('Adafruit_NeoMatrix', '#include '); Blockly.Python.addInclude('Adafruit_NeoPixel', '#include '); var number_neopixel_initpin = block.getFieldValue('neopixel_initpin'); var number_neopixel_initheight = block.getFieldValue('neopixel_initheight'); var number_neopixel_initwidth = block.getFieldValue('neopixel_initwidth'); var number_neopixel_initbright = block.getFieldValue('neopixel_initbright'); Blockly.Python.addDeclaration('ledDeclA' + number_neopixel_initpin, '#ifndef PSTR\n' + ' #define PSTR\n' + '#endif\n', false); Blockly.Python.addDeclaration('ledDeclB' + number_neopixel_initpin, '#define\t' + 'PIN\t' + number_neopixel_initpin, false); Blockly.Python.addDeclaration('ledDeclC' + number_neopixel_initpin, 'Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(5,5,' + number_neopixel_initwidth + ',' + number_neopixel_initheight + ', PIN,NEO_TILE_TOP + NEO_TILE_LEFT + NEO_TILE_COLUMNS + NEO_TILE_PROGRESSIVE + NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,NEO_GRB + NEO_KHZ800);'); Blockly.Python.addSetup('ledSetup' + number_neopixel_initpin, 'matrix.begin();\n' + ' matrix.setBrightness(' + number_neopixel_initbright + ');\n'); globalBrightness = number_neopixel_initbright; var code = ''; return code; }; Blockly.Python['led_setrotation'] = function(block) { var dropdown_led_setrotation_option = block.getFieldValue('led_setrotation_option'); var code = 'matrix.setRotation(' + dropdown_led_setrotation_option + ');\n'; return code; }; Blockly.Python['led_setbright'] = function(block) { var bright_value = Blockly.Python.valueToCode(block, 'BRIGHTNESS', Blockly.Python.ORDER_ATOMIC); var code = 'matrix.setBrightness(' + bright_value + ');\n'; return code; } Blockly.Python['led_set_width_height'] = function(block) { var width = Blockly.Python.valueToCode(block, 'WIDTH', Blockly.Python.ORDER_ATOMIC); var height = Blockly.Python.valueToCode(block, 'HEIGHT', Blockly.Python.ORDER_ATOMIC); var code = width + ', ' + height; return [code, Blockly.Python.ORDER_ATOMIC]; }; Blockly.Python['led_set_position'] = function(block) { var pos_x = Blockly.Python.valueToCode(block, 'POSX', Blockly.Python.ORDER_ATOMIC); var pos_y = Blockly.Python.valueToCode(block, 'POSY', Blockly.Python.ORDER_ATOMIC); var code = pos_x + ', ' + pos_y; return [code, Blockly.Python.ORDER_ATOMIC]; }; Blockly.Python['led_drawpixel'] = function(block) { var color; var color_val = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC); if (color_val[0] == "#") { color = hexToRgb(color_val); } else { color = color_val; } var position = Blockly.Python.valueToCode(block, 'POS', Blockly.Python.ORDER_ATOMIC); var code = 'matrix.drawPixel(' + position + ',matrix.Color' + color + ');\n'; return code; }; Blockly.Python['led_drawrect'] = function(block) { //var color = hexToRgb(Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC)); var color; var color_val = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC); if (color_val[0] == "#") { color = hexToRgb(color_val); } else { color = color_val; } var size = Blockly.Python.valueToCode(block, 'SIZE', Blockly.Python.ORDER_ATOMIC); var type = block.getFieldValue('rect_type'); var position = Blockly.Python.valueToCode(block, 'POS', Blockly.Python.ORDER_ATOMIC); var code = 'matrix.' + type + 'Rect(' + position + ',' + size + ',matrix.Color' + color + ');\n'; return code; }; Blockly.Python['led_drawline'] = function(block) { //var color = hexToRgb(Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC)); var color; var color_val = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC); if (color_val[0] == "#") { color = hexToRgb(color_val); } else { color = color_val; } var type = Blockly.Python.valueToCode(block, 'TYPE', Blockly.Python.ORDER_ATOMIC); var positionA = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC); var positionB = Blockly.Python.valueToCode(block, 'POSB', Blockly.Python.ORDER_ATOMIC); var code = 'matrix.drawLine(' + positionA + ',' + positionB + ',' + 'matrix.Color' + color + ');\n'; return code; }; Blockly.Python['led_showall'] = function(block) { var code = "matrix.show();\n" + "delayMicroseconds(500);\n" + "matrix.setBrightness(" + globalBrightness + ");\n"; return code; }; Blockly.Python['led_text'] = function(block) { var text_x_val = Number(block.getFieldValue('x_val')); var text_y_val = Number(block.getFieldValue('y_val')); var colour_text_color = hexToRgb(Blockly.Python.valueToCode(block, 'text_color', Blockly.Python.ORDER_ATOMIC)); var colour_back_color = hexToRgb(Blockly.Python.valueToCode(block, 'back_color', Blockly.Python.ORDER_ATOMIC)); var number_text_size = block.getFieldValue('text_size'); var text_color = 'matrix.Color' + colour_text_color; var back_color = 'matrix.Color' + colour_back_color; var code = 'matrix.setCursor(' + text_x_val + ', ' + text_y_val + ');\n' + 'matrix.setTextColor(' + text_color + ', ' + back_color + ');\n' + 'matrix.setTextSize(' + number_text_size + ');\n' + 'matrix.setTextWrap(false);\n'; return code; }; Blockly.Python['led_clear'] = function(block) { Blockly.Python.addFunction("led_clear", "void ledClear() {\n" + ' matrix.fillScreen(0);\n' + ' matrix.show();\n' + ' delay(1);\n' + '}\n'); var code = 'ledClear();\n'; return code; }; Blockly.Python['led_scrolling_text'] = function(block) { var text_led_scrolling_speed = block.getFieldValue('led_scrolling_speed'); var colour_led_scrolling_color = hexToRgb(Blockly.Python.valueToCode(block, 'led_scrolling_color', Blockly.Python.ORDER_ATOMIC)); Blockly.Python.addDeclarataddDion('led_scrolling_decl', 'int x = tiledMatrix.width() ;'); var code = 'matrix.setTextWrap(false);\n' + 'matrix.setTextColor(matrix.Color' + colour_led_scrolling_color + ');\n' + 'matrix.setCursor(x, 0);\n' + 'int len = text.length()*6;\n' + 'len *= (-1);\n' + '//every word takes about 6 pixel wide\n' + 'if(--x < len) {\n' + 'x = matrix.width();\n' + '}\n' + 'matrix.show();\n' + 'delay(' + text_led_scrolling_speed + ');\n'; return code; }; Blockly.Python['led_pattern_5x5'] = function(block) { let pattern_5x5 = 'void setPattern(uint16_t patternMatrix[5][5]) {\n' + ' for (int row=0; row<5; row++) {\n' + ' for (int col=0; col<5; col++) {\n' + ' matrix.drawPixel(row, col, patternMatrix[col][row]);\n }\n }\n}\n'; Blockly.Python.addFunction('pattern_5x5', pattern_5x5); let panel_init = 'uint16_t pattern[5][5] =\n{\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), }\n};\n'; Blockly.Python.addDeclaration('pattern_5x5_dec', panel_init); let code = ''; for (var i = 0; i < 5; i++) { for (var j = 0; j < 5; j++) { let color = "matrix.Color" + hexToRgb(block.getFieldValue(i + "_" + j)); if (color === "matrix.Color(59, 85, 135)") { color = "matrix.Color(0, 0, 0)"; } code += 'pattern[4-' + i + '][4-' + j + '] = ' + color + '; '; } code += '\n' } code += 'setPattern(pattern);\n'; return code; }; Blockly.Python['led_drawWord_5x5'] = function(block) { var word = Blockly.Python.valueToCode(block, 'WORD', Blockly.Python.ORDER_ATOMIC); var color; var color_val = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC); if (color_val[0] == "#") { color = hexToRgb(color_val); } else { color = color_val; } Blockly.Python.addInclude("myfont_5x5", "#include "); Blockly.Python.addSetup("setTextWrap_false", "matrix.setTextWrap(false);"); Blockly.Python.addSetup("font_5x5", "matrix.setFont(&MyFont5pt7b);\n"); var code = 'matrix.setTextColor(matrix.Color' + color + ');\n' + 'matrix.setCursor(0, 4);\n' + 'matrix.print(F(' + word + '));\n'; return code; }; Blockly.Python['led_text_input'] = function(block) { var scroll = block.getFieldValue("scroll"); var font = block.getFieldValue("font"); var text = Blockly.Python.valueToCode(block, 'TEXT', Blockly.Python.ORDER_ATOMIC); //正则表达式判断拼接的积木是 text积木还是 variable积木 var isString = /"/g.test(text) var color; var color_val = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC); if (color_val[0] == "#") { color = hexToRgb(color_val); } else { color = color_val; } var position = Blockly.Python.valueToCode(block, 'POS', Blockly.Python.ORDER_ATOMIC); var position_x = parseInt(position.split(',')[0]); var position_y = parseInt(position.split(',')[1]); var code = 'matrix.setTextColor(matrix.Color' + color + ');\n'; Blockly.Python.addSetup("setTextWrap_false", "matrix.setTextWrap(false);"); if (font == "1") { Blockly.Python.addInclude("myfont_5x5", "#include "); Blockly.Python.addSetup("myfont_setup", "matrix.setFont(&MyFont5pt7b);\n"); position_y += 4; Blockly.Python.addDeclaration("pixelPerChar_5", "int pixelPerChar = 5;") } else if (font == "3") { Blockly.Python.addInclude("FreeSansBold9pt7b", "#include "); Blockly.Python.addSetup("FreeSansBold9pt7b", "matrix.setFont(&FreeSansBold9pt7b);\n"); position_y += 12; Blockly.Python.addDeclaration("pixelPerChar_9", "int pixelPerChar = 9;") } else { Blockly.Python.addDeclaration("pixelPerChar_5", "int pixelPerChar = 5;") } if (scroll == "1") { Blockly.Python.addDeclaration("scroll_" + position_x + "_" + position_y, "int scroll_" + position_x + "_" + position_y + " = matrix.width();"); Blockly.Python.addDeclaration("maxDisplacement_" + position_x + "_" + position_y, "int maxDisplacement_" + position_x + "_" + position_y + ";"); code += 'matrix.fillScreen(0);\n' + 'matrix.setRotation(2);\n'+ 'matrix.setCursor(scroll_' + position_x + '_' + position_y + '+' + position_x + ', ' + position_y + ');\n '; if (isString) { // text积木处理 code += 'matrix.print(F(' + text + '));\n' + "maxDisplacement_" + position_x + "_" + position_y + " = strlen(" + text + ")* pixelPerChar + matrix.width();\n"; } else { // variable积木处理 code += 'matrix.print(' + text + ');\n' + "maxDisplacement_" + position_x + "_" + position_y + " = " + text + ".length()* pixelPerChar + matrix.width();\n"; } code += 'if(--scroll_' + position_x + '_' + position_y + ' < -maxDisplacement_' + position_x + '_' + position_y + ') {\n' + 'scroll_' + position_x + '_' + position_y + ' = matrix.width();\n' + '}\n'; } else { code += 'matrix.setCursor(' + position_x + ',' + position_y + ');\n'; if (isString) // text积木处理 code += 'matrix.print(F(' + text + '));\n'; else // variable积木处理 code += 'matrix.print(' + text + ');\n'; } return code; }; Blockly.Python['led_draw_emotion'] = function(block) { let pattern_5x5 = 'void setPattern(uint16_t patternMatrix[5][5]) {\n' + ' for (int row=0; row<5; row++) {\n' + ' for (int col=0; col<5; col++) {\n' + ' matrix.drawPixel(row, col, patternMatrix[col][row]);\n }\n }\n}\n'; Blockly.Python.addFunction('pattern_5x5', pattern_5x5); let panel_init = 'uint16_t pattern[5][5] =\n{\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), },\n' + ' { matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0),matrix.Color(0, 0, 0), }\n};\n'; Blockly.Python.addDeclaration('pattern_5x5_dec', panel_init); var facetype = block.getFieldValue("face"); block.updateImage_(); var color; var color_val = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC); if (color_val[0] == "#") { color = hexToRgb(color_val); } else { color = color_val; } var code = ""; switch (facetype) { case "1": code = "pattern[0][0] = matrix.Color(0, 0, 0); pattern[0][1] = matrix.Color(0, 0, 0); pattern[0][2] = matrix.Color(0, 0, 0); pattern[0][3] = matrix.Color(0, 0, 0); pattern[0][4] = matrix.Color(0, 0, 0);\n" + "pattern[1][0] = matrix.Color(0, 0, 0); pattern[1][1] = matrix.Color" + color + "; pattern[1][2] = matrix.Color(0, 0, 0); pattern[1][3] = matrix.Color" + color + "; pattern[1][4] = matrix.Color(0, 0, 0);\n" + "pattern[2][0] = matrix.Color(0, 0, 0); pattern[2][1] = matrix.Color(0, 0, 0); pattern[2][2] = matrix.Color(0, 0, 0); pattern[2][3] = matrix.Color(0, 0, 0); pattern[2][4] = matrix.Color(0, 0, 0);\n" + "pattern[3][0] = matrix.Color" + color + "; pattern[3][1] = matrix.Color(0, 0, 0); pattern[3][2] = matrix.Color(0, 0, 0); pattern[3][3] = matrix.Color(0, 0, 0); pattern[3][4] = matrix.Color" + color + ";\n" + "pattern[4][0] = matrix.Color(0, 0, 0); pattern[4][1] = matrix.Color" + color + "; pattern[4][2] = matrix.Color" + color + "; pattern[4][3] = matrix.Color" + color + "; pattern[4][4] = matrix.Color(0, 0, 0);\n" + "setPattern(pattern);\n" break; case "2": code = "pattern[0][0] = matrix.Color(0, 0, 0); pattern[0][1] = matrix.Color(0, 0, 0); pattern[0][2] = matrix.Color(0, 0, 0); pattern[0][3] = matrix.Color(0, 0, 0); pattern[0][4] = matrix.Color(0, 0, 0);\n" + "pattern[1][0] = matrix.Color" + color + "; pattern[1][1] = matrix.Color" + color + "; pattern[1][2] = matrix.Color(0, 0, 0); pattern[1][3] = matrix.Color" + color + "; pattern[1][4] = matrix.Color" + color + ";\n" + "pattern[2][0] = matrix.Color(0, 0, 0); pattern[2][1] = matrix.Color(0, 0, 0); pattern[2][2] = matrix.Color(0, 0, 0); pattern[2][3] = matrix.Color(0, 0, 0); pattern[2][4] = matrix.Color(0, 0, 0);\n" + "pattern[3][0] = matrix.Color(0, 0, 0); pattern[3][1] = matrix.Color" + color + "; pattern[3][2] = matrix.Color" + color + "; pattern[3][3] = matrix.Color" + color + "; pattern[3][4] = matrix.Color(0, 0, 0);\n" + "pattern[4][0] = matrix.Color(0, 0, 0); pattern[4][1] = matrix.Color(0, 0, 0); pattern[4][2] = matrix.Color(0, 0, 0); pattern[4][3] = matrix.Color(0, 0, 0); pattern[4][4] = matrix.Color(0, 0, 0);\n" + "setPattern(pattern);\n" break; case "3": code = "pattern[0][0] = matrix.Color(0, 0, 0); pattern[0][1] = matrix.Color(0, 0, 0); pattern[0][2] = matrix.Color(0, 0, 0); pattern[0][3] = matrix.Color(0, 0, 0); pattern[0][4] = matrix.Color(0, 0, 0);\n" + "pattern[1][0] = matrix.Color(0, 0, 0); pattern[1][1] = matrix.Color" + color + "; pattern[1][2] = matrix.Color(0, 0, 0); pattern[1][3] = matrix.Color" + color + "; pattern[1][4] = matrix.Color(0, 0, 0);\n" + "pattern[2][0] = matrix.Color(0, 0, 0); pattern[2][1] = matrix.Color(0, 0, 0); pattern[2][2] = matrix.Color(0, 0, 0); pattern[2][3] = matrix.Color(0, 0, 0); pattern[2][4] = matrix.Color(0, 0, 0);\n" + "pattern[3][0] = matrix.Color(0, 0, 0); pattern[3][1] = matrix.Color" + color + "; pattern[3][2] = matrix.Color" + color + "; pattern[3][3] = matrix.Color" + color + "; pattern[3][4] = matrix.Color(0, 0, 0);\n" + "pattern[4][0] = matrix.Color" + color + "; pattern[4][1] = matrix.Color(0, 0, 0); pattern[4][2] = matrix.Color(0, 0, 0); pattern[4][3] = matrix.Color(0, 0, 0); pattern[4][4] = matrix.Color" + color + ";\n" + "setPattern(pattern);\n" break; } return code; }; Blockly.Python['led_draw_strip'] = function(block) { var color; var color_val = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC); if (color_val[0] == "#") { color = hexToRgb(color_val); } else { color = color_val; } var location = Blockly.Python.valueToCode(block, 'LOC', Blockly.Python.ORDER_ATOMIC); var position = location + " % 5 , " + location + " / 5"; var code = 'matrix.drawPixel(' + position + ',matrix.Color' + color + ');\n'; return code; }; Blockly.Python['led_set_color'] = function(block) { var code = block.getFieldValue('COLOR'); return [code, Blockly.Python.ORDER_ATOMIC]; }; Blockly.Python['led_set_colorRGB'] = function(block) { var r = Blockly.Python.valueToCode(block, 'RED_VAL', Blockly.Python.ORDER_ATOMIC); var g = Blockly.Python.valueToCode(block, 'GREEN_VAL', Blockly.Python.ORDER_ATOMIC); var b = Blockly.Python.valueToCode(block, 'BLUE_VAL', Blockly.Python.ORDER_ATOMIC); var code = '(' + r + ',' + g + ',' + b + ')'; return [code, Blockly.Python.ORDER_ATOMIC]; };