From d73fa2db434228a5a81a560557af296212164a88 Mon Sep 17 00:00:00 2001 From: unknown <1371033826@qq.com> Date: Tue, 2 Sep 2025 18:25:53 +0800 Subject: [PATCH] add_beep_and_qr_blocks --- blockly/iot/IOT_Blocks.js | 68 +++++++++++++++++++++++++++++++++++++-- ejs/projects.ejs | 26 +++++++++++++-- js/MixIO.js | 18 ++++++++--- js/widgets.js | 11 ++++++- 4 files changed, 113 insertions(+), 10 deletions(-) diff --git a/blockly/iot/IOT_Blocks.js b/blockly/iot/IOT_Blocks.js index a93c54c..a658eb6 100644 --- a/blockly/iot/IOT_Blocks.js +++ b/blockly/iot/IOT_Blocks.js @@ -1049,9 +1049,48 @@ Blockly.Blocks['face_recognized'] = { this.setPreviousStatement(true); this.setNextStatement(true); this.setTooltip(""); - }, - getVars:function(){ - return ["clientid","long","lat","message"]; + } +}; + +Blockly.Blocks['beep_received'] = { + init: function() { + this.setColour(datamap_HUE); + this.appendDummyInput().appendField(Blockly.MIXLY_MICROBIT_JS_CURRENT); + this.appendValueInput("name").setCheck("String"); + this.appendDummyInput().appendField(Blockly.BEEP_RECEIVED); + this.setInputsInline(true); + this.appendStatementInput('DO0').appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setTooltip(""); + } +}; + +Blockly.Blocks['qr_recognized'] = { + init: function() { + this.setColour(datamap_HUE); + this.appendDummyInput().appendField(Blockly.MIXLY_MICROBIT_JS_CURRENT); + this.appendValueInput("name").setCheck("String"); + this.appendDummyInput().appendField(Blockly.QR_RECOGNIZED); + this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS+"value"); + this.setInputsInline(true); + this.appendStatementInput('DO0').appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setTooltip(""); + } +}; + +Blockly.Blocks['beep_send'] = { + init: function() { + this.appendDummyInput().appendField(Blockly.LET); + this.appendValueInput("name").setCheck("String"); + this.appendDummyInput().appendField(Blockly.BEEP_SEND); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setColour(datamap_HUE); + this.setTooltip(''); } }; @@ -2526,6 +2565,26 @@ Blockly.JavaScript.face_recognized =function(block) { return code; }; +Blockly.JavaScript.beep_received =function(block) { + var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); + var code="MixIO.getInstance("+name+",MixIO.typeTags.BEEP)\n"+".bind(MixIO.eventTags.BEEP_RECEIVED, function(event){\n" + +Blockly.JavaScript.statementToCode(block, "DO0" )+"\n"+"})\n" + return code; +}; + +Blockly.JavaScript.qr_recognized =function(block) { + var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); + var code="MixIO.getInstance("+name+",MixIO.typeTags.QR)\n"+".bind(MixIO.eventTags.QR_RECOGNIZED, function(event, value){\n" + +Blockly.JavaScript.statementToCode(block, "DO0" )+"\n"+"})\n" + return code; +}; + +Blockly.JavaScript.beep_send=function(block) { + var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); + var code="MixIO.getInstance("+name+",MixIO.typeTags.BEEP)\n"+".beep()\n" + return code; +}; + Blockly.JavaScript.datamap_send=function(block) { var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); var long = Blockly.JavaScript.valueToCode(this, 'long', Blockly.JavaScript.ORDER_ATOMIC); @@ -3439,6 +3498,9 @@ Blockly.DATAMAP_SEND_MESSAGE="发送消息列表"; Blockly.CLEAR_DATAMAP="数据地图清空"; Blockly.CLEAR_PIXEL="点阵屏清空画布"; Blockly.FACE_RECOGNIZED = "人脸识别组件识别到人脸时" +Blockly.BEEP_RECEIVED = "蜂鸣器发出声音时" +Blockly.BEEP_SEND = "蜂鸣器发出声音" +Blockly.QR_RECOGNIZED = "二维码识别组件识别到二维码时" Blockly.WS_UPDATED="气象仪更新数据时"; Blockly.WS_SEND="气象仪发送数据时"; diff --git a/ejs/projects.ejs b/ejs/projects.ejs index 3a5679c..ed9bd68 100644 --- a/ejs/projects.ejs +++ b/ejs/projects.ejs @@ -1099,7 +1099,29 @@ - - + + + + + name + + + + + + + name + + + + + + + + name + + + + \ No newline at end of file diff --git a/js/MixIO.js b/js/MixIO.js index 2742113..f812f5b 100644 --- a/js/MixIO.js +++ b/js/MixIO.js @@ -87,13 +87,15 @@ var MixIO = { MIC: 18, SELECT: 19, PIXEL: 20, - FACE: 21 + FACE: 21, + BEEP: 22, + QR: 23 }, 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", "pixel", "face" + "output_chart", "output_bar", "table", "output_dashboard", "output_map", "input_weather", "timer", "trigger", "ble", "camera", "input_mic", "tinydb", "pixel", "face", "ocr", "qr" ], - zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器", "条件触发器", "蓝牙转发器", "摄像头", "语音识别", "下拉选项", "点阵屏", "人脸识别"], + zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器", "条件触发器", "蓝牙转发器", "摄像头", "语音识别", "下拉选项", "点阵屏", "人脸识别", "蜂鸣器", "二维码识别"], /*合法的MixIO事件种类*/ eventTags: { @@ -143,7 +145,11 @@ var MixIO = { SELECT_SENT: "1911", - FACE_RECOGNIZED: "2111" + FACE_RECOGNIZED: "2111", + + BEEP_RECEIVED: "2211", + + QR_RECOGNIZED: "2311" }, @@ -378,6 +384,10 @@ var MixIO = { instance.clearPixel = function() { MixIO.publish(instance.attr('user-topic'), "cls") } + } else if (type === MixIO.typeTags.BEEP){ + instance.beep = function() { + MixIO.publish(instance.attr('user-topic'), 1) + } } return instance }, diff --git a/js/widgets.js b/js/widgets.js index 094747a..c711e7f 100644 --- a/js/widgets.js +++ b/js/widgets.js @@ -7003,6 +7003,8 @@ function add_ocr(user_title, user_topic, user_content, user_style, title_style) bell_icon.css("color", "#e74a3b") itemdiv.css("box-shadow", "#e74a3b 1px 1px 10px") } + // Aug 2025 + itemdiv.trigger(MixIO.eventTags.BEEP_RECEIVED); setTimeout(function(){ bell_icon.css("color", "#858796") itemdiv.css("box-shadow", "") @@ -7158,7 +7160,11 @@ function add_qr(user_title, user_topic, user_content, user_style, title_style) { { bottomDiv11.text(code.data) if(isRunning && isAlive) + { publish(user_topic, code.data) + // Aug 2025 + itemdiv.trigger(MixIO.eventTags.QR_RECOGNIZED, [code.data]); + } } else { @@ -7171,11 +7177,14 @@ function add_qr(user_title, user_topic, user_content, user_style, title_style) { readers: ["code_128_reader", "ean_reader", "ean_8_reader", "code_39_reader", "code_39_vin_reader", "codabar_reader", "upc_reader", "upc_e_reader", "i2of5_reader", "2of5_reader", "code_93_reader"] // 指定条形码格式 } }, function(result){ - console.log(result) if (result && result.codeResult) { bottomDiv11.text(result.codeResult.code); if(isRunning && isAlive) + { publish(user_topic, result.codeResult.code) + // Aug 2025 + itemdiv.trigger(MixIO.eventTags.QR_RECOGNIZED, [result.codeResult.code]); + } } else bottomDiv11.text("无二维码或条形码")