{ "authors": [ "xod" ], "description": "A crash course tutorial baked as a project", "license": "MIT", "name": "welcome-to-xod", "patches": { "@/01-hello": { "nodes": { "SkjpJD4F-": { "boundLiterals": { "B1oqkTnIb": "11", "HyYh1a3LZ": "0" }, "id": "SkjpJD4F-", "position": { "x": 340, "y": 204 }, "type": "xod/common-hardware/led" } }, "path": "@/01-hello" }, "@/02-deploy": { "nodes": { "r141y-KbX": { "boundLiterals": { "B1oqkTnIb": "11", "HyYh1a3LZ": "1" }, "id": "r141y-KbX", "position": { "x": -137, "y": -1 }, "type": "xod/common-hardware/led" } }, "path": "@/02-deploy" }, "@/03-inspector": { "comments": { "H1nSnynt-": { "content": "The LED is on because of the `led` node.\nA node is a visual representation of some physical device (such as the ports on an Arduino) or some function (adding, subtracting, or more complicated stuff).\n\nThe small colored circles on the nodes are called *pins*. Pins are divided into inputs and outputs. Inputs are always on the top side of the nodes, outputs on the bottom.\n\nThe `led` node is a simple LED-controlling node. It can control only one single-colored LED. The node has only input pins: `PORT` and `LUM`. \n\nPins are used to transfer data between nodes. Nodes process these values and take some action or give a result. In our case, the `led` node transfers the led brightnes value (set in `LUM`) to the Arduino port (set in `PORT`).\n\n## Instructions\n\n1. Click on the `led` node. You will see the Inspector under the list of projects. You can set the node parameters in the Inspector.\n\n2. In the Inspector, change the `LUM` value from 1 to 0.\n\n3. Upload the program to the Arduino. To do so, select Deploy → Upload to Arduino from the menu.\n\nThe LED will switch off after the upload because Arduino sent a value of 0 to the LED's pin. Physically speaking, it stopped delivering voltage to the pin.", "id": "H1nSnynt-", "position": { "x": -68, "y": 0 }, "size": { "height": 765, "width": 306 } } }, "nodes": { "BykwlvEF-": { "boundLiterals": { "B1oqkTnIb": "11", "HyYh1a3LZ": "1" }, "id": "BykwlvEF-", "position": { "x": 272, "y": 204 }, "type": "xod/common-hardware/led" } }, "path": "@/03-inspector" }, "@/04-pwm": { "comments": { "BkVzdWnKW": { "content": "The `LUM` pin on the `led` node accepts values between 0 and 1. The 0 value represents no glow at all, while a value of 1 denotes full brightness.\n\nHowever, you can adjust brightness level by setting values *between* 0 and 1 to the `LUM` pin.\n\n## Instructions\n\n1. Set the `LUM` pin to 0.4. To do this, click on the led node and type in the value in the Inspector.\n\n2. Upload the patch program to the Arduino.\n\nNow your LED is not glowing as bright as before. Feel free to try other values between 0 and 1 before moving on to the next step.\n", "id": "BkVzdWnKW", "position": { "x": -68, "y": 0 }, "size": { "height": 357, "width": 306 } } }, "nodes": { "BJ2tewEKb": { "boundLiterals": { "B1oqkTnIb": "11", "HyYh1a3LZ": "0" }, "id": "BJ2tewEKb", "position": { "x": 272, "y": 204 }, "type": "xod/common-hardware/led" } }, "path": "@/04-pwm" }, "@/05-wiring": { "comments": { "BJ7AzfhK-": { "content": "- `PORT` assigns the number of the Arduino’s digital port to be used.\n- `LUM` controls the brightness (value is between 0 and 1).", "id": "BJ7AzfhK-", "position": { "x": 408, "y": 204 }, "size": { "height": 51, "width": 510 } }, "rkZofM3KW": { "content": "Now you know what `LUM` pin does.\nHowever, an LED could be connected to any digital port on an Arduino. So you need to inform the node of the port number that you are about to use. You can do it with the `PORT` pin.\n\n## Instructions\n\n1. Reconnect the LED to digital port 10 on Arduino ([scheme](https://xod.io/docs/tutorial/05-wiring/?utm_source=ide&utm_medium=ide_comment&utm_campaign=tutorial_05)).\n\n2. Change the `PORT` pin value to 10 and the `LUM` value to 1.\n\n3. Upload your patch to the Arduino.\n\nThe LED should turn on at Arduino's port 10.\n", "id": "rkZofM3KW", "position": { "x": -34, "y": 0 }, "size": { "height": 357, "width": 306 } } }, "nodes": { "B1I7-DEYW": { "boundLiterals": { "B1oqkTnIb": "11", "HyYh1a3LZ": "0.4" }, "id": "B1I7-DEYW", "position": { "x": 306, "y": 204 }, "type": "xod/common-hardware/led" } }, "path": "@/05-wiring" }, "@/06-adding-nodes": { "comments": { "Hy229X-hZ": { "content": "Yet another way is the Quick Search feature:\n\n1. Press “I” key or *double-click* anywhere on the patch.\n2. Type what you are looking for.\n\nIt searches not only in nodes titles, but even in the nodes description, like a small and dumb built-in Google. ", "id": "Hy229X-hZ", "position": { "x": 374, "y": 408 }, "size": { "height": 153, "width": 442 } }, "SJwr3fhFb": { "content": "Now, let’s turn on two LEDs together! You will need another `led` node.\n\n## Instructions\n\n1. Assemble a circuit according to the [scheme](https://xod.io/docs/tutorial/06-adding-nodes/?utm_source=ide&utm_medium=ide_comment&utm_campaign=tutorial_06).\n2. In the node list (below the `welcome-to-xod`), you will find `xod/common-hardware` section. This is a *library* where you can find nodes to work with specific hardware.\n3. Find the `led` node. Note that nodes are arranged in alphabetical order.\n4. Hover the cursor over that node and click the burger button to access a context menu. There click “Place” to add the node onto a patch.\n5. Drag the new node to any slot. \n6. Now, assign the new values for the `PORT` and `LUM` pins to turn on the second LED.\n7. Upload the patch to the Arduino.\n\nBoth LEDs should turn on now.\n\nAlternatively, you may *drag* a node from the Project Browser instead of using the context menu. Try to add yet more `led` nodes to your project.", "id": "SJwr3fhFb", "position": { "x": -34, "y": 0 }, "size": { "height": 561, "width": 306 } } }, "nodes": { "Hkg_WP4Kb": { "boundLiterals": { "B1oqkTnIb": "10", "HyYh1a3LZ": "1" }, "id": "Hkg_WP4Kb", "position": { "x": 306, "y": 204 }, "type": "xod/common-hardware/led" } }, "path": "@/06-adding-nodes" }, "@/07-labels": { "nodes": { "H1ZcSkbFWm": { "boundLiterals": { "B1oqkTnIb": "10", "HyYh1a3LZ": "1" }, "id": "H1ZcSkbFWm", "label": "Alarm", "position": { "x": 109, "y": 102 }, "type": "xod/common-hardware/led" }, "Hkx5By-YZ7": { "boundLiterals": { "B1oqkTnIb": "10", "HyYh1a3LZ": "1" }, "id": "Hkx5By-YZ7", "label": "LED42 ✌✌✌", "position": { "x": 238, "y": 102 }, "type": "xod/common-hardware/led" }, "rkqrk-YWQ": { "boundLiterals": { "B1oqkTnIb": "11", "HyYh1a3LZ": "1" }, "id": "rkqrk-YWQ", "label": "Red LED", "position": { "x": -34, "y": 102 }, "type": "xod/common-hardware/led" } }, "path": "@/07-labels" }, "@/08-constants": { "links": { "ByQkAJZKWX": { "id": "ByQkAJZKWX", "input": { "nodeId": "Hkx1Cy-t-Q", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "B1-y0kWtWm", "pinKey": "B1x2RV3eZ" } }, "S1GyRkZYb7": { "id": "S1GyRkZYb7", "input": { "nodeId": "H110k-Yb7", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "B1-y0kWtWm", "pinKey": "B1x2RV3eZ" } } }, "nodes": { "B1-y0kWtWm": { "boundLiterals": { "B1x2RV3eZ": "0" }, "id": "B1-y0kWtWm", "position": { "x": 169, "y": 101 }, "type": "xod/core/constant-number" }, "H110k-Yb7": { "boundLiterals": { "B1oqkTnIb": "10" }, "id": "H110k-Yb7", "label": "LED1", "position": { "x": 67, "y": 305 }, "type": "xod/common-hardware/led" }, "Hkx1Cy-t-Q": { "boundLiterals": { "B1oqkTnIb": "11" }, "id": "Hkx1Cy-t-Q", "label": "LED2", "position": { "x": 203, "y": 305 }, "type": "xod/common-hardware/led" } }, "path": "@/08-constants" }, "@/09-pot": { "links": { "BJ97lbFbX": { "id": "BJ97lbFbX", "input": { "nodeId": "rJZFxlWFbQ", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "BJDml-KZQ", "pinKey": "H1sM2A12-" } }, "r137gbYbQ": { "id": "r137gbYbQ", "input": { "nodeId": "SJFeebFWm", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "BJDml-KZQ", "pinKey": "H1sM2A12-" } } }, "nodes": { "BJDml-KZQ": { "id": "BJDml-KZQ", "position": { "x": 374, "y": 0 }, "type": "xod/common-hardware/pot" }, "SJFeebFWm": { "boundLiterals": { "B1oqkTnIb": "11" }, "id": "SJFeebFWm", "label": "LED2", "position": { "x": 407, "y": 203 }, "type": "xod/common-hardware/led" }, "rJZFxlWFbQ": { "boundLiterals": { "B1oqkTnIb": "10" }, "id": "rJZFxlWFbQ", "label": "LED1", "position": { "x": 271, "y": 203 }, "type": "xod/common-hardware/led" } }, "path": "@/09-pot" }, "@/10-math": { "links": { "BJer_fHWQ": { "id": "BJer_fHWQ", "input": { "nodeId": "SJihHwNKb", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "HkCEOMSWm", "pinKey": "BkQzLCurwJZ" } }, "ByXHufHWm": { "id": "ByXHufHWm", "input": { "nodeId": "HkCEOMSWm", "pinKey": "B1GfLR_SPk-" }, "output": { "nodeId": "SyclTC1hb", "pinKey": "H1sM2A12-" } }, "rkrZaAkn-": { "id": "rkrZaAkn-", "input": { "nodeId": "r1V3SDEtW", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "SyclTC1hb", "pinKey": "H1sM2A12-" } } }, "nodes": { "HkCEOMSWm": { "boundLiterals": { "SJ4zUC_BD1-": "2" }, "id": "HkCEOMSWm", "position": { "x": 204, "y": 204 }, "type": "xod/core/multiply" }, "SJihHwNKb": { "boundLiterals": { "B1oqkTnIb": "11" }, "id": "SJihHwNKb", "label": "LED2", "position": { "x": 170, "y": 306 }, "type": "xod/common-hardware/led" }, "SyclTC1hb": { "id": "SyclTC1hb", "position": { "x": 68, "y": 0 }, "type": "xod/common-hardware/pot" }, "r1V3SDEtW": { "boundLiterals": { "B1oqkTnIb": "10" }, "id": "r1V3SDEtW", "label": "LED1", "position": { "x": 34, "y": 306 }, "type": "xod/common-hardware/led" } }, "path": "@/10-math" }, "@/11-servo": { "links": { "B1_RjMHZm": { "id": "B1_RjMHZm", "input": { "nodeId": "Syv38wNYW", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "rk_tTCk2Z", "pinKey": "H1sM2A12-" } } }, "nodes": { "Syv38wNYW": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "Syv38wNYW", "position": { "x": 136, "y": 408 }, "type": "xod/common-hardware/servo" }, "rk_tTCk2Z": { "id": "rk_tTCk2Z", "position": { "x": 170, "y": 204 }, "type": "xod/common-hardware/pot" } }, "path": "@/11-servo" }, "@/12-help": { "nodes": { "HJojTfHbX": { "id": "HJojTfHbX", "position": { "x": 272, "y": 306 }, "type": "xod/common-hardware/led" }, "Hy3tvDEKZ": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "Hy3tvDEKZ", "position": { "x": 272, "y": 204 }, "type": "xod/common-hardware/servo" }, "r11jaGrZX": { "id": "r11jaGrZX", "position": { "x": 272, "y": -102 }, "type": "xod/common-hardware/pot" }, "rkEKww4tW": { "boundLiterals": { "H1s0WI6MZ": "1" }, "id": "rkEKww4tW", "position": { "x": 272, "y": 0 }, "type": "xod/common-hardware/thermometer-tmp36" }, "rySoazrZQ": { "id": "rySoazrZQ", "position": { "x": 272, "y": 102 }, "type": "xod/core/multiply" } }, "path": "@/12-help" }, "@/13-map": { "links": { "B1YtxZFWQ": { "id": "B1YtxZFWQ", "input": { "nodeId": "rkK3_PEYb", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "SJBKxWK-X", "pinKey": "H12bIR_SPyZ" } }, "SyuYl-tbm": { "id": "SyuYl-tbm", "input": { "nodeId": "SJBKxWK-X", "pinKey": "BJlzICOSv1-" }, "output": { "nodeId": "Bklh_vNFb", "pinKey": "rkFgMITM-" } } }, "nodes": { "Bklh_vNFb": { "boundLiterals": { "H1s0WI6MZ": "1" }, "id": "Bklh_vNFb", "position": { "x": -34, "y": 0 }, "type": "xod/common-hardware/thermometer-tmp36" }, "SJBKxWK-X": { "id": "SJBKxWK-X", "position": { "x": -34, "y": 102 }, "type": "xod/math/map" }, "rkK3_PEYb": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "rkK3_PEYb", "position": { "x": -68, "y": 204 }, "type": "xod/common-hardware/servo" } }, "path": "@/13-map" }, "@/14-map-adjust": { "links": { "S1esl-tZm": { "id": "S1esl-tZm", "input": { "nodeId": "HkGG5mBWQ", "pinKey": "HJjEe1lnb" }, "output": { "nodeId": "B1WVFPEtZ", "pinKey": "rkFgMITM-" } }, "rJdf9QrWQ": { "id": "rJdf9QrWQ", "input": { "nodeId": "BJrNFP4tZ", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "HkGG5mBWQ", "pinKey": "rJFmgJehW" } } }, "nodes": { "B1WVFPEtZ": { "boundLiterals": { "H1s0WI6MZ": "1" }, "id": "B1WVFPEtZ", "position": { "x": 136, "y": 0 }, "type": "xod/common-hardware/thermometer-tmp36" }, "BJrNFP4tZ": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "BJrNFP4tZ", "position": { "x": 102, "y": 204 }, "type": "xod/common-hardware/servo" }, "HkGG5mBWQ": { "boundLiterals": { "B1rSeJlnZ": "95", "HkFBgJehW": "0.5", "SJbSlJxh-": "59" }, "id": "HkGG5mBWQ", "position": { "x": 136, "y": 102 }, "type": "xod/math/map-clip" } }, "path": "@/14-map-adjust" }, "@/15-buttons": { "links": { "BymG3Qrb7": { "id": "BymG3Qrb7", "input": { "nodeId": "S13FKPEFb", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "S1gzhXSZm", "pinKey": "BJ--G1tI-" } } }, "nodes": { "S13FKPEFb": { "boundLiterals": { "B1oqkTnIb": "11" }, "id": "S13FKPEFb", "position": { "x": 136, "y": 306 }, "type": "xod/common-hardware/led" }, "S1gzhXSZm": { "boundLiterals": { "ByNiWkt8Z": "D13" }, "id": "S1gzhXSZm", "position": { "x": 170, "y": 102 }, "type": "xod/common-hardware/button" } }, "path": "@/15-buttons" }, "@/16-logic": { "links": { "Hk_79PVtW": { "id": "Hk_79PVtW", "input": { "nodeId": "Byp-5wEF-", "pinKey": "r1bVLR_BPJW" }, "output": { "nodeId": "ByVg5w4F-", "pinKey": "BJ--G1tI-" } }, "S1PX5DVtW": { "id": "S1PX5DVtW", "input": { "nodeId": "Byp-5wEF-", "pinKey": "SJMVU0urvkZ" }, "output": { "nodeId": "ByHgcw4Yb", "pinKey": "BJ--G1tI-" } }, "S1oQqw4YW": { "id": "S1oQqw4YW", "input": { "nodeId": "ByCkcvVYW", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "BJ3z5DEtZ", "pinKey": "r1if8ROSDJ-" } }, "r1KXqPNYW": { "id": "r1KXqPNYW", "input": { "nodeId": "BJ3z5DEtZ", "pinKey": "ry3zLA_Bv1Z" }, "output": { "nodeId": "Byp-5wEF-", "pinKey": "B1gN80uHvk-" } } }, "nodes": { "BJ3z5DEtZ": { "id": "BJ3z5DEtZ", "position": { "x": 34, "y": 204 }, "type": "xod/core/not" }, "ByCkcvVYW": { "boundLiterals": { "B1oqkTnIb": "11" }, "id": "ByCkcvVYW", "position": { "x": 34, "y": 306 }, "type": "xod/common-hardware/led" }, "ByHgcw4Yb": { "boundLiterals": { "ByNiWkt8Z": "13" }, "id": "ByHgcw4Yb", "position": { "x": 34, "y": 0 }, "type": "xod/common-hardware/button" }, "ByVg5w4F-": { "boundLiterals": { "ByNiWkt8Z": "12" }, "id": "ByVg5w4F-", "position": { "x": 136, "y": 0 }, "type": "xod/common-hardware/button" }, "Byp-5wEF-": { "id": "Byp-5wEF-", "position": { "x": 34, "y": 102 }, "type": "xod/core/and" }, "H1xr5vNtZ": { "id": "H1xr5vNtZ", "position": { "x": 136, "y": 306 }, "type": "xod/core/nor" }, "r1U4cD4Yb": { "id": "r1U4cD4Yb", "position": { "x": 136, "y": 204 }, "type": "xod/core/or" }, "r1rHcPVYZ": { "id": "r1rHcPVYZ", "position": { "x": 238, "y": 306 }, "type": "xod/core/xor" }, "rkTBcPEFZ": { "id": "rkTBcPEFZ", "position": { "x": 238, "y": 204 }, "type": "xod/core/nand" } }, "path": "@/16-logic" }, "@/17-ldr": { "links": { "HkNIBFcWX": { "id": "HkNIBFcWX", "input": { "nodeId": "Hk0_5wNY-", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "HJyUHF5ZX", "pinKey": "BkoeN9Ay7" } } }, "nodes": { "HJyUHF5ZX": { "id": "HJyUHF5ZX", "position": { "x": 272, "y": 0 }, "type": "xod/common-hardware/analog-sensor" }, "Hk0_5wNY-": { "boundLiterals": { "B1oqkTnIb": "11" }, "id": "Hk0_5wNY-", "position": { "x": 238, "y": 204 }, "type": "xod/common-hardware/led" } }, "path": "@/17-ldr" }, "@/18-comparisons": { "nodes": { "BJszoD4tZ": { "boundLiterals": { "B1oqkTnIb": "D11" }, "id": "BJszoD4tZ", "position": { "x": 340, "y": 102 }, "type": "xod/common-hardware/led" }, "SknJWbY-m": { "id": "SknJWbY-m", "position": { "x": 476, "y": 0 }, "type": "xod/core/greater" }, "r1zxWbYbQ": { "id": "r1zxWbYbQ", "position": { "x": 238, "y": 0 }, "type": "xod/core/less" }, "ryMPSF5ZX": { "id": "ryMPSF5ZX", "position": { "x": 340, "y": -102 }, "type": "xod/common-hardware/analog-sensor" } }, "path": "@/18-comparisons" }, "@/19-if-else": { "links": { "Hk5wdU9oW": { "id": "Hk5wdU9oW", "input": { "nodeId": "By4w_LqoZ", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "BywpJ149Z", "pinKey": "S13xLCuHvkW" } }, "SJQOHF5bm": { "id": "SJQOHF5bm", "input": { "nodeId": "Bkxay1E5Z", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "SJTwHK9-7", "pinKey": "BkoeN9Ay7" } }, "r1Z_QZEcb": { "id": "r1Z_QZEcb", "input": { "nodeId": "BywpJ149Z", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "Bkxay1E5Z", "pinKey": "B19RYS3lW" } } }, "nodes": { "Bkxay1E5Z": { "boundLiterals": { "HJbACN3gb": "0" }, "id": "Bkxay1E5Z", "position": { "x": 238, "y": 0 }, "type": "xod/core/greater" }, "By4w_LqoZ": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "By4w_LqoZ", "position": { "x": 204, "y": 204 }, "type": "xod/common-hardware/servo" }, "BywpJ149Z": { "boundLiterals": { "r1AgIROHDJW": "0", "ryTeUROHD1b": "0" }, "id": "BywpJ149Z", "position": { "x": 238, "y": 102 }, "type": "xod/core/if-else" }, "SJTwHK9-7": { "id": "SJTwHK9-7", "position": { "x": 238, "y": -102 }, "type": "xod/common-hardware/analog-sensor" } }, "path": "@/19-if-else" }, "@/20-fade": { "links": { "B1zhuL5jb": { "id": "B1zhuL5jb", "input": { "nodeId": "B185dU5s-", "pinKey": "HyYJqJFLZ" }, "output": { "nodeId": "BkiYd85o-", "pinKey": "S13xLCuHvkW" } }, "SJqnuU9iZ": { "id": "SJqnuU9iZ", "input": { "nodeId": "BkqfdIqob", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "rJyzdUqjZ", "pinKey": "SyBtREhlW" } }, "r1Bo_Uqj-": { "id": "r1Bo_Uqj-", "input": { "nodeId": "B1ki_85jZ", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "B185dU5s-", "pinKey": "BJ0M5JKUW" } }, "ryOhdLqs-": { "id": "ryOhdLqs-", "input": { "nodeId": "BkiYd85o-", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "BkqfdIqob", "pinKey": "B19RYS3lW" } } }, "nodes": { "B185dU5s-": { "boundLiterals": { "BkweckF8-": "0" }, "id": "B185dU5s-", "position": { "x": 102, "y": 306 }, "type": "xod/core/fade" }, "B1ki_85jZ": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "B1ki_85jZ", "position": { "x": 68, "y": 408 }, "type": "xod/common-hardware/servo" }, "BkiYd85o-": { "boundLiterals": { "ryTeUROHD1b": "0" }, "id": "BkiYd85o-", "position": { "x": 102, "y": 204 }, "type": "xod/core/if-else" }, "BkqfdIqob": { "id": "BkqfdIqob", "position": { "x": 102, "y": 102 }, "type": "xod/core/greater" }, "rJyzdUqjZ": { "boundLiterals": { "SkuhqCqym": "A2" }, "id": "rJyzdUqjZ", "position": { "x": 102, "y": 0 }, "type": "xod/gpio/analog-read" } }, "path": "@/20-fade" }, "@/21-pulses": { "links": { "SJADqz45Z": { "id": "SJADqz45Z", "input": { "nodeId": "Skw0PzVcZ", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "H1O2DMN5b", "pinKey": "SyBtREhlW" } } }, "nodes": { "H1O2DMN5b": { "id": "H1O2DMN5b", "label": "pot", "position": { "x": 306, "y": 204 }, "type": "xod/gpio/analog-read" }, "Skw0PzVcZ": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "Skw0PzVcZ", "position": { "x": 272, "y": 408 }, "type": "xod/common-hardware/servo" } }, "path": "@/21-pulses" }, "@/22-clock": { "links": { "B1fHXXNqb": { "id": "B1fHXXNqb", "input": { "nodeId": "By-NXQVqW", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "ByUpzmN5W", "pinKey": "SyBtREhlW" } }, "BkzveNH-Q": { "id": "BkzveNH-Q", "input": { "nodeId": "ByUpzmN5W", "pinKey": "SyKd0E2x-" }, "output": { "nodeId": "rk_NQmEqb", "pinKey": "HJU8CE2lW" } } }, "nodes": { "By-NXQVqW": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "By-NXQVqW", "position": { "x": 136, "y": 510 }, "type": "xod/common-hardware/servo" }, "ByUpzmN5W": { "id": "ByUpzmN5W", "label": "pot", "position": { "x": 170, "y": 408 }, "type": "xod/gpio/analog-read" }, "rk_NQmEqb": { "boundLiterals": { "B13SCNhl-": "2" }, "id": "rk_NQmEqb", "position": { "x": 204, "y": 306 }, "type": "xod/core/clock" } }, "path": "@/22-clock" }, "@/23-count": { "links": { "r1VYXX4q-": { "id": "r1VYXX4q-", "input": { "nodeId": "SkddQ749Z", "pinKey": "HJAq-A_8-" }, "output": { "nodeId": "r1xdmX4qW", "pinKey": "HJU8CE2lW" } }, "rksvMdSc-": { "id": "rksvMdSc-", "input": { "nodeId": "Hy_vm7E9b", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "SkddQ749Z", "pinKey": "r1yhZRd8W" } } }, "nodes": { "Hy_vm7E9b": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "Hy_vm7E9b", "position": { "x": 68, "y": 306 }, "type": "xod/common-hardware/servo" }, "SkddQ749Z": { "id": "SkddQ749Z", "position": { "x": 102, "y": 204 }, "type": "xod/core/count" }, "r1xdmX4qW": { "id": "r1xdmX4qW", "position": { "x": 136, "y": 102 }, "type": "xod/core/clock" } }, "path": "@/23-count" }, "@/24-flip-flop": { "links": { "BJcrQYS5W": { "id": "BJcrQYS5W", "input": { "nodeId": "HyNvOmN5b", "pinKey": "ryTIROHwkW" }, "output": { "nodeId": "ByXLOXV9W", "pinKey": "HJU8CE2lW" } }, "Bk73s9rcb": { "id": "Bk73s9rcb", "input": { "nodeId": "HyA_GKr9W", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "HyNvOmN5b", "pinKey": "HkyxURuSPyW" } } }, "nodes": { "ByXLOXV9W": { "boundLiterals": { "B13SCNhl-": "1" }, "id": "ByXLOXV9W", "position": { "x": 340, "y": 102 }, "type": "xod/core/clock" }, "HyA_GKr9W": { "boundLiterals": { "B1oqkTnIb": "11" }, "id": "HyA_GKr9W", "position": { "x": 272, "y": 306 }, "type": "xod/common-hardware/led" }, "HyNvOmN5b": { "id": "HyNvOmN5b", "position": { "x": 306, "y": 204 }, "type": "xod/core/flip-flop" } }, "path": "@/24-flip-flop" }, "@/25-multiple-timelines": { "comments": { "BJoLt--tbX": { "content": "The `clock` node provides the pulse frequency for sending data to the servo.", "id": "BJoLt--tbX", "position": { "x": 543, "y": 407 }, "size": { "height": 51, "width": 340 } }, "BkRIKZ-KZm": { "content": "The `servo` node receives a value from 0 to 1 in the `VAL` pin, which corresponds to the rotation of the shaft from 0° to 180°, respectively.", "id": "BkRIKZ-KZm", "position": { "x": 509, "y": 611 }, "size": { "height": 51, "width": 374 } }, "BkT8K-Zt-m": { "content": "The `flip-flop` node changes the state on the `MEM` pin from 0 to 1 every 30 seconds. Fortunately, the boolean and number data types are compatible with each other — `true` and `false` are automatically converted to `1` and `0` for the `map` `X` input\n", "id": "BkT8K-Zt-m", "position": { "x": 578, "y": 102 }, "size": { "height": 153, "width": 306 } }, "H1Je8FbbtbQ": { "content": "The `map` node is used to set the rotation angle of the servo for one send from `count`.", "id": "H1Je8FbbtbQ", "position": { "x": 578, "y": 306 }, "size": { "height": 51, "width": 306 } }, "Hy58KWWKbX": { "content": "The `count` node sends the accumulated rotation angle to the servo.", "id": "Hy58KWWKbX", "position": { "x": 509, "y": 509 }, "size": { "height": 51, "width": 374 } }, "S1hIFW-YWQ": { "content": "This node sends a pulse to `flip-flop` once every 30 seconds, changing its value from `true` to `false` and back.", "id": "S1hIFW-YWQ", "position": { "x": 509, "y": -1 }, "size": { "height": 51, "width": 374 } } }, "links": { "B1OIt-Ztbm": { "id": "B1OIt-Ztbm", "input": { "nodeId": "HkQ8Y-ZK-7", "pinKey": "HJvqZ0dLZ" }, "output": { "nodeId": "S1ItZ-Y-X", "pinKey": "H12bIR_SPyZ" } }, "HkB8YZ-YZX": { "id": "HkB8YZ-YZX", "input": { "nodeId": "HkQ8Y-ZK-7", "pinKey": "HJAq-A_8-" }, "output": { "nodeId": "rybIF-bY-7", "pinKey": "HJU8CE2lW" } }, "SyvLt--Ybm": { "id": "SyvLt--Ybm", "input": { "nodeId": "rkgLFZZK-m", "pinKey": "ryTIROHwkW" }, "output": { "nodeId": "r1VIYWbKWX", "pinKey": "HJU8CE2lW" } }, "r1ILF-ZF-m": { "id": "r1ILF-ZF-m", "input": { "nodeId": "S1ItZ-Y-X", "pinKey": "BJlzICOSv1-" }, "output": { "nodeId": "rkgLFZZK-m", "pinKey": "HkyxURuSPyW" } }, "rJtUYbZKZ7": { "id": "rJtUYbZKZ7", "input": { "nodeId": "HJfLFWZt-X", "pinKey": "r1sfQ_6fb" }, "output": { "nodeId": "HkQ8Y-ZK-7", "pinKey": "r1yhZRd8W" } } }, "nodes": { "HJfLFWZt-X": { "boundLiterals": { "S1vGmu6Gb": "9" }, "id": "HJfLFWZt-X", "position": { "x": 373, "y": 611 }, "type": "xod/common-hardware/servo" }, "HkQ8Y-ZK-7": { "id": "HkQ8Y-ZK-7", "label": "count", "position": { "x": 373, "y": 509 }, "type": "xod/core/count" }, "S1ItZ-Y-X": { "boundLiterals": { "HJCWLAdSwyW": "1", "rJbGU0_Hv1Z": "-0.017", "rkpbU0OrwyZ": "0.017" }, "id": "S1ItZ-Y-X", "position": { "x": 374, "y": 306 }, "type": "xod/math/map" }, "r1VIYWbKWX": { "boundLiterals": { "B13SCNhl-": "30" }, "id": "r1VIYWbKWX", "label": "long-clock", "position": { "x": 373, "y": -1 }, "type": "xod/core/clock" }, "rkgLFZZK-m": { "id": "rkgLFZZK-m", "position": { "x": 373, "y": 101 }, "type": "xod/core/flip-flop" }, "rybIF-bY-7": { "boundLiterals": { "B13SCNhl-": "1" }, "id": "rybIF-bY-7", "label": "step-clock", "position": { "x": 407, "y": 407 }, "type": "xod/core/clock" } }, "path": "@/25-multiple-timelines" }, "@/26-lcd": { "links": { "r1MjWVHZ7": { "id": "r1MjWVHZ7", "input": { "nodeId": "BJLI75r9Z", "pinKey": "B1TSE9tZ-" }, "output": { "nodeId": "By6RU3IqZ", "pinKey": "B1x2RV3eZ" } }, "ryEsZVH-X": { "id": "ryEsZVH-X", "input": { "nodeId": "BJLI75r9Z", "pinKey": "H1bLN9F-b" }, "output": { "nodeId": "ryvyP3I9-", "pinKey": "B1x2RV3eZ" } } }, "nodes": { "BJLI75r9Z": { "boundLiterals": { "B1TSE9tZ-": "\"Make\"", "BJJqaX4Gb": "5", "H1bLN9F-b": "\"the links!\"", "HJysTXVMb": "3", "S1nqa7NMZ": "4", "SkBK6Q4fb": "11", "rJlYT7EfW": "12", "rkbjp7Ezb": "2" }, "id": "BJLI75r9Z", "position": { "x": 442, "y": 918 }, "type": "xod/common-hardware/text-lcd-16x2" }, "By6RU3IqZ": { "boundLiterals": { "B1x2RV3eZ": "\"Hello\"" }, "id": "By6RU3IqZ", "position": { "x": 646, "y": 816 }, "type": "xod/core/constant-string" }, "ryvyP3I9-": { "boundLiterals": { "B1x2RV3eZ": "\"world!\"" }, "id": "ryvyP3I9-", "position": { "x": 680, "y": 816 }, "type": "xod/core/constant-string" } }, "path": "@/26-lcd" }, "@/27-lcd-data": { "links": { "rJKQHvJZG": { "id": "rJKQHvJZG", "input": { "nodeId": "BJFi3y8qZ", "pinKey": "H1bLN9F-b" }, "output": { "nodeId": "BJV7SDJbG", "pinKey": "rkFgMITM-" } }, "ryZ1akI9Z": { "id": "ryZ1akI9Z", "input": { "nodeId": "BJFi3y8qZ", "pinKey": "B1TSE9tZ-" }, "output": { "nodeId": "HkvT31LqZ", "pinKey": "BkEVI0uHwJb" } } }, "nodes": { "BJFi3y8qZ": { "boundLiterals": { "BJJqaX4Gb": "5", "HJysTXVMb": "3", "S1nqa7NMZ": "4", "SkBK6Q4fb": "11", "rJlYT7EfW": "12", "rkbjp7Ezb": "2" }, "id": "BJFi3y8qZ", "position": { "x": 442, "y": 1122 }, "type": "xod/common-hardware/text-lcd-16x2" }, "BJV7SDJbG": { "boundLiterals": { "H1s0WI6MZ": "1" }, "id": "BJV7SDJbG", "position": { "x": 680, "y": 1020 }, "type": "xod/common-hardware/thermometer-tmp36" }, "HkvT31LqZ": { "id": "HkvT31LqZ", "position": { "x": 646, "y": 1020 }, "type": "xod/core/system-time" } }, "path": "@/27-lcd-data" }, "@/28-string-concat": { "links": { "BJ9MzNHbQ": { "id": "BJ9MzNHbQ", "input": { "nodeId": "S1ykdOLqb", "pinKey": "Hkqu9oaWb" }, "output": { "nodeId": "HJvfG4rbX", "pinKey": "B1x2RV3eZ" } }, "BkiMGNrWQ": { "id": "BkiMGNrWQ", "input": { "nodeId": "B1V26JIc-", "pinKey": "Hkqu9oaWb" }, "output": { "nodeId": "SyQzM4SZQ", "pinKey": "B1x2RV3eZ" } }, "H1xZfVSb7": { "id": "H1xZfVSb7", "input": { "nodeId": "S1ykdOLqb", "pinKey": "BkeKcj6ZZ" }, "output": { "nodeId": "By5oDu8qW", "pinKey": "SyBtREhlW" } }, "HJh3pyLcW": { "id": "HJh3pyLcW", "input": { "nodeId": "SJHcpyUqb", "pinKey": "B1TSE9tZ-" }, "output": { "nodeId": "B1V26JIc-", "pinKey": "rksccsp-W" } }, "HyDkOuLcW": { "id": "HyDkOuLcW", "input": { "nodeId": "SJHcpyUqb", "pinKey": "H1bLN9F-b" }, "output": { "nodeId": "S1ykdOLqb", "pinKey": "rksccsp-W" } }, "rJhgzVBbQ": { "id": "rJhgzVBbQ", "input": { "nodeId": "B1V26JIc-", "pinKey": "BkeKcj6ZZ" }, "output": { "nodeId": "r19sT1I9-", "pinKey": "rkFgMITM-" } } }, "nodes": { "B1V26JIc-": { "id": "B1V26JIc-", "position": { "x": 340, "y": 714 }, "type": "xod/core/concat" }, "By5oDu8qW": { "boundLiterals": { "SkuhqCqym": "A0" }, "id": "By5oDu8qW", "label": "Photoresistor", "position": { "x": 578, "y": 612 }, "type": "xod/gpio/analog-read" }, "HJvfG4rbX": { "boundLiterals": { "B1x2RV3eZ": "\"Light\"" }, "id": "HJvfG4rbX", "label": "Light", "position": { "x": 544, "y": 612 }, "type": "xod/core/constant-string" }, "S1ykdOLqb": { "id": "S1ykdOLqb", "position": { "x": 544, "y": 714 }, "type": "xod/core/concat" }, "SJHcpyUqb": { "id": "SJHcpyUqb", "position": { "x": 238, "y": 816 }, "type": "xod/common-hardware/text-lcd-16x2" }, "SyQzM4SZQ": { "boundLiterals": { "B1x2RV3eZ": "\"Temp:\"" }, "id": "SyQzM4SZQ", "label": "Temp:", "position": { "x": 340, "y": 612 }, "type": "xod/core/constant-string" }, "r19sT1I9-": { "boundLiterals": { "H1s0WI6MZ": "1" }, "id": "r19sT1I9-", "position": { "x": 374, "y": 612 }, "type": "xod/common-hardware/thermometer-tmp36" } }, "path": "@/28-string-concat" }, "@/99-the-end": { "comments": { "Bk_ETwPHM": { "content": "**Congratulations!**\n\nYou have completed the tutorial. Hope you enjoyed it. May we ask to rate it?\n\n[★★★★★ Excellent!](https://forum.xod.io/t/tutorial-feedback/457/?utm_source=ide&utm_medium=ide_comment&utm_campaign=tutorial_99&utm_term=5_stars)\n[★★★★ Very Good](https://forum.xod.io/t/tutorial-feedback/457/?utm_source=ide&utm_medium=ide_comment&utm_campaign=tutorial_99&utm_term=4_stars)\n[★★★ Okay](https://forum.xod.io/t/tutorial-feedback/457/?utm_source=ide&utm_medium=ide_comment&utm_campaign=tutorial_99&utm_term=3_stars)\n[★★ So-so](https://forum.xod.io/t/tutorial-feedback/457/?utm_source=ide&utm_medium=ide_comment&utm_campaign=tutorial_99&utm_term=2_stars)\n[★ Poor](https://forum.xod.io/t/tutorial-feedback/457/?utm_source=ide&utm_medium=ide_comment&utm_campaign=tutorial_99&utm_term=1_star)\n\nIf you would like to give more detailed feedback, we’ll happy to hear it on the rating page.", "id": "Bk_ETwPHM", "position": { "x": 34, "y": 0 }, "size": { "height": 255, "width": 442 } } }, "links": { "r1nlTPvrG": { "id": "r1nlTPvrG", "input": { "nodeId": "SJpThvwSf", "pinKey": "H1v-80uHDyZ" }, "output": { "nodeId": "Sy6n2DvHM", "pinKey": "BkdbLAuSPyZ" } }, "ryde6PwSG": { "id": "ryde6PwSG", "input": { "nodeId": "H1D22DDBf", "pinKey": "H1v-80uHDyZ" }, "output": { "nodeId": "rJhi2DPBG", "pinKey": "BkdbLAuSPyZ" } } }, "nodes": { "B1AahPDBG": { "id": "B1AahPDBG", "position": { "x": 170, "y": 510 }, "type": "xod/math/ceil" }, "BJq6nPwHz": { "id": "BJq6nPwHz", "position": { "x": 272, "y": 510 }, "type": "xod/math/ceil" }, "ByP63PPHf": { "id": "ByP63PPHf", "position": { "x": 204, "y": 510 }, "type": "xod/math/ceil" }, "H1D22DDBf": { "id": "H1D22DDBf", "position": { "x": 136, "y": 510 }, "type": "xod/math/ceil" }, "HySThPDBM": { "id": "HySThPDBM", "position": { "x": 238, "y": 510 }, "type": "xod/math/ceil" }, "SJpThvwSf": { "id": "SJpThvwSf", "position": { "x": 306, "y": 510 }, "type": "xod/math/ceil" }, "Sy6n2DvHM": { "id": "Sy6n2DvHM", "position": { "x": 374, "y": 408 }, "type": "xod/math/ceil" }, "r1AmpwvHf": { "id": "r1AmpwvHf", "position": { "x": 272, "y": 306 }, "type": "xod/patch-nodes/output-number" }, "rJhi2DPBG": { "id": "rJhi2DPBG", "position": { "x": 68, "y": 408 }, "type": "xod/math/ceil" }, "rJnXTwvSM": { "id": "rJnXTwvSM", "position": { "x": 170, "y": 306 }, "type": "xod/patch-nodes/output-number" } }, "path": "@/99-the-end" } }, "version": "0.14.0" }