{ "name": "", "patches": { "@/1-example-mbot-line-follower": { "comments": { "HknV6snE7": { "content": "\"Blue\" (double digital) optical sensor connected to the rj25 port.", "id": "HknV6snE7", "position": { "x": 476, "y": 0 }, "size": { "height": 51, "width": 442 } }, "SJCetD3KnVm": { "content": "Line follower mBot.\n\n(code from gabbapeople/mbot-lib)\n\nNote: in this patch,the optical sensors are feeding into the mbot-line-sensor-node through ports D12 and D11 (RJ25 port 1)\n\nThis is different to the instructions provided in the mBot assembly manual, which recommends RJ25 port 3.", "id": "SJCetD3KnVm", "position": { "x": 475, "y": 203 }, "size": { "height": 255, "width": 272 } } }, "links": { "B1CKw2YnNX": { "id": "B1CKw2YnNX", "input": { "nodeId": "By5Yw3K3EX", "pinKey": "BywspBoEM" }, "output": { "nodeId": "HJKPhtnEm", "pinKey": "SyomIRurDJ-" } }, "B1jeYv3Y3VX": { "id": "B1jeYv3Y3VX", "input": { "nodeId": "rJOKv2Y3EQ", "pinKey": "BJ_iaF1z7" }, "output": { "nodeId": "HJQtPhY3Nm", "pinKey": "HyloPRt1z7" } }, "By3gtD3YhN7": { "id": "By3gtD3YhN7", "input": { "nodeId": "By5Yw3K3EX", "pinKey": "SkAipHsNM" }, "output": { "nodeId": "SybKvhF3Em", "pinKey": "HyRmUCdBDkZ" } }, "ByxlFvhFh4m": { "id": "ByxlFvhFh4m", "input": { "nodeId": "HJKPhtnEm", "pinKey": "BJnQUR_BwyZ" }, "output": { "nodeId": "rJxYDhF2V7", "pinKey": "B1x2RV3eZ" } }, "H12Kv3YhVm": { "id": "H12Kv3YhVm", "input": { "nodeId": "B14Kw2K2Vm", "pinKey": "S1dG8AOBPJW" }, "output": { "nodeId": "rJOKv2Y3EQ", "pinKey": "HJxSEV8RWX" } }, "HJUxKD3tnEX": { "id": "HJUxKD3tnEX", "input": { "nodeId": "rJOKv2Y3EQ", "pinKey": "HkjspFyGQ" }, "output": { "nodeId": "HJQtPhY3Nm", "pinKey": "BJsD0FyMX" } }, "HytgFD2KhVm": { "id": "HytgFD2KhVm", "input": { "nodeId": "ByYtDnt2EX", "pinKey": "SJMVU0urvkZ" }, "output": { "nodeId": "rJOKv2Y3EQ", "pinKey": "BkQr4N8RZ7" } }, "S11xFPhK3VX": { "id": "S11xFPhK3VX", "input": { "nodeId": "SkLKPhYn4X", "pinKey": "SJ4zUC_BD1-" }, "output": { "nodeId": "rkPFw3YnVQ", "pinKey": "BycP9Q9NM" } }, "S14lYD3Y2N7": { "id": "S14lYD3Y2N7", "input": { "nodeId": "rkPFw3YnVQ", "pinKey": "HJVnt7c4f" }, "output": { "nodeId": "rkMYvhtnEX", "pinKey": "HyRmUCdBDkZ" } }, "S1mlYw3F2NX": { "id": "S1mlYw3F2NX", "input": { "nodeId": "rkMYvhtnEX", "pinKey": "BypX80uSD1Z" }, "output": { "nodeId": "rJOKv2Y3EQ", "pinKey": "BkQr4N8RZ7" } }, "Sy_gYv3Y2Nm": { "id": "Sy_gYv3Y2Nm", "input": { "nodeId": "B14Kw2K2Vm", "pinKey": "r1tz8CdBDkb" }, "output": { "nodeId": "rJOKv2Y3EQ", "pinKey": "BkQr4N8RZ7" } }, "SyveKw3FnNm": { "id": "SyveKw3FnNm", "input": { "nodeId": "rkPFw3YnVQ", "pinKey": "HkYH9QcEz" }, "output": { "nodeId": "B14Kw2K2Vm", "pinKey": "rJqfIRdHwkW" } }, "r1HeYwhthEm": { "id": "r1HeYwhthEm", "input": { "nodeId": "SybKvhF3Em", "pinKey": "rkJ4URuHDJ-" }, "output": { "nodeId": "SkLKPhYn4X", "pinKey": "BkQzLCurwJZ" } }, "r1zxtvht34Q": { "id": "r1zxtvht34Q", "input": { "nodeId": "SybKvhF3Em", "pinKey": "BypX80uSD1Z" }, "output": { "nodeId": "rJxYDhF2V7", "pinKey": "B1x2RV3eZ" } }, "rJ6tPht2NX": { "id": "rJ6tPht2NX", "input": { "nodeId": "SkBFv3Kn4Q", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "ByYtDnt2EX", "pinKey": "B1gN80uHvk-" } }, "rkWlFwnK2NQ": { "id": "rkWlFwnK2NQ", "input": { "nodeId": "ByYtDnt2EX", "pinKey": "r1bVLR_BPJW" }, "output": { "nodeId": "rJOKv2Y3EQ", "pinKey": "HJxSEV8RWX" } }, "rkpltwnt3EX": { "id": "rkpltwnt3EX", "input": { "nodeId": "SkLKPhYn4X", "pinKey": "B1GfLR_SPk-" }, "output": { "nodeId": "SkBFv3Kn4Q", "pinKey": "S13xLCuHvkW" } }, "ryjFw2th47": { "id": "ryjFw2th47", "input": { "nodeId": "HJKPhtnEm", "pinKey": "HkqmLAOrD1W" }, "output": { "nodeId": "SkLKPhYn4X", "pinKey": "BkQzLCurwJZ" } }, "ryqlFv3YhVQ": { "id": "ryqlFv3YhVQ", "input": { "nodeId": "rkMYvhtnEX", "pinKey": "rkJ4URuHDJ-" }, "output": { "nodeId": "rJOKv2Y3EQ", "pinKey": "HJxSEV8RWX" } } }, "nodes": { "B14Kw2K2Vm": { "id": "B14Kw2K2Vm", "position": { "x": 305, "y": 203 }, "type": "xod/core/nor" }, "By5Yw3K3EX": { "id": "By5Yw3K3EX", "position": { "x": -1, "y": 713 }, "type": "gabbapeople/mbot-lib/mbot-motors" }, "ByYtDnt2EX": { "id": "ByYtDnt2EX", "position": { "x": -1, "y": 203 }, "type": "xod/core/and" }, "HJKPhtnEm": { "boundLiterals": { "BJnQUR_BwyZ": "-0.8" }, "id": "HJKPhtnEm", "position": { "x": 101, "y": 611 }, "type": "xod/core/add" }, "HJQtPhY3Nm": { "id": "HJQtPhY3Nm", "position": { "x": 101, "y": -1 }, "type": "gabbapeople/mbot-lib/rj25port-1-blue" }, "SkBFv3Kn4Q": { "boundLiterals": { "r1AgIROHDJW": "1", "ryTeUROHD1b": "25" }, "id": "SkBFv3Kn4Q", "position": { "x": -1, "y": 407 }, "type": "xod/core/if-else" }, "SkLKPhYn4X": { "boundLiterals": { "SJ4zUC_BD1-": "-1" }, "id": "SkLKPhYn4X", "position": { "x": 67, "y": 509 }, "type": "xod/core/multiply" }, "SybKvhF3Em": { "boundLiterals": { "BypX80uSD1Z": "-0.8" }, "id": "SybKvhF3Em", "position": { "x": -1, "y": 611 }, "type": "xod/core/subtract" }, "rJOKv2Y3EQ": { "boundLiterals": { "BJPBVVLRZQ": "2" }, "id": "rJOKv2Y3EQ", "position": { "x": 101, "y": 101 }, "type": "gabbapeople/mbot-lib/mbot-line-sensor" }, "rJxYDhF2V7": { "boundLiterals": { "B1x2RV3eZ": "-0.8" }, "id": "rJxYDhF2V7", "label": "SPD", "position": { "x": -1, "y": 509 }, "type": "xod/core/constant-number" }, "rkMYvhtnEX": { "id": "rkMYvhtnEX", "position": { "x": 101, "y": 203 }, "type": "xod/core/subtract" }, "rkPFw3YnVQ": { "boundLiterals": { "ByeiM975VM": "2", "H1hf57qVG": "1", "rJszc7qNG": "0.7" }, "id": "rkPFw3YnVQ", "position": { "x": 101, "y": 305 }, "type": "xod/core/pid-controller" } }, "path": "@/1-example-mbot-line-follower" }, "@/2-example-mbot-hand-follower-test": { "comments": { "B1GetrhYhEQ": { "content": "\"Yellow\" (single digital port) sensor connected to RJ25 port 2.", "id": "B1GetrhYhEQ", "position": { "x": 374, "y": 0 }, "size": { "height": 51, "width": 442 } }, "BkelKS3tnV7": { "content": "Node reads the distance value in meters.\n ", "id": "BkelKS3tnV7", "position": { "x": 374, "y": 102 }, "size": { "height": 51, "width": 442 } }, "By-ltr3Y3Vm": { "content": "Motors buzz check.", "id": "By-ltr3Y3Vm", "position": { "x": 544, "y": 306 }, "size": { "height": 255, "width": 272 } }, "By4lFr2Y3EX": { "content": "A positive value makes the wheel move backward while negative makes it move forward.\n\n(code from gabbapeople/mbot-lib)", "id": "By4lFr2Y3EX", "position": { "x": 544, "y": 612 }, "size": { "height": 153, "width": 272 } }, "S17xYr2Yh4X": { "content": "PID controller.", "id": "S17xYr2Yh4X", "position": { "x": 544, "y": 204 }, "size": { "height": 51, "width": 272 } } }, "links": { "B1rKQnhNm": { "id": "B1rKQnhNm", "input": { "nodeId": "BJ7uQhh4m", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "S1KS2Y3NQ", "pinKey": "H1KNF7nJ7" } }, "BJss-c24X": { "id": "BJss-c24X", "input": { "nodeId": "S1KS2Y3NQ", "pinKey": "SJjtPwCZm" }, "output": { "nodeId": "HJiqbq24m", "pinKey": "ryDJy52V7" } }, "ByTFrnt247": { "id": "ByTFrnt247", "input": { "nodeId": "ryUKBnF3Nm", "pinKey": "BywspBoEM" }, "output": { "nodeId": "Bk4KS3F34X", "pinKey": "S13xLCuHvkW" } }, "HJAqXnhE7": { "id": "HJAqXnhE7", "input": { "nodeId": "rJ_97n3E7", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "Bk4KS3F34X", "pinKey": "S13xLCuHvkW" } }, "HksFBhth4m": { "id": "HksFBhth4m", "input": { "nodeId": "HJmYB3t2Em", "pinKey": "HJjZLRdBw1-" }, "output": { "nodeId": "HkeKB2thN7", "pinKey": "BycP9Q9NM" } }, "S1Swgc34m": { "id": "S1Swgc34m", "input": { "nodeId": "By7weq3NQ", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "HkeKB2thN7", "pinKey": "BycP9Q9NM" } }, "SJ0KS2F347": { "id": "SJ0KS2F347", "input": { "nodeId": "SkfKrnFhEQ", "pinKey": "r1bVLR_BPJW" }, "output": { "nodeId": "Hyrtr3FhVX", "pinKey": "B19RYS3lW" } }, "SyOYBhtnNX": { "id": "SyOYBhtnNX", "input": { "nodeId": "HkeKB2thN7", "pinKey": "HJVnt7c4f" }, "output": { "nodeId": "S1KS2Y3NQ", "pinKey": "H1KNF7nJ7" } }, "rJcKS2Fn4X": { "id": "rJcKS2Fn4X", "input": { "nodeId": "ryUKBnF3Nm", "pinKey": "SkAipHsNM" }, "output": { "nodeId": "Bk4KS3F34X", "pinKey": "S13xLCuHvkW" } }, "rJhYB2Yh4m": { "id": "rJhYB2Yh4m", "input": { "nodeId": "Bk4KS3F34X", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "SkfKrnFhEQ", "pinKey": "B1gN80uHvk-" } }, "rkd30C3VQ": { "id": "rkd30C3VQ", "input": { "nodeId": "Bk4KS3F34X", "pinKey": "r1AgIROHDJW" }, "output": { "nodeId": "HkeKB2thN7", "pinKey": "BycP9Q9NM" } }, "ryPYH3KnV7": { "id": "ryPYH3KnV7", "input": { "nodeId": "Hyrtr3FhVX", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "HkeKB2thN7", "pinKey": "BycP9Q9NM" } }, "ryyeFBnYn4X": { "id": "ryyeFBnYn4X", "input": { "nodeId": "SkfKrnFhEQ", "pinKey": "SJMVU0urvkZ" }, "output": { "nodeId": "HJmYB3t2Em", "pinKey": "HktZUCdrPkZ" } } }, "nodes": { "BJ7uQhh4m": { "id": "BJ7uQhh4m", "position": { "x": 68, "y": 204 }, "type": "xod/core/watch" }, "Bk4KS3F34X": { "boundLiterals": { "ryTeUROHD1b": "0" }, "id": "Bk4KS3F34X", "position": { "x": 0, "y": 510 }, "type": "xod/core/if-else" }, "By7weq3NQ": { "id": "By7weq3NQ", "position": { "x": 204, "y": 204 }, "type": "xod/core/watch" }, "HJZ7RT24X": { "boundLiterals": { "BJ--G1tI-": "True", "ByNiWkt8Z": "A7" }, "id": "HJZ7RT24X", "position": { "x": 408, "y": 306 }, "type": "xod/common-hardware/button" }, "HJiqbq24m": { "id": "HJiqbq24m", "position": { "x": 272, "y": 0 }, "type": "@/rj25-1-yellow-node" }, "HJmYB3t2Em": { "boundLiterals": { "SJqZ8COrDkW": "5" }, "id": "HJmYB3t2Em", "position": { "x": 0, "y": 306 }, "type": "xod/core/less" }, "HkeKB2thN7": { "boundLiterals": { "rJszc7qNG": "100", "rkY46Q5NG": "0.15" }, "id": "HkeKB2thN7", "position": { "x": 272, "y": 204 }, "type": "xod/core/pid-controller" }, "Hyrtr3FhVX": { "boundLiterals": { "HJbACN3gb": "-5" }, "id": "Hyrtr3FhVX", "position": { "x": 102, "y": 306 }, "type": "xod/core/greater" }, "S1KS2Y3NQ": { "id": "S1KS2Y3NQ", "position": { "x": 272, "y": 102 }, "type": "gabbapeople/mbot-lib/mbot-ultrasonic-sensor" }, "SkfKrnFhEQ": { "id": "SkfKrnFhEQ", "position": { "x": 0, "y": 408 }, "type": "xod/core/and" }, "rJ_97n3E7": { "id": "rJ_97n3E7", "position": { "x": 102, "y": 612 }, "type": "xod/core/watch" }, "ryUKBnF3Nm": { "id": "ryUKBnF3Nm", "position": { "x": 0, "y": 612 }, "type": "gabbapeople/mbot-lib/mbot-motors" } }, "path": "@/2-example-mbot-hand-follower-test" }, "@/mbot-line-sensor-node": { "comments": { "Bk6WaY2NX": { "content": "Line sensor node for mBot.\n\n(code from gabbapeople/mbot-lib)", "id": "Bk6WaY2NX", "position": { "x": 442, "y": 0 }, "size": { "height": 255, "width": 272 } } }, "links": { "HJ5P12K3NX": { "id": "HJ5P12K3NX", "input": { "nodeId": "S1bDJ3Yh4m", "pinKey": "SyLCdSwJZ" }, "output": { "nodeId": "HkzP1hK2V7", "pinKey": "__out__" } }, "HJvDyhFnV7": { "id": "HJvDyhFnV7", "input": { "nodeId": "SJVv1hYh4Q", "pinKey": "B143qAq1Q" }, "output": { "nodeId": "rkPk3th4m", "pinKey": "__out__" } }, "S1ovynthEm": { "id": "S1ovynthEm", "input": { "nodeId": "SJQvJnt2NX", "pinKey": "__in__" }, "output": { "nodeId": "SJVv1hYh4Q", "pinKey": "B1gI0urv1W" } }, "SkKvynF2NX": { "id": "SkKvynF2NX", "input": { "nodeId": "S1bDJ3Yh4m", "pinKey": "B143qAq1Q" }, "output": { "nodeId": "H1rP13K3Em", "pinKey": "__out__" } }, "SyOPJ2t24X": { "id": "SyOPJ2t24X", "input": { "nodeId": "SJVv1hYh4Q", "pinKey": "SyLCdSwJZ" }, "output": { "nodeId": "HkzP1hK2V7", "pinKey": "__out__" } }, "rJ8vy2t24m": { "id": "rJ8vy2t24m", "input": { "nodeId": "BkxP12F3VX", "pinKey": "__in__" }, "output": { "nodeId": "S1bDJ3Yh4m", "pinKey": "B1gI0urv1W" } } }, "nodes": { "BkxP12F3VX": { "description": "State of the left IR LED.", "id": "BkxP12F3VX", "label": "L", "position": { "x": -1, "y": 203 }, "type": "xod/patch-nodes/output-boolean" }, "H1rP13K3Em": { "description": "S2 input port pin.", "id": "H1rP13K3Em", "label": "S2", "position": { "x": 169, "y": -1 }, "type": "xod/patch-nodes/input-port" }, "HkzP1hK2V7": { "boundLiterals": { "__out__": "Continuously" }, "description": "Triggers new read.", "id": "HkzP1hK2V7", "label": "UPD", "position": { "x": 305, "y": -1 }, "type": "xod/patch-nodes/input-pulse" }, "S1bDJ3Yh4m": { "id": "S1bDJ3Yh4m", "position": { "x": -1, "y": 101 }, "type": "xod/gpio/digital-read" }, "SJQvJnt2NX": { "description": "State of the right IR LED.", "id": "SJQvJnt2NX", "label": "R", "position": { "x": 169, "y": 203 }, "type": "xod/patch-nodes/output-boolean" }, "SJVv1hYh4Q": { "id": "SJVv1hYh4Q", "position": { "x": 169, "y": 101 }, "type": "xod/gpio/digital-read" }, "rkPk3th4m": { "description": "S1 input port pin.", "id": "rkPk3th4m", "label": "S1", "position": { "x": -1, "y": -1 }, "type": "xod/patch-nodes/input-port" } }, "path": "@/mbot-line-sensor-node" }, "@/mbot-motor-control-node": { "links": { "BySfNnthVm": { "id": "BySfNnthVm", "input": { "nodeId": "S1bME2YnVX", "pinKey": "SJpVAGRUW" }, "output": { "nodeId": "SkfM43K3EQ", "pinKey": "__out__" } }, "HJEGVnt3Em": { "id": "HJEGVnt3Em", "input": { "nodeId": "rJXfVhthEQ", "pinKey": "SJpVAGRUW" }, "output": { "nodeId": "r1xMN3Y2NX", "pinKey": "HyRmUCdBDkZ" } }, "ryLMV2K3Nm": { "id": "ryLMV2K3Nm", "input": { "nodeId": "r1xMN3Y2NX", "pinKey": "rkJ4URuHDJ-" }, "output": { "nodeId": "BkM43YhVm", "pinKey": "__out__" } } }, "nodes": { "BkM43YhVm": { "description": "M2 motor port", "id": "BkM43YhVm", "label": "M2", "position": { "x": 237, "y": -1 }, "type": "xod/patch-nodes/input-number" }, "S1bME2YnVX": { "boundLiterals": { "HknX0fRU-": "5", "S18NCzAIb": "4" }, "id": "S1bME2YnVX", "position": { "x": -1, "y": 203 }, "type": "xod/common-hardware/h-bridge-dc-motor" }, "SkfM43K3EQ": { "description": "M1 motor port", "id": "SkfM43K3EQ", "label": "M1", "position": { "x": 67, "y": -1 }, "type": "xod/patch-nodes/input-number" }, "r1xMN3Y2NX": { "id": "r1xMN3Y2NX", "position": { "x": 203, "y": 101 }, "type": "xod/core/subtract" }, "rJXfVhthEQ": { "boundLiterals": { "HknX0fRU-": "6", "S18NCzAIb": "7" }, "id": "rJXfVhthEQ", "position": { "x": 135, "y": 203 }, "type": "xod/common-hardware/h-bridge-dc-motor" } }, "path": "@/mbot-motor-control-node" }, "@/mbot-ultrasonic-sensor-node": { "attachments": [ { "content": "struct State {\n};\n long lastEnterTime = millis();\n bool measureFlag = true;\n float measureValue = 0;\n double MAXcm = 400;\n\n{{ GENERATED_CODE }}\n\n\n\n//////////////////////////////////////////////////////////////////////\nlong measure(unsigned long timeout,int port)\n{\n long duration;\n if(millis() - lastEnterTime > 23)\n {\n measureFlag = true; \n }\n\n if(measureFlag == true)\n {\n lastEnterTime = millis();\n measureFlag = false;\n\n ::pinMode(port, OUTPUT);\n ::digitalWrite(port, LOW);\n delayMicroseconds(2);\n ::digitalWrite(port, HIGH);\n delayMicroseconds(10); \n ::digitalWrite(port, LOW);\n ::pinMode(port, INPUT);\n duration = pulseIn(port, HIGH, timeout);\n measureValue = duration;\n }\n else\n {\n duration = measureValue;\n }\n return(duration);\n}\n\n\nvoid evaluate(Context ctx) {\n if (!isInputDirty(ctx))\n return;\n\n auto port = getValue(ctx);\n long distance = measure(MAXcm * 55 + 200,port);\n\n if(distance == 0)\n {\n distance = MAXcm * 58;\n }\n \n double dis = distance / 58.0 / 100;\n emitValue(ctx,dis); \n}\n", "encoding": "utf8", "filename": "patch.cpp" } ], "comments": { "B1UVTF3EX": { "content": "Node for ultrasonic sensor for mBot.\n\n(code from gabbapeople/mbot-lib)", "id": "B1UVTF3EX", "position": { "x": 238, "y": 0 }, "size": { "height": 255, "width": 272 } } }, "nodes": { "ByhZnK3NX": { "boundLiterals": { "__out__": "Continuously" }, "description": "Triggers new read.", "id": "ByhZnK3NX", "label": "UPD", "position": { "x": 67, "y": -1 }, "type": "xod/patch-nodes/input-pulse" }, "SklnWnF3EQ": { "description": "Distance in meters.", "id": "SklnWnF3EQ", "label": "DIST", "position": { "x": 33, "y": 203 }, "type": "xod/patch-nodes/output-number" }, "rJz2bnFnE7": { "id": "rJz2bnFnE7", "position": { "x": 33, "y": 101 }, "type": "xod/patch-nodes/not-implemented-in-xod" }, "ryb3b2K3N7": { "description": "Input port pin.", "id": "ryb3b2K3N7", "label": "S1", "position": { "x": -1, "y": -1 }, "type": "xod/patch-nodes/input-port" } }, "path": "@/mbot-ultrasonic-sensor-node" }, "@/rj25-1-yellow-node": { "nodes": { "ryDJy52V7": { "boundLiterals": { "__in__": "D10" }, "id": "ryDJy52V7", "label": "S1", "position": { "x": -1, "y": -1 }, "type": "xod/patch-nodes/output-port" } }, "path": "@/rj25-1-yellow-node" }, "@/rj25port-1-blue-node": { "links": { "Hk4-30thVQ": { "id": "Hk4-30thVQ", "input": { "nodeId": "ryx-2At3V7", "pinKey": "__in__" }, "output": { "nodeId": "Syfb20KhNm", "pinKey": "B1x2RV3eZ" } }, "r1mZ3RKhEQ": { "id": "r1mZ3RKhEQ", "input": { "nodeId": "H1-nRtnNQ", "pinKey": "__in__" }, "output": { "nodeId": "Hy-bnAKhV7", "pinKey": "B1x2RV3eZ" } } }, "nodes": { "H1-nRtnNQ": { "boundLiterals": { "__in__": "D11" }, "id": "H1-nRtnNQ", "label": "S2", "position": { "x": 33, "y": 101 }, "type": "xod/patch-nodes/output-port" }, "Hy-bnAKhV7": { "boundLiterals": { "B1x2RV3eZ": "D12" }, "id": "Hy-bnAKhV7", "label": "D12", "position": { "x": 33, "y": -1 }, "type": "xod/core/constant-port" }, "Syfb20KhNm": { "boundLiterals": { "B1x2RV3eZ": "D11" }, "id": "Syfb20KhNm", "label": "D11", "position": { "x": -1, "y": -1 }, "type": "xod/core/constant-port" }, "ryx-2At3V7": { "boundLiterals": { "__in__": "D12" }, "id": "ryx-2At3V7", "label": "S1", "position": { "x": -1, "y": 101 }, "type": "xod/patch-nodes/output-port" } }, "path": "@/rj25port-1-blue-node" }, "@/rj25port-2-blue-node": { "links": { "SJXQHJc34m": { "id": "SJXQHJc34m", "input": { "nodeId": "rkZmH1q2E7", "pinKey": "__in__" }, "output": { "nodeId": "ByXSy5hVX", "pinKey": "B1x2RV3eZ" } }, "SyVmr1qnNQ": { "id": "SyVmr1qnNQ", "input": { "nodeId": "ByzQHJc3EX", "pinKey": "__in__" }, "output": { "nodeId": "ryxQSkcnEX", "pinKey": "B1x2RV3eZ" } } }, "nodes": { "ByXSy5hVX": { "boundLiterals": { "B1x2RV3eZ": "D10" }, "id": "ByXSy5hVX", "label": "D10", "position": { "x": 33, "y": -1 }, "type": "xod/core/constant-port" }, "ByzQHJc3EX": { "boundLiterals": { "__in__": "D12" }, "id": "ByzQHJc3EX", "label": "S1", "position": { "x": -1, "y": 101 }, "type": "xod/patch-nodes/output-port" }, "rkZmH1q2E7": { "boundLiterals": { "__in__": "D11" }, "id": "rkZmH1q2E7", "label": "S2", "position": { "x": 33, "y": 101 }, "type": "xod/patch-nodes/output-port" }, "ryxQSkcnEX": { "boundLiterals": { "B1x2RV3eZ": "D10" }, "id": "ryxQSkcnEX", "label": "D9", "position": { "x": -1, "y": -1 }, "type": "xod/core/constant-port" } }, "path": "@/rj25port-2-blue-node" }, "@/rj25port-2-yellow-node": { "nodes": { "Hyu_y53Nm": { "boundLiterals": { "__in__": "D10" }, "id": "Hyu_y53Nm", "label": "S1", "position": { "x": -1, "y": -1 }, "type": "xod/patch-nodes/output-port" } }, "path": "@/rj25port-2-yellow-node" } } }