add_pixel_blocks

This commit is contained in:
unknown
2025-09-02 16:48:00 +08:00
parent 65873c1e34
commit e93ad6ac87
5 changed files with 116 additions and 17 deletions

View File

@@ -217,6 +217,25 @@ Blockly.Blocks['button_switch'] = {
}
};
Blockly.Blocks['pixel_switch'] = {
init: function() {
this.setColour(button_HUE);
this.appendDummyInput().appendField(Blockly.PIXEL_SWITCH);
this.appendValueInput("name").setCheck("String");
this.appendDummyInput().appendField(Blockly.PIXEL_SWITCH_STATE);
this.appendDummyInput().appendField("x");
this.appendValueInput("X").setCheck("Number");
this.appendDummyInput().appendField("y");
this.appendValueInput("Y").setCheck("Number");
this.appendDummyInput().appendField(Blockly.MIXLY_MICROPYTHON_SOCKET_TO);
this.appendDummyInput().appendField(new Blockly.FieldDropdown([["亮",'true'],["灭",'false']]), "state");
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip("");
}
};
Blockly.Blocks['get_button_state'] = {
init: function() {
this.setColour(button_HUE);
@@ -1049,6 +1068,19 @@ Blockly.Blocks['clear_datamap'] = {
}
};
Blockly.Blocks['clear_pixel'] = {
init: function() {
this.appendDummyInput().appendField(Blockly.LET);
this.appendValueInput("name").setCheck("String");
this.appendDummyInput().appendField(Blockly.CLEAR_PIXEL);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setColour(datamap_HUE);
this.setTooltip('');
}
};
weathersynced_HUE = "#4e73df";
Blockly.Blocks['ws_updated'] = {
@@ -2110,6 +2142,15 @@ Blockly.JavaScript.button_switch=function(block) {
return code;
};
Blockly.JavaScript.pixel_switch=function(block) {
var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC);
var state = this.getFieldValue('state');
var x = Blockly.JavaScript.valueToCode(this, 'X', Blockly.JavaScript.ORDER_ATOMIC);
var y = Blockly.JavaScript.valueToCode(this, 'Y', Blockly.JavaScript.ORDER_ATOMIC);
var code="MixIO.getInstance("+name+",MixIO.typeTags.PIXEL)\n"+".trigger(MixIO.actionTags.PIXEL_SWITCH,["+x + ","+y + "," + state+"])\n";
return code;
};
Blockly.JavaScript.get_button_state=function(block) {
var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC);
var code="MixIO.getInstance("+name+",MixIO.typeTags.BUTTON).isOn()";
@@ -2475,6 +2516,12 @@ Blockly.JavaScript.clear_datamap=function(block) {
return code;
};
Blockly.JavaScript.clear_pixel=function(block) {
var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC);
var code="MixIO.getInstance("+name+",MixIO.typeTags.PIXEL)\n"+".clearPixel()\n"
return code;
};
Blockly.JavaScript.ws_updated=function(block) {
var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC);
var code="MixIO.getInstance("+name+",MixIO.typeTags.WEATHER)\n"+".bind(MixIO.eventTags.WEATHER_SYNCED, function(event,district,weather_type,temperature,humidity,wind_dir,wind_class){\n"
@@ -3289,6 +3336,8 @@ Blockly.BUTTON_UP="按键/开关被松开时";
Blockly.BUTTON_RECIEVE_MESSAGE="开关收到消息时";
Blockly.BUTTON_SWITCH="切换";
Blockly.BUTTON_SWITCH_STATE="开关的状态";
Blockly.PIXEL_SWITCH="切换";
Blockly.PIXEL_SWITCH_STATE="点阵屏的像素";
Blockly.DRAG_SLIDER="滑杆被拖动时";
Blockly.SLIDER_RECIEVE_MESSAGE="滑杆收到消息时";
@@ -3362,6 +3411,7 @@ Blockly.DATAMAP_LONG="经度";
Blockly.DATAMAP_LAT="纬度";
Blockly.DATAMAP_SEND_MESSAGE="发送消息列表";
Blockly.CLEAR_DATAMAP="数据地图清空";
Blockly.CLEAR_PIXEL="点阵屏清空画布";
Blockly.WS_UPDATED="气象仪更新数据时";
Blockly.WS_SEND="气象仪发送数据时";

View File

@@ -1064,7 +1064,32 @@
</value>
</block>
</category>
<category name="点阵屏" colour="#4e73df" css-icon="customIcon fa fa-tv"></category>
<category name="点阵屏" colour="#4e73df" css-icon="customIcon fa fa-tv">
<block type="pixel_switch">
<value name="name">
<shadow type="text">
<field name="TEXT">name</field>
</shadow>
</value>
<value name="X">
<shadow type="math_number">
<field name="X">X</field>
</shadow>
</value>
<value name="Y">
<shadow type="math_number">
<field name="Y">Y</field>
</shadow>
</value>
</block>
<block type="clear_pixel">
<value name="name">
<shadow type="text">
<field name="TEXT">name</field>
</shadow>
</value>
</block>
</category>
<category name="人脸识别" colour="#4e73df" css-icon="customIcon fa fa-smile-o"></category>
<category name="蜂鸣器" colour="#4e73df" css-icon="customIcon fa fa-bell-o"></category>
<category name="二维码识别" colour="#4e73df" css-icon="customIcon fa fa-qrcode"></category>

View File

@@ -85,13 +85,14 @@ var MixIO = {
BLE: 16,
CAMERA: 17,
MIC: 18,
SELECT: 19
SELECT: 19,
PIXEL: 20
},
oldTags: ["input_button", "input_slider", "input_keyboard", "input_controller", "input_rgb", "output_bulb", "output_text",
"output_chart", "output_bar", "table", "output_dashboard", "output_map", "input_weather", "timer", "trigger", "ble", "camera", "input_mic", "tinydb"
"output_chart", "output_bar", "table", "output_dashboard", "output_map", "input_weather", "timer", "trigger", "ble", "camera", "input_mic", "tinydb", "pixel"
],
zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器", "条件触发器", "蓝牙转发器", "摄像头", "语音识别", "下拉选项"],
zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器", "条件触发器", "蓝牙转发器", "摄像头", "语音识别", "下拉选项", "点阵屏"],
/*合法的MixIO事件种类*/
eventTags: {
@@ -183,7 +184,9 @@ var MixIO = {
BLUETOOTH_SENT: "1621",
SELECT_SEND: "1921"
SELECT_SEND: "1921",
PIXEL_SWITCH: "2021"
},
publish: function(topic, message) {
// if message undefined
@@ -368,6 +371,10 @@ var MixIO = {
instance.getBluetoothStatus = function() {
return instance.attr('user-content')
}
} else if (type === MixIO.typeTags.PIXEL){
instance.clearPixel = function() {
MixIO.publish(instance.attr('user-topic'), "cls")
}
}
return instance
},

View File

@@ -304,6 +304,7 @@ async function run_project() {
logicFunction()
}
} catch (e) {
console.log(e)
MixIO.log(e)
showtext(JSLang[lang].logicError)
isRunning = false;

View File

@@ -207,22 +207,37 @@ function add_pixel(user_title, user_topic, user_content, user_style, title_style
var bottomDiv = $('<div style="width:100%;margin-top:15px;display:flex;flex-direction:row;align-items:center;justify-content:space-around"/>')
var confirmEdit = $('<a class="btn btn-primary btn-circle" style="margin-right:10px;box-shadow:1px 1px 5px #4e73df;"><i class="fa fa-check"></i></a>')
bottomDiv.append(confirmEdit)
// Aug 2025
itemdiv.bind(MixIO.actionTags.PIXEL_SWITCH, function(event, x, y, status) {
var color = "#EEEEEE"
if(status)
color = "#4E73DF"
itemdiv.find('.pixelrow').eq(x).find('.pixel').eq(y).css('background-color', color)
})
client.on('message', function(topic1, message1) {
if (isAlive && isRunning)
if (topic1.split("/")[(isMixly ? 3 : 2)] == topic.text()) {
// Aug 2025
var content = message1.toString()
var pixels = content.split(',')
for (var i = 0; i < pixels.length; i++) {
var pixel = pixels[i].split('-')
var x = parseInt(pixel[0])
var y = parseInt(pixel[1])
var color = pixel[2]
if(color == '0')
color = '#EEEEEE'
else if(color == '1')
color = '#4E73DF'
var pixel = itemdiv.find('.pixelrow').eq(x).find('.pixel').eq(y)
pixel.css('background-color', color)
if(content == "cls")
{
itemdiv.find('.pixelrow').find('.pixel').css('background-color', "#EEEEEE")
}
else
{
var pixels = content.split(',')
for (var i = 0; i < pixels.length; i++) {
var pixel = pixels[i].split('-')
var x = parseInt(pixel[0])
var y = parseInt(pixel[1])
var color = pixel[2]
if(color == '0')
color = '#EEEEEE'
else if(color == '1')
color = '#4E73DF'
var pixel = itemdiv.find('.pixelrow').eq(x).find('.pixel').eq(y)
pixel.css('background-color', color)
}
}
}
})
@@ -1303,6 +1318,7 @@ function add_tinydb(user_title, user_topic, user_content, user_style, title_styl
sendIcon.bind('mouseup', function(event) {
event.stopPropagation()
})
// Aug 2025
if (window.screen.width > 800)
sendIcon.bind('click', function(event) {
event.stopPropagation()