Node-Red計算機程式
建立 Dashboard 介面
-
安裝 node-red-dashboard(若尚未安裝):
-
在 Dashboard 中新增一個:
-
Tab(例如「計算機」)
-
Group(例如「主介面」)
建立按鍵
在 flow 中加入以下 ui_button:
-
數字:0, 00, 1–9
-
符號:+, -, ×, ÷, %, ., AC, ←, =
每顆按鍵輸出一個 payload:
邏輯處理 Function
新增一個 function 節點,命名為「計算邏輯」,輸入以下程式碼:
顯示計算結果
新增一個 ui_text 節點(或 ui_text_input 只讀模式)
將 function 的輸出連接到這個節點,這樣按下按鍵時會即時顯示計算結果。
Node-Red程式
[
{
"id": "deb22e6cba6ba4fb",
"type": "tab",
"label": "流程1",
"disabled": false,
"info": "",
"env": []
},
{
"id": "f_calc_logic",
"type": "function",
"z": "deb22e6cba6ba4fb",
"name": "計算邏輯",
"func": "let input = msg.payload;\nlet calc = flow.get('calc') || '';\n\nif (input === 'AC') {\n calc = '';\n} else if (input === '←') {\n calc = calc.slice(0, -1);\n} else if (input === '=') {\n try {\n let expression = calc.replace(/×/g, '*').replace(/÷/g, '/');\n let result = eval(expression);\n calc = result.toString();\n } catch (e) {\n calc = 'Error';\n }\n} else {\n calc += input;\n}\n\nflow.set('calc', calc);\nmsg.payload = calc;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 300,
"y": 80,
"wires": [
[
"t_display"
]
]
},
{
"id": "t_display",
"type": "ui_text",
"z": "deb22e6cba6ba4fb",
"group": "group_calc",
"order": 1,
"width": 4,
"height": 1,
"name": "display",
"label": "",
"format": "{{msg.payload}}",
"layout": "row-spread",
"x": 520,
"y": 80,
"wires": []
},
{
"id": "btn_AC",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "AC",
"group": "group_calc",
"order": 2,
"width": 1,
"height": 1,
"label": "AC",
"payload": "AC",
"payloadType": "str",
"x": 60,
"y": 140,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_back",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "←",
"group": "group_calc",
"order": 3,
"width": 1,
"height": 1,
"label": "←",
"payload": "←",
"payloadType": "str",
"x": 120,
"y": 140,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_pct",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "%",
"group": "group_calc",
"order": 4,
"width": 1,
"height": 1,
"label": "%",
"payload": "%",
"payloadType": "str",
"x": 180,
"y": 140,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_div",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "÷",
"group": "group_calc",
"order": 5,
"width": 1,
"height": 1,
"label": "÷",
"payload": "÷",
"payloadType": "str",
"x": 240,
"y": 140,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn7",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "7",
"group": "group_calc",
"order": 6,
"width": 1,
"height": 1,
"label": "7",
"payload": "7",
"payloadType": "str",
"x": 60,
"y": 180,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn8",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "8",
"group": "group_calc",
"order": 7,
"width": 1,
"height": 1,
"label": "8",
"payload": "8",
"payloadType": "str",
"x": 120,
"y": 180,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn9",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "9",
"group": "group_calc",
"order": 8,
"width": 1,
"height": 1,
"label": "9",
"payload": "9",
"payloadType": "str",
"x": 180,
"y": 180,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_mul",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "×",
"group": "group_calc",
"order": 9,
"width": 1,
"height": 1,
"label": "×",
"payload": "×",
"payloadType": "str",
"x": 240,
"y": 180,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn4",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "4",
"group": "group_calc",
"order": 10,
"width": 1,
"height": 1,
"label": "4",
"payload": "4",
"payloadType": "str",
"x": 60,
"y": 220,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn5",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "5",
"group": "group_calc",
"order": 11,
"width": 1,
"height": 1,
"label": "5",
"payload": "5",
"payloadType": "str",
"x": 120,
"y": 220,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn6",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "6",
"group": "group_calc",
"order": 12,
"width": 1,
"height": 1,
"label": "6",
"payload": "6",
"payloadType": "str",
"x": 180,
"y": 220,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_sub",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "-",
"group": "group_calc",
"order": 13,
"width": 1,
"height": 1,
"label": "-",
"payload": "-",
"payloadType": "str",
"x": 240,
"y": 220,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn1",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "1",
"group": "group_calc",
"order": 14,
"width": 1,
"height": 1,
"label": "1",
"payload": "1",
"payloadType": "str",
"x": 60,
"y": 260,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn2",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "2",
"group": "group_calc",
"order": 15,
"width": 1,
"height": 1,
"label": "2",
"payload": "2",
"payloadType": "str",
"x": 120,
"y": 260,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn3",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "3",
"group": "group_calc",
"order": 16,
"width": 1,
"height": 1,
"label": "3",
"payload": "3",
"payloadType": "str",
"x": 180,
"y": 260,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_add",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "+",
"group": "group_calc",
"order": 17,
"width": 1,
"height": 1,
"label": "+",
"payload": "+",
"payloadType": "str",
"x": 240,
"y": 260,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn00",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "00",
"group": "group_calc",
"order": 19,
"width": 1,
"height": 1,
"label": "00",
"payload": "00",
"payloadType": "str",
"x": 60,
"y": 300,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn0",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "0",
"group": "group_calc",
"order": 18,
"width": 1,
"height": 1,
"label": "0",
"payload": "0",
"payloadType": "str",
"x": 120,
"y": 300,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_dot",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": ".",
"group": "group_calc",
"order": 20,
"width": 1,
"height": 1,
"label": ".",
"payload": ".",
"payloadType": "str",
"x": 180,
"y": 300,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "btn_eq",
"type": "ui_button",
"z": "deb22e6cba6ba4fb",
"name": "=",
"group": "group_calc",
"order": 21,
"width": 1,
"height": 1,
"label": "=",
"payload": "=",
"payloadType": "str",
"x": 240,
"y": 300,
"wires": [
[
"f_calc_logic"
]
]
},
{
"id": "group_calc",
"type": "ui_group",
"name": "主介面",
"tab": "tab_calc",
"order": 1,
"disp": true,
"width": 4,
"collapse": false
},
{
"id": "tab_calc",
"type": "ui_tab",
"name": "計算機",
"icon": "dashboard",
"order": 1
}
]


沒有留言:
張貼留言