add_pixel_blocks
This commit is contained in:
@@ -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="气象仪发送数据时";
|
||||
|
||||
@@ -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>
|
||||
|
||||
15
js/MixIO.js
15
js/MixIO.js
@@ -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
|
||||
},
|
||||
|
||||
@@ -304,6 +304,7 @@ async function run_project() {
|
||||
logicFunction()
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
MixIO.log(e)
|
||||
showtext(JSLang[lang].logicError)
|
||||
isRunning = false;
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user