{ "name": "", "patches": { "@/tuto201": { "comments": { "HyozXrqRE": { "content": "Hello, and welcome to this second tutorial!\n", "id": "HyozXrqRE", "position": { "x": 2, "y": -1, "units": "slots" }, "size": { "height": 1, "width": 4, "units": "slots" } }, "r1yBEBcCN": { "content": "This node controls the LCD screen. Try plugging the extension board to the RICH UNO board, and add the LCD screen using the extension cables and plugging the screen's SDA, SCL, GND and VCC pins to the matching pins of the board.\n\nChange the parameters of the node. Change ADDR from 27h to 38h. Write short texts in L1 and L2, like \"Hello\" and your first names respectively, and then upload the code! ", "id": "r1yBEBcCN", "position": { "x": 1, "y": 1, "units": "slots" }, "size": { "height": 3, "width": 7, "units": "slots" } } }, "nodes": { "Sy67EHqAN": { "id": "Sy67EHqAN", "position": { "x": 1, "y": 0, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" } }, "path": "@/tuto201" }, "@/tuto202": { "comments": { "rJ_D8SqRV": { "content": "This new node communicates with the knob of the board. It will take values between 0 and 1 as you turn it.\n\nConnect the VAL output of the pot to L2. Upload the code ans see the values change.", "id": "rJ_D8SqRV", "position": { "x": 0, "y": 0, "units": "slots" }, "size": { "height": 2, "width": 5, "units": "slots" } } }, "nodes": { "SyMU8H50E": { "id": "SyMU8H50E", "position": { "x": 6, "y": 1, "units": "slots" }, "type": "xod/common-hardware/pot" }, "r13X8Bq04": { "boundLiterals": { "B1TSE9tZ-": "\"pot value\"", "rJlYT7EfW": "38h" }, "id": "r13X8Bq04", "position": { "x": 3, "y": 2, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" } }, "path": "@/tuto202" }, "@/tuto203": { "comments": { "Bk-tAvr5A4": { "content": "Let's use this potentiometer to adjust the brightness of an LED.\nAdd an LED node, connect the pot's VAL output to the LED's LUM input. Change the PORT input of the LED to 10 and plug the external LED from your kit in the extension shield using your cable. Plug It to GND, VCC and D10. Upload the code and turn the pot around to see the brightness of the LED change. \n\nTo understand more how that works, go on the Hacster page of tutorial 2 ( https://www.hackster.io/jim-haseloff/biomaker-tutorial-2-handling-simple-input-output-devices-63a792 )", "id": "Bk-tAvr5A4", "position": { "x": -1, "y": 0, "units": "slots" }, "size": { "height": 3, "width": 6, "units": "slots" } } }, "links": { "SJnCDrqAE": { "id": "SJnCDrqAE", "input": { "nodeId": "BktAvHcAE", "pinKey": "H1bLN9F-b" }, "output": { "nodeId": "HyeK0PS5AV", "pinKey": "H1sM2A12-" } } }, "nodes": { "BktAvHcAE": { "boundLiterals": { "B1TSE9tZ-": "\"pot value\"", "rJlYT7EfW": "38h" }, "id": "BktAvHcAE", "position": { "x": 3, "y": 3, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" }, "HyeK0PS5AV": { "id": "HyeK0PS5AV", "position": { "x": 6, "y": 0.75, "units": "slots" }, "type": "xod/common-hardware/pot" } }, "path": "@/tuto203" }, "@/tuto204": { "comments": { "ByyvKS50V": { "content": "This is a new node. It collects values that vary between 0 and 1. The vallues it collects come come from sensors and are continuous (ie they can take an infinite number of values from a given range). \n\nTake out the light sensor from your kit, plug it to GND, VCC and A1. \nAdd a 'watch' node to the VAL output of the analog sensor node. Upload the code in debugging mode (clicking on the little bug icon at the bottom of the screen) and play around with the sensor a bit.", "id": "ByyvKS50V", "position": { "x": 0, "y": 2, "units": "slots" }, "size": { "height": 3, "width": 8, "units": "slots" } } }, "nodes": { "rJYBKHcR4": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "rJYBKHcR4", "position": { "x": 2, "y": 1, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" } }, "path": "@/tuto204" }, "@/tuto205": { "comments": { "SJQeiHqCE": { "content": "Time to make the LED and light sensor interact! \nupload the code in debugging mode and make the light intensity readout go up by making the LED brighter", "id": "SJQeiHqCE", "position": { "x": -2, "y": 0, "units": "slots" }, "size": { "height": 1, "width": 9, "units": "slots" } } }, "links": { "B1VkjBcR4": { "id": "B1VkjBcR4", "input": { "nodeId": "r1-JjH50V", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "BkjA9H5CE", "pinKey": "BkoeN9Ay7" } }, "BktqcHcRN": { "id": "BktqcHcRN", "input": { "nodeId": "HyJc5S904", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "SJeOK9Bq0E", "pinKey": "H1sM2A12-" } }, "SJWdFqHq0V": { "id": "SJWdFqHq0V", "input": { "nodeId": "SJOtqrq04", "pinKey": "H1bLN9F-b" }, "output": { "nodeId": "SJeOK9Bq0E", "pinKey": "H1sM2A12-" } } }, "nodes": { "BkjA9H5CE": { "id": "BkjA9H5CE", "position": { "x": 5, "y": 1, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "HyJc5S904": { "boundLiterals": { "B1oqkTnIb": "D10" }, "id": "HyJc5S904", "position": { "x": 1, "y": 2, "units": "slots" }, "type": "xod/common-hardware/led" }, "SJOtqrq04": { "boundLiterals": { "B1TSE9tZ-": "\"pot value\"", "rJlYT7EfW": "38h" }, "id": "SJOtqrq04", "position": { "x": -4, "y": 2, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" }, "SJeOK9Bq0E": { "id": "SJeOK9Bq0E", "position": { "x": 1, "y": 1, "units": "slots" }, "type": "xod/common-hardware/pot" }, "r1-JjH50V": { "id": "r1-JjH50V", "position": { "x": 5, "y": 2, "units": "slots" }, "type": "xod/debug/watch" } }, "path": "@/tuto205" }, "@/tuto206": { "comments": { "SJwVhSqCV": { "content": "Time to make the pot value and light value both appear on the LCD screen. You might have noticed that when you link an output value to L1 or L2 of the LCD, it takes a full line. The 'join' node is a way to hack that problem. 'Join' makes different informations into a single character lines and separates them with the characters of your choice.\nAdd a couple of Join nodes liked to L1 and L2 and displaying \"pot val : [output VAL]\" and \"light val : [output VAL]\" respectively", "id": "SJwVhSqCV", "position": { "x": -1, "y": 1, "units": "slots" }, "size": { "height": 2, "width": 10, "units": "slots" } } }, "links": { "B18pArcR4": { "id": "B18pArcR4", "input": { "nodeId": "ByslhH9A4", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "rJAkhHcA4", "pinKey": "H1sM2A12-" } } }, "nodes": { "ByslhH9A4": { "boundLiterals": { "B1oqkTnIb": "D10" }, "id": "ByslhH9A4", "position": { "x": 0, "y": 4, "units": "slots" }, "type": "xod/common-hardware/led" }, "HJMZhSc0V": { "boundLiterals": { "rJlYT7EfW": "38h" }, "id": "HJMZhSc0V", "position": { "x": 3, "y": 5, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" }, "SyHehS9A4": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "SyHehS9A4", "position": { "x": 6, "y": 3, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "rJAkhHcA4": { "id": "rJAkhHcA4", "position": { "x": 2, "y": 3, "units": "slots" }, "type": "xod/common-hardware/pot" } }, "path": "@/tuto206" }, "@/tuto207": { "comments": { "Bk9VeU5AE": { "content": "You should have arrived at something looking roughly like this. \nThe next step is to make a short program to use the light sensor not to give a precise value but a readout of whether the light is too bright, too dim or ok.\nWe will be using XOD not only for controlling components but for building programs. \nLet's meet at tut 208 to begin!", "id": "Bk9VeU5AE", "position": { "x": 1, "y": -1, "units": "slots" }, "size": { "height": 2, "width": 8, "units": "slots" } } }, "links": { "Bye2TB5AV": { "id": "Bye2TB5AV", "input": { "nodeId": "rJbGiTHqRV", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "SJGiTrcR4", "pinKey": "H1sM2A12-" } }, "HJT0THq0E": { "id": "HJT0THq0E", "input": { "nodeId": "HJt0pB90N", "pinKey": "rJJHNrVuM" }, "output": { "nodeId": "rJgGjTB5CV", "pinKey": "BkoeN9Ay7" } }, "rkT2aBcR4": { "id": "rkT2aBcR4", "input": { "nodeId": "rkzGsprqR4", "pinKey": "B1TSE9tZ-" }, "output": { "nodeId": "SkrnTSq0E", "pinKey": "HJrBNr4dG" } }, "rkz6TrcAV": { "id": "rkz6TrcAV", "input": { "nodeId": "SkrnTSq0E", "pinKey": "rJJHNrVuM" }, "output": { "nodeId": "SJGiTrcR4", "pinKey": "H1sM2A12-" } }, "ry410H9CE": { "id": "ry410H9CE", "input": { "nodeId": "rkzGsprqR4", "pinKey": "H1bLN9F-b" }, "output": { "nodeId": "HJt0pB90N", "pinKey": "HJrBNr4dG" } } }, "nodes": { "HJt0pB90N": { "boundLiterals": { "HynENHNOz": "\"light val\"", "rJGQNB4df": "\" :\"" }, "id": "HJt0pB90N", "position": { "x": 6, "y": 2, "units": "slots" }, "type": "xod/core/join" }, "SJGiTrcR4": { "id": "SJGiTrcR4", "position": { "x": 2, "y": 1, "units": "slots" }, "type": "xod/common-hardware/pot" }, "SkrnTSq0E": { "boundLiterals": { "HynENHNOz": "\"pot val\"", "rJGQNB4df": "\" :\"" }, "id": "SkrnTSq0E", "position": { "x": 3, "y": 2, "units": "slots" }, "type": "xod/core/join" }, "rJbGiTHqRV": { "boundLiterals": { "B1oqkTnIb": "D10" }, "id": "rJbGiTHqRV", "position": { "x": 0, "y": 2, "units": "slots" }, "type": "xod/common-hardware/led" }, "rJgGjTB5CV": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "rJgGjTB5CV", "position": { "x": 6, "y": 1, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "rkzGsprqR4": { "boundLiterals": { "rJlYT7EfW": "38h" }, "id": "rkzGsprqR4", "position": { "x": 2, "y": 3, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" } }, "path": "@/tuto207" }, "@/tuto208": { "comments": { "B1x3-L904": { "content": "the Less node outputs TRUE if the first of its input is inferior to the second one, and FALSE otherwise. Decide on a threshold for when the ligt is too dim and add that as the second value for this node. You can open the program in debugging mode and use the watch node to decide on that threshold.", "id": "B1x3-L904", "position": { "x": -3, "y": 0, "units": "slots" }, "size": { "height": 2, "width": 6, "units": "slots" } }, "HkqHfIcAE": { "content": "Add the 'Greater' node to make a threshold for when the light is too bright, using the same logic.", "id": "HkqHfIcAE", "position": { "x": 3, "y": 2, "units": "slots" }, "size": { "height": 2, "width": 5, "units": "slots" } } }, "links": { "B1Aq-UqCE": { "id": "B1Aq-UqCE", "input": { "nodeId": "S1jFbU9C4", "pinKey": "HJjZLRdBw1-" }, "output": { "nodeId": "B1vObLqAV", "pinKey": "BkoeN9Ay7" } }, "r1_5W8904": { "id": "r1_5W8904", "input": { "nodeId": "H1gYZIqAN", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "B1vObLqAV", "pinKey": "BkoeN9Ay7" } } }, "nodes": { "B1vObLqAV": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "B1vObLqAV", "position": { "x": 3, "y": 0, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "H1gYZIqAN": { "id": "H1gYZIqAN", "position": { "x": 3, "y": 1, "units": "slots" }, "type": "xod/debug/watch" }, "S1jFbU9C4": { "id": "S1jFbU9C4", "position": { "x": 5, "y": 1, "units": "slots" }, "type": "xod/core/less" } }, "path": "@/tuto208" }, "@/tuto209": { "comments": { "BkNqm85CN": { "content": "The if-else node takes a TRUE/FALSE value as an input, and outputs either what you have plugged in T is the input is TRUE or in F if the input is FALSE. In this case, if the input is false, the node will output nothing. \nreplace the text plugged in T with \"too dim\"\nAdd another if-else node for the \"too bright\" threshold. Run the code in debugging mode to test if everything went as planned.", "id": "BkNqm85CN", "position": { "x": -1, "y": 3, "units": "slots" }, "size": { "height": 3, "width": 5, "units": "slots" } }, "HJ84XL90V": { "content": "having a TRUE or FALSE output for the less and greater nodes allows you to use some if-else logic nodes. ", "id": "HJ84XL90V", "position": { "x": 0, "y": 0, "units": "slots" }, "size": { "height": 1, "width": 8, "units": "slots" } } }, "links": { "B1d7X8qC4": { "id": "B1d7X8qC4", "input": { "nodeId": "BJXx7IqCV", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "Bkb89fUc0N", "pinKey": "HktZUCdrPkZ" } }, "BJQIqzL9CE": { "id": "BJQIqzL9CE", "input": { "nodeId": "Bkb89fUc0N", "pinKey": "HJjZLRdBw1-" }, "output": { "nodeId": "rJLcf8504", "pinKey": "BkoeN9Ay7" } }, "BkfU5MI50N": { "id": "BkfU5MI50N", "input": { "nodeId": "HJeUcGI5CV", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "rJLcf8504", "pinKey": "BkoeN9Ay7" } }, "HkZT4UqRV": { "id": "HkZT4UqRV", "input": { "nodeId": "HJC2V8cAN", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "BJXx7IqCV", "pinKey": "S13xLCuHvkW" } }, "SkjzmUq0V": { "id": "SkjzmUq0V", "input": { "nodeId": "BJXx7IqCV", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "ByIzXLqAN", "pinKey": "B1x2RV3eZ" } }, "SyqozUqCN": { "id": "SyqozUqCN", "input": { "nodeId": "rkIsfU9C4", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "rJLcf8504", "pinKey": "BkoeN9Ay7" } } }, "nodes": { "BJXx7IqCV": { "id": "BJXx7IqCV", "position": { "x": 4, "y": 4, "units": "slots" }, "type": "xod/core/if-else" }, "Bkb89fUc0N": { "id": "Bkb89fUc0N", "position": { "x": 4, "y": 2, "units": "slots" }, "type": "xod/core/less" }, "ByIzXLqAN": { "id": "ByIzXLqAN", "position": { "x": 5, "y": 3, "units": "slots" }, "size": { "height": 1, "width": 3, "units": "slots" }, "type": "xod/core/constant-string" }, "HJC2V8cAN": { "id": "HJC2V8cAN", "position": { "x": 4, "y": 5, "units": "slots" }, "size": { "height": 1, "width": 3, "units": "slots" }, "type": "xod/debug/watch" }, "HJeUcGI5CV": { "id": "HJeUcGI5CV", "position": { "x": 2, "y": 2, "units": "slots" }, "type": "xod/debug/watch" }, "rJLcf8504": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "rJLcf8504", "position": { "x": 2, "y": 1, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "rkIsfU9C4": { "id": "rkIsfU9C4", "position": { "x": 7, "y": 2, "units": "slots" }, "type": "xod/core/greater" } }, "path": "@/tuto209" }, "@/tuto210": { "comments": { "SyCqB8904": { "content": "This new node in the middle is called NOR. It will output TRUE if and only if everything connected to it is FALSE. use nor as the input for one third if-else node that outputs \"all ok\" when the light is neither under 0.3 nor over 0.8", "id": "SyCqB8904", "position": { "x": 11, "y": 1, "units": "slots" }, "size": { "height": 2, "width": 5, "units": "slots" } } }, "links": { "Byk9B85RV": { "id": "Byk9B85RV", "input": { "nodeId": "SyoOHL9RN", "pinKey": "r1tz8CdBDkb" }, "output": { "nodeId": "rJZ3-B89C4", "pinKey": "HktZUCdrPkZ" } }, "H1GcrUcRV": { "id": "H1GcrUcRV", "input": { "nodeId": "SyoOHL9RN", "pinKey": "S1dG8AOBPJW" }, "output": { "nodeId": "Syz3Wr89CE", "pinKey": "B19RYS3lW" } }, "HkP2-S850N": { "id": "HkP2-S850N", "input": { "nodeId": "rJZ3-B89C4", "pinKey": "HJjZLRdBw1-" }, "output": { "nodeId": "SynWrL904", "pinKey": "BkoeN9Ay7" } }, "Hy_hbrUq0E": { "id": "Hy_hbrUq0E", "input": { "nodeId": "Syz3Wr89CE", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "SynWrL904", "pinKey": "BkoeN9Ay7" } }, "S1UhbBUcAV": { "id": "S1UhbBUcAV", "input": { "nodeId": "HJxhbHUq04", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "SynWrL904", "pinKey": "BkoeN9Ay7" } }, "SJfySHU504": { "id": "SJfySHU504", "input": { "nodeId": "rkySHL5AE", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "Bkg1rHUqAN", "pinKey": "B1x2RV3eZ" } }, "r1DSHI9CE": { "id": "r1DSHI9CE", "input": { "nodeId": "rkySHL5AE", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "Syz3Wr89CE", "pinKey": "B19RYS3lW" } }, "r1mkBSI50E": { "id": "r1mkBSI50E", "input": { "nodeId": "HJZkSHIcRV", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "rkySHL5AE", "pinKey": "S13xLCuHvkW" } }, "rkYhbB8qAE": { "id": "rkYhbB8qAE", "input": { "nodeId": "SyX2-SIcCE", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "HkEhZr8qCN", "pinKey": "B1x2RV3eZ" } }, "rksnbSL9AV": { "id": "rksnbSL9AV", "input": { "nodeId": "SkrhWHUcRN", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "SyX2-SIcCE", "pinKey": "S13xLCuHvkW" } }, "ry92WB89AE": { "id": "ry92WB89AE", "input": { "nodeId": "SyX2-SIcCE", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "rJZ3-B89C4", "pinKey": "HktZUCdrPkZ" } } }, "nodes": { "Bkg1rHUqAN": { "boundLiterals": { "B1x2RV3eZ": "\"too bright\"" }, "id": "Bkg1rHUqAN", "position": { "x": 9, "y": 2, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "HJZkSHIcRV": { "id": "HJZkSHIcRV", "position": { "x": 8, "y": 4, "units": "slots" }, "size": { "height": 1, "width": 3, "units": "slots" }, "type": "xod/debug/watch" }, "HJxhbHUq04": { "id": "HJxhbHUq04", "position": { "x": 6, "y": 1, "units": "slots" }, "type": "xod/debug/watch" }, "HkEhZr8qCN": { "boundLiterals": { "B1x2RV3eZ": "\"too dim\"" }, "id": "HkEhZr8qCN", "position": { "x": 3, "y": 2, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "SkrhWHUcRN": { "id": "SkrhWHUcRN", "position": { "x": 2, "y": 4, "units": "slots" }, "size": { "height": 1, "width": 3, "units": "slots" }, "type": "xod/debug/watch" }, "SyX2-SIcCE": { "id": "SyX2-SIcCE", "position": { "x": 2, "y": 3, "units": "slots" }, "type": "xod/core/if-else" }, "SynWrL904": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "SynWrL904", "position": { "x": 5, "y": 0, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "SyoOHL9RN": { "id": "SyoOHL9RN", "position": { "x": 6, "y": 2, "units": "slots" }, "type": "xod/core/nor" }, "Syz3Wr89CE": { "boundLiterals": { "HJbACN3gb": "0.8" }, "id": "Syz3Wr89CE", "position": { "x": 8, "y": 1, "units": "slots" }, "type": "xod/core/greater" }, "rJZ3-B89C4": { "boundLiterals": { "SJqZ8COrDkW": "0.3" }, "id": "rJZ3-B89C4", "position": { "x": 2, "y": 1, "units": "slots" }, "type": "xod/core/less" }, "rkySHL5AE": { "id": "rkySHL5AE", "position": { "x": 8, "y": 3, "units": "slots" }, "type": "xod/core/if-else" } }, "path": "@/tuto210" }, "@/tuto211": { "comments": { "BkBbvI9CV": { "content": "time to put it all together! use the 'concat' node to compile the outputs of the three if-else statements. \nConcat is a less elaborate version of 'join'.\n\nUpload the code and voila! You have uploaded your first program in XOD", "id": "BkBbvI9CV", "position": { "x": -7, "y": -2, "units": "slots" }, "size": { "height": 2, "width": 5, "units": "slots" } } }, "links": { "BJcf4UI5AE": { "id": "BJcf4UI5AE", "input": { "nodeId": "H1lGVIUcAV", "pinKey": "HkXK-dGob" }, "output": { "nodeId": "H1GNUUcAN", "pinKey": "BkoeN9Ay7" } }, "ByCG4ULqA4": { "id": "ByCG4ULqA4", "input": { "nodeId": "B17zVLLcRN", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "rkbfVIL90N", "pinKey": "HktZUCdrPkZ" } }, "ByO3UIcRV": { "id": "ByO3UIcRV", "input": { "nodeId": "r1us8I90V", "pinKey": "rJJHNrVuM" }, "output": { "nodeId": "rJcP8I9CE", "pinKey": "H1sM2A12-" } }, "H17gf4UL90V": { "id": "H17gf4UL90V", "input": { "nodeId": "BkYMVU85AE", "pinKey": "r1tz8CdBDkb" }, "output": { "nodeId": "rkbfVIL90N", "pinKey": "HktZUCdrPkZ" } }, "HJi2UU9AE": { "id": "HJi2UU9AE", "input": { "nodeId": "ry05L850N", "pinKey": "B1TSE9tZ-" }, "output": { "nodeId": "r1us8I90V", "pinKey": "HJrBNr4dG" } }, "HJjMN8UqC4": { "id": "HJjMN8UqC4", "input": { "nodeId": "rkbfVIL90N", "pinKey": "HJjZLRdBw1-" }, "output": { "nodeId": "H1GNUUcAN", "pinKey": "BkoeN9Ay7" } }, "HyhMV8U50V": { "id": "HyhMV8U50V", "input": { "nodeId": "HkfGEIU5RV", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "H1GNUUcAN", "pinKey": "BkoeN9Ay7" } }, "HyxgzVLUqCN": { "id": "HyxgzVLUqCN", "input": { "nodeId": "ByLG48L9CE", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "SJDz4IL90N", "pinKey": "B1x2RV3eZ" } }, "SkaSII9RV": { "id": "SkaSII9RV", "input": { "nodeId": "BJJSI8cAN", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "SJuS8U9AN", "pinKey": "B1x2RV3eZ" } }, "SyQSUI904": { "id": "SyQSUI904", "input": { "nodeId": "BJJSI8cAN", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "BkYMVU85AE", "pinKey": "rJqfIRdHwkW" } }, "SyTzVIUqRE": { "id": "SyTzVIUqRE", "input": { "nodeId": "B17zVLLcRN", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "BkNfE8L9A4", "pinKey": "B1x2RV3eZ" } }, "Syc_8U504": { "id": "Syc_8U504", "input": { "nodeId": "ByS_U89CE", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "rJcP8I9CE", "pinKey": "H1sM2A12-" } }, "rJExG4885R4": { "id": "rJExG4885R4", "input": { "nodeId": "BkYMVU85AE", "pinKey": "S1dG8AOBPJW" }, "output": { "nodeId": "HkfGEIU5RV", "pinKey": "B19RYS3lW" } }, "ryGgfVI89CV": { "id": "ryGgfVI89CV", "input": { "nodeId": "ByLG48L9CE", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "HkfGEIU5RV", "pinKey": "B19RYS3lW" } } }, "nodes": { "B17zVLLcRN": { "id": "B17zVLLcRN", "position": { "x": -1, "y": 2, "units": "slots" }, "type": "xod/core/if-else" }, "BJJSI8cAN": { "id": "BJJSI8cAN", "position": { "x": 2, "y": 2, "units": "slots" }, "type": "xod/core/if-else" }, "BkNfE8L9A4": { "boundLiterals": { "B1x2RV3eZ": "\"too dim\"" }, "id": "BkNfE8L9A4", "position": { "x": 0, "y": 1, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "BkYMVU85AE": { "id": "BkYMVU85AE", "position": { "x": 2, "y": 1, "units": "slots" }, "type": "xod/core/nor" }, "ByLG48L9CE": { "id": "ByLG48L9CE", "position": { "x": 5, "y": 2, "units": "slots" }, "type": "xod/core/if-else" }, "ByS_U89CE": { "boundLiterals": { "B1oqkTnIb": "D10" }, "id": "ByS_U89CE", "position": { "x": -7, "y": 1, "units": "slots" }, "type": "xod/common-hardware/led" }, "H1GNUUcAN": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "H1GNUUcAN", "position": { "x": 2, "y": -1, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "H1lGVIUcAV": { "id": "H1lGVIUcAV", "position": { "x": 3, "y": 0, "units": "slots" }, "type": "xod/debug/watch" }, "HkfGEIU5RV": { "boundLiterals": { "HJbACN3gb": "0.8" }, "id": "HkfGEIU5RV", "position": { "x": 5, "y": 0, "units": "slots" }, "type": "xod/core/greater" }, "SJDz4IL90N": { "boundLiterals": { "B1x2RV3eZ": "\"too bright\"" }, "id": "SJDz4IL90N", "position": { "x": 6, "y": 1, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "SJuS8U9AN": { "boundLiterals": { "B1x2RV3eZ": "\"all ok\"" }, "id": "SJuS8U9AN", "position": { "x": 4, "y": 1, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "r1us8I90V": { "boundLiterals": { "HynENHNOz": "\"pot val\"", "rJGQNB4df": "\" :\"" }, "id": "r1us8I90V", "position": { "x": -4, "y": 1, "units": "slots" }, "type": "xod/core/join" }, "rJcP8I9CE": { "id": "rJcP8I9CE", "position": { "x": -6, "y": 0, "units": "slots" }, "type": "xod/common-hardware/pot" }, "rkbfVIL90N": { "boundLiterals": { "SJqZ8COrDkW": "0.3" }, "id": "rkbfVIL90N", "position": { "x": -1, "y": 0, "units": "slots" }, "type": "xod/core/less" }, "ry05L850N": { "boundLiterals": { "rJlYT7EfW": "38h" }, "id": "ry05L850N", "position": { "x": -6, "y": 4, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" } }, "path": "@/tuto211" }, "@/tuto212": { "comments": { "SyOEtU5RV": { "content": "our program from tuto 211 was cool but a bit chunky. Now let's turn it into its own node to directly have it interact with the LCD screen.\nthe xod-light-sensor at the bottom of this tutorial list is the whole program we have just finished building.\nOpen it in a new window to examine it. Then come back here and try dragging the xod-light-sensor in this window and see what happens. Let's meet at tuto 213 next!", "id": "SyOEtU5RV", "position": { "x": 0, "y": 0, "units": "slots" }, "size": { "height": 2, "width": 10, "units": "slots" } } }, "links": { "HJHtaOL5AN": { "id": "HJHtaOL5AN", "input": { "nodeId": "SkZYpdU5CN", "pinKey": "B1TSE9tZ-" }, "output": { "nodeId": "BJzY6_UqR4", "pinKey": "HJrBNr4dG" } }, "rk4Yad8qRN": { "id": "rk4Yad8qRN", "input": { "nodeId": "BJzY6_UqR4", "pinKey": "rJJHNrVuM" }, "output": { "nodeId": "rJFpOI9RN", "pinKey": "H1sM2A12-" } }, "rk7YTuIqRE": { "id": "rk7YTuIqRE", "input": { "nodeId": "HJxFpu8qC4", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "rJFpOI9RN", "pinKey": "H1sM2A12-" } } }, "nodes": { "BJzY6_UqR4": { "boundLiterals": { "HynENHNOz": "\"pot val\"", "rJGQNB4df": "\" :\"" }, "id": "BJzY6_UqR4", "position": { "x": 7, "y": 3, "units": "slots" }, "type": "xod/core/join" }, "HJxFpu8qC4": { "boundLiterals": { "B1oqkTnIb": "D10" }, "id": "HJxFpu8qC4", "position": { "x": 4, "y": 3, "units": "slots" }, "type": "xod/common-hardware/led" }, "SkZYpdU5CN": { "boundLiterals": { "rJlYT7EfW": "38h" }, "id": "SkZYpdU5CN", "position": { "x": 5, "y": 4, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" }, "rJFpOI9RN": { "id": "rJFpOI9RN", "position": { "x": 5, "y": 2, "units": "slots" }, "type": "xod/common-hardware/pot" } }, "path": "@/tuto212" }, "@/tuto213": { "comments": { "HkJzjUqAV": { "content": "As we can see, we can upload some nodes but we cannot plug anything in an out of this one. We have to modify the xod-light-sensor for it to work. Go to xod-light-sensor1 to make it work. When you're done, drag the xod-ligh-sensor1 in to see if it worked.", "id": "HkJzjUqAV", "position": { "x": 0, "y": 0, "units": "slots" }, "size": { "height": 2, "width": 10, "units": "slots" } }, "r17PCIc0N": { "content": "if it worked, you should be able to connect the orange OUT pin to L2 of the LCD node. Congratulations.\nLet's meet at tuto 214 for more fun stuff.", "id": "r17PCIc0N", "position": { "x": 1, "y": 5, "units": "slots" }, "size": { "height": 2, "width": 9, "units": "slots" } } }, "links": { "B1rlboI9RE": { "id": "B1rlboI9RE", "input": { "nodeId": "rkZg-jU904", "pinKey": "B1TSE9tZ-" }, "output": { "nodeId": "BkMgZjI504", "pinKey": "HJrBNr4dG" } }, "BkEl-iUqRE": { "id": "BkEl-iUqRE", "input": { "nodeId": "BkMgZjI504", "pinKey": "rJJHNrVuM" }, "output": { "nodeId": "BJe-sIqCV", "pinKey": "H1sM2A12-" } }, "Sy7eZjU5CE": { "id": "Sy7eZjU5CE", "input": { "nodeId": "rkxgZoUcAE", "pinKey": "HyYh1a3LZ" }, "output": { "nodeId": "BJe-sIqCV", "pinKey": "H1sM2A12-" } } }, "nodes": { "BJe-sIqCV": { "id": "BJe-sIqCV", "position": { "x": 3, "y": 2, "units": "slots" }, "type": "xod/common-hardware/pot" }, "BkMgZjI504": { "boundLiterals": { "HynENHNOz": "\"pot val\"", "rJGQNB4df": "\" :\"" }, "id": "BkMgZjI504", "position": { "x": 5, "y": 3, "units": "slots" }, "type": "xod/core/join" }, "SJPZjUqAE": { "id": "SJPZjUqAE", "position": { "x": 1, "y": 2, "units": "slots" }, "type": "@/xod-light-sensor" }, "rkZg-jU904": { "boundLiterals": { "rJlYT7EfW": "38h" }, "id": "rkZg-jU904", "position": { "x": 3, "y": 4, "units": "slots" }, "type": "xod/common-hardware/text-lcd-16x2-i2c" }, "rkxgZoUcAE": { "boundLiterals": { "B1oqkTnIb": "D10" }, "id": "rkxgZoUcAE", "position": { "x": 2, "y": 3, "units": "slots" }, "type": "xod/common-hardware/led" } }, "path": "@/tuto213" }, "@/tuto214": { "comments": { "S1jg1vqAN": { "content": "Now we're going going to use a NeoPixel. Start by uploading two new libraries : \nbradzilla84/neopixel\nand\nawgrover/adafruitneopixel\nopen their examples and try to upload the codes.\nNeopixels should be plugged using only one set of 3 pins: GND, VCC and DIN. Do not plug the set of pins containing DOUT.", "id": "S1jg1vqAN", "position": { "x": 1, "y": 1, "units": "slots" }, "size": { "height": 3, "width": 7, "units": "slots" } } }, "path": "@/tuto214" }, "@/tuto215": { "comments": { "rJijgv9AN": { "content": "Remember, the output value of the pot are continuous and vary between 0 and 1\n\nTo convert that to integr=ers ranging 0-16 Add first a multiply node and then a round node to the val output. Connect the final output to 'pixelnumber and 'pulse.", "id": "rJijgv9AN", "position": { "x": 7, "y": 1, "units": "slots" }, "size": { "height": 3, "width": 6, "units": "slots" } }, "ryA-gPqC4": { "content": "Now let's try to connect the neopixel to an analog sensor and make it react to the output. The first thing we have to do is to convert the outpt value of the analog sensor to a format that fits the Neopixel. \n\nPixelnumber takes integers between 0 and the max number of LEDs on the Neopixel (in our case, 16", "id": "ryA-gPqC4", "position": { "x": -3, "y": 0, "units": "slots" }, "size": { "height": 4, "width": 4, "units": "slots" } } }, "links": { "HySjCyP50N": { "id": "HySjCyP50N", "input": { "nodeId": "B1ljAkwcCN", "pinKey": "Bkpl_-P67" }, "output": { "nodeId": "B1MsRyvcRE", "pinKey": "rkEf9yw6m" } }, "SJIiA1wcAN": { "id": "SJIiA1wcAN", "input": { "nodeId": "HyWoCkwcRE", "pinKey": "SJgtrAgDa7" }, "output": { "nodeId": "B1ljAkwcCN", "pinKey": "H1G6xd-vT7" } }, "SyEoAJv5CV": { "id": "SyEoAJv5CV", "input": { "nodeId": "HyWoCkwcRE", "pinKey": "Syv36gPaX" }, "output": { "nodeId": "B1ljAkwcCN", "pinKey": "rygaldWDpX" } }, "r1QiCyD9C4": { "id": "r1QiCyD9C4", "input": { "nodeId": "B1ljAkwcCN", "pinKey": "SkXpgdWwT7" }, "output": { "nodeId": "H1s0kDqAV", "pinKey": "ByAIWR_UZ" } } }, "nodes": { "B1MsRyvcRE": { "boundLiterals": { "SJynGgvT7": "16", "rJ-hGlv6Q": "20" }, "id": "B1MsRyvcRE", "position": { "x": 1, "y": 0, "units": "slots" }, "type": "bradzilla84/neopixel/neopixel-device" }, "B1ljAkwcCN": { "id": "B1ljAkwcCN", "position": { "x": 1, "y": 1, "units": "slots" }, "type": "bradzilla84/neopixel/set-all-to-off-neopixel" }, "H1s0kDqAV": { "id": "H1s0kDqAV", "position": { "x": 5, "y": 0, "units": "slots" }, "type": "xod/core/pulse-on-change" }, "HyWoCkwcRE": { "boundLiterals": { "H1KaaePam": "0", "SJgtrAgDa7": "Never", "rJg0agw6m": "255" }, "id": "HyWoCkwcRE", "position": { "x": 1, "y": 2, "units": "slots" }, "type": "bradzilla84/neopixel/setpixelcolor-neopixel" }, "S1UxlDqCV": { "id": "S1UxlDqCV", "position": { "x": 7, "y": 0, "units": "slots" }, "type": "xod/common-hardware/pot" } }, "path": "@/tuto215" }, "@/tuto216": { "comments": { "BJ-RbvqRV": { "content": "The result from tuto 215 should look something like this. Now that you've got a grasp on how communicating with the neopixel works, try to add another king of analog sensor, or delay the rate of disapearance of the LED by adding a delay node.", "id": "BJ-RbvqRV", "position": { "x": 0, "y": -2, "units": "slots" }, "size": { "height": 2, "width": 9, "units": "slots" } }, "S1W9Ww5R4": { "content": "Congratulations for reaching that point! You are now equipped to create small programs and create nodes out of them. You can also now use different types of display for your results. Way to go!", "id": "S1W9Ww5R4", "position": { "x": 0, "y": 3, "units": "slots" }, "size": { "height": 2, "width": 10, "units": "slots" } } }, "links": { "B1BP-wqCV": { "id": "B1BP-wqCV", "input": { "nodeId": "B1R8bP5RV", "pinKey": "BkF78AurDJW" }, "output": { "nodeId": "Syc8Zw9CE", "pinKey": "BkQzLCurwJZ" } }, "BJ4zLWw9AN": { "id": "BJ4zLWw9AN", "input": { "nodeId": "rkgMUZwqRN", "pinKey": "SkXpgdWwT7" }, "output": { "nodeId": "HyfLbP9C4", "pinKey": "ByAIWR_UZ" } }, "BJ_v-v5RE": { "id": "BJ_v-v5RE", "input": { "nodeId": "BkbfUbP9AV", "pinKey": "H1KaaePam" }, "output": { "nodeId": "B1R8bP5RV", "pinKey": "rkO7L0uSP1Z" } }, "H1zwZvqA4": { "id": "H1zwZvqA4", "input": { "nodeId": "Syc8Zw9CE", "pinKey": "B1GfLR_SPk-" }, "output": { "nodeId": "BkQGIbvcAV", "pinKey": "H1sM2A12-" } }, "HkUzI-P5C4": { "id": "HkUzI-P5C4", "input": { "nodeId": "rkgMUZwqRN", "pinKey": "Bkpl_-P67" }, "output": { "nodeId": "BJMzLWwc04", "pinKey": "rkEf9yw6m" } }, "SyoPbvq04": { "id": "SyoPbvq04", "input": { "nodeId": "HyfLbP9C4", "pinKey": "BkjI-COLb" }, "output": { "nodeId": "B1R8bP5RV", "pinKey": "rkO7L0uSP1Z" } }, "rJBzU-PcRN": { "id": "rJBzU-PcRN", "input": { "nodeId": "BkbfUbP9AV", "pinKey": "Syv36gPaX" }, "output": { "nodeId": "rkgMUZwqRN", "pinKey": "rygaldWDpX" } }, "rJwM8Wv5R4": { "id": "rJwM8Wv5R4", "input": { "nodeId": "BkbfUbP9AV", "pinKey": "SJgtrAgDa7" }, "output": { "nodeId": "rkgMUZwqRN", "pinKey": "H1G6xd-vT7" } } }, "nodes": { "B1R8bP5RV": { "id": "B1R8bP5RV", "position": { "x": 8, "y": 1, "units": "slots" }, "type": "xod/math/round" }, "BJMzLWwc04": { "boundLiterals": { "SJynGgvT7": "16", "rJ-hGlv6Q": "20" }, "id": "BJMzLWwc04", "position": { "x": 0, "y": 0, "units": "slots" }, "type": "bradzilla84/neopixel/neopixel-device" }, "BkQGIbvcAV": { "id": "BkQGIbvcAV", "position": { "x": 6, "y": 0, "units": "slots" }, "type": "xod/common-hardware/pot" }, "BkbfUbP9AV": { "boundLiterals": { "H1KaaePam": "0", "SJgtrAgDa7": "Never", "rJg0agw6m": "255" }, "id": "BkbfUbP9AV", "position": { "x": 0, "y": 2, "units": "slots" }, "type": "bradzilla84/neopixel/setpixelcolor-neopixel" }, "HyfLbP9C4": { "id": "HyfLbP9C4", "position": { "x": 4, "y": 0, "units": "slots" }, "type": "xod/core/pulse-on-change" }, "Syc8Zw9CE": { "boundLiterals": { "SJ4zUC_BD1-": "16" }, "id": "Syc8Zw9CE", "position": { "x": 6, "y": 1, "units": "slots" }, "type": "xod/core/multiply" }, "rkgMUZwqRN": { "id": "rkgMUZwqRN", "position": { "x": 0, "y": 1, "units": "slots" }, "type": "bradzilla84/neopixel/set-all-to-off-neopixel" } }, "path": "@/tuto216" }, "@/xod-light-sensor": { "links": { "By0eZFLcC4": { "id": "By0eZFLcC4", "input": { "nodeId": "rJmxbF85RN", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "rkZxWtUc0V", "pinKey": "HktZUCdrPkZ" } }, "ByNgebtIcAE": { "id": "ByNgebtIcAE", "input": { "nodeId": "S1_gZK8cCV", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "rkKgZFIqRE", "pinKey": "B1x2RV3eZ" } }, "H1bxlZFL9CV": { "id": "H1bxlZFL9CV", "input": { "nodeId": "HJwgWFL5AE", "pinKey": "r1tz8CdBDkb" }, "output": { "nodeId": "rkZxWtUc0V", "pinKey": "HktZUCdrPkZ" } }, "HJXexZtUcRV": { "id": "HJXexZtUcRV", "input": { "nodeId": "S1_gZK8cCV", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "HJwgWFL5AE", "pinKey": "rJqfIRdHwkW" } }, "S1Lft89CV": { "id": "S1Lft89CV", "input": { "nodeId": "SysbFIcA4", "pinKey": "BkeKcj6ZZ-$1" }, "output": { "nodeId": "BySgWFI9C4", "pinKey": "S13xLCuHvkW" } }, "S1nlWFU9RE": { "id": "S1nlWFU9RE", "input": { "nodeId": "r1zeZFUqRN", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "rylbFL50V", "pinKey": "BkoeN9Ay7" } }, "SJMlxbFU9RE": { "id": "SJMlxbFU9RE", "input": { "nodeId": "HJwgWFL5AE", "pinKey": "S1dG8AOBPJW" }, "output": { "nodeId": "r1zeZFUqRN", "pinKey": "B19RYS3lW" } }, "SJbGt89RE": { "id": "SJbGt89RE", "input": { "nodeId": "SysbFIcA4", "pinKey": "Hkqu9oaWb" }, "output": { "nodeId": "rJmxbF85RN", "pinKey": "S13xLCuHvkW" } }, "SJjlZYU5R4": { "id": "SJjlZYU5R4", "input": { "nodeId": "rkZxWtUc0V", "pinKey": "HJjZLRdBw1-" }, "output": { "nodeId": "rylbFL50V", "pinKey": "BkoeN9Ay7" } }, "SyJexbF890N": { "id": "SyJexbF890N", "input": { "nodeId": "BySgWFI9C4", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "S18e-YU5C4", "pinKey": "B1x2RV3eZ" } }, "r1TgbK8q0N": { "id": "r1TgbK8q0N", "input": { "nodeId": "rJmxbF85RN", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "SJVxZF8904", "pinKey": "B1x2RV3eZ" } }, "rJQzFLcAV": { "id": "rJQzFLcAV", "input": { "nodeId": "SysbFIcA4", "pinKey": "BkeKcj6ZZ" }, "output": { "nodeId": "S1_gZK8cCV", "pinKey": "S13xLCuHvkW" } }, "rJlxebYLcC4": { "id": "rJlxebYLcC4", "input": { "nodeId": "BySgWFI9C4", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "r1zeZFUqRN", "pinKey": "B19RYS3lW" } } }, "nodes": { "BySgWFI9C4": { "id": "BySgWFI9C4", "position": { "x": 6, "y": 2.75, "units": "slots" }, "type": "xod/core/if-else" }, "HJwgWFL5AE": { "id": "HJwgWFL5AE", "position": { "x": 3, "y": 1.75, "units": "slots" }, "type": "xod/core/nor" }, "S18e-YU5C4": { "boundLiterals": { "B1x2RV3eZ": "\"too bright\"" }, "id": "S18e-YU5C4", "position": { "x": 7, "y": 1.75, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "S1_gZK8cCV": { "id": "S1_gZK8cCV", "position": { "x": 3, "y": 2.75, "units": "slots" }, "type": "xod/core/if-else" }, "SJVxZF8904": { "boundLiterals": { "B1x2RV3eZ": "\"too dim\"" }, "id": "SJVxZF8904", "position": { "x": 1, "y": 1.75, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "SysbFIcA4": { "arityLevel": 2, "id": "SysbFIcA4", "position": { "x": 2, "y": 4, "units": "slots" }, "type": "xod/core/concat" }, "r1zeZFUqRN": { "boundLiterals": { "HJbACN3gb": "0.8" }, "id": "r1zeZFUqRN", "position": { "x": 6, "y": 0.75, "units": "slots" }, "type": "xod/core/greater" }, "rJmxbF85RN": { "id": "rJmxbF85RN", "position": { "x": 0, "y": 2.75, "units": "slots" }, "type": "xod/core/if-else" }, "rkKgZFIqRE": { "boundLiterals": { "B1x2RV3eZ": "\"all ok\"" }, "id": "rkKgZFIqRE", "position": { "x": 5, "y": 1.75, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "rkZxWtUc0V": { "boundLiterals": { "SJqZ8COrDkW": "0.3" }, "id": "rkZxWtUc0V", "position": { "x": 0, "y": 0.75, "units": "slots" }, "type": "xod/core/less" }, "rylbFL50V": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "rylbFL50V", "position": { "x": 3, "y": -0.25, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" } }, "path": "@/xod-light-sensor" }, "@/xod-light-sensor1": { "comments": { "BJhA38c0V": { "content": "What was missing in the first light sensor node were the input and output. They allow communication between the different patches. We have added the first three inputs/outputs that need to be connected with this node. Now it is your turn to add the three output nodes. Look for them by searching patch-nodes/output", "id": "BJhA38c0V", "position": { "x": -1, "y": -1, "units": "slots" }, "size": { "height": 2, "width": 6, "units": "slots" } }, "rJhRpL9A4": { "content": "Add an output-number and connect it to the VAL output of the analog sensor. Add a couple more output-pulse to be connected to DONE and ERR of the same port. Change their names.\nThen go back to tuto 213 and try dragging the patch again.", "id": "rJhRpL9A4", "position": { "x": 9, "y": 5, "units": "slots" }, "size": { "height": 2, "width": 5, "units": "slots" } } }, "links": { "B1mxiPnL5C4": { "id": "B1mxiPnL5C4", "input": { "nodeId": "SyDiP385CE", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "rJuovh85CV", "pinKey": "B1x2RV3eZ" } }, "ByWejDhU5C4": { "id": "ByWejDhU5C4", "input": { "nodeId": "ByIjv3L504", "pinKey": "S1dG8AOBPJW" }, "output": { "nodeId": "rJWsv3LqAN", "pinKey": "B19RYS3lW" } }, "H1kljwhI9AN": { "id": "H1kljwhI9AN", "input": { "nodeId": "HJ4iD2890V", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "rJWsv3LqAN", "pinKey": "B19RYS3lW" } }, "H1sjv3850N": { "id": "H1sjv3850N", "input": { "nodeId": "rJWsv3LqAN", "pinKey": "rJg00Nhe-" }, "output": { "nodeId": "Hyov3U50V", "pinKey": "BkoeN9Ay7" } }, "HyUeiP3LqR4": { "id": "HyUeiP3LqR4", "input": { "nodeId": "rkKovnIcAV", "pinKey": "BkeKcj6ZZ-$1" }, "output": { "nodeId": "HJ4iD2890V", "pinKey": "S13xLCuHvkW" } }, "S1GgjDhL9C4": { "id": "S1GgjDhL9C4", "input": { "nodeId": "SyDiP385CE", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "ByIjv3L504", "pinKey": "rJqfIRdHwkW" } }, "S1csv3L9R4": { "id": "S1csv3L9R4", "input": { "nodeId": "HygjDhIqR4", "pinKey": "HJjZLRdBw1-" }, "output": { "nodeId": "Hyov3U50V", "pinKey": "BkoeN9Ay7" } }, "SJxs3U9CN": { "id": "SJxs3U9CN", "input": { "nodeId": "Hyov3U50V", "pinKey": "r1l3XcR17" }, "output": { "nodeId": "HJ2OhLcCE", "pinKey": "__out__" } }, "Sy3oP2L5C4": { "id": "Sy3oP2L5C4", "input": { "nodeId": "rJfov3L9C4", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "BJQjD2U9A4", "pinKey": "B1x2RV3eZ" } }, "Sy7R2IcCN": { "id": "Sy7R2IcCN", "input": { "nodeId": "BkxAhLqAE", "pinKey": "__in__" }, "output": { "nodeId": "rkKovnIcAV", "pinKey": "rksccsp-W" } }, "SyGo3Lq0E": { "id": "SyGo3Lq0E", "input": { "nodeId": "Hyov3U50V", "pinKey": "SkUhQ5RkQ" }, "output": { "nodeId": "rJaqhI5RE", "pinKey": "__out__" } }, "Syasw2LqR4": { "id": "Syasw2LqR4", "input": { "nodeId": "rJfov3L9C4", "pinKey": "S1yZIA_rDJZ" }, "output": { "nodeId": "HygjDhIqR4", "pinKey": "HktZUCdrPkZ" } }, "SygeivhI5CE": { "id": "SygeivhI5CE", "input": { "nodeId": "ByIjv3L504", "pinKey": "r1tz8CdBDkb" }, "output": { "nodeId": "HygjDhIqR4", "pinKey": "HktZUCdrPkZ" } }, "Syrlov285CE": { "id": "Syrlov285CE", "input": { "nodeId": "rkKovnIcAV", "pinKey": "BkeKcj6ZZ" }, "output": { "nodeId": "SyDiP385CE", "pinKey": "S13xLCuHvkW" } }, "rJElsvh8cC4": { "id": "rJElsvh8cC4", "input": { "nodeId": "rkKovnIcAV", "pinKey": "Hkqu9oaWb" }, "output": { "nodeId": "rJfov3L9C4", "pinKey": "S13xLCuHvkW" } }, "rkCjw3UcAN": { "id": "rkCjw3UcAN", "input": { "nodeId": "HJ4iD2890V", "pinKey": "ryTeUROHD1b" }, "output": { "nodeId": "HyHiv3IcRE", "pinKey": "B1x2RV3eZ" } } }, "nodes": { "BJQjD2U9A4": { "boundLiterals": { "B1x2RV3eZ": "\"too dim\"" }, "id": "BJQjD2U9A4", "position": { "x": 4, "y": 3, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "BkxAhLqAE": { "id": "BkxAhLqAE", "position": { "x": 5, "y": 6, "units": "slots" }, "type": "xod/patch-nodes/output-string" }, "ByIjv3L504": { "id": "ByIjv3L504", "position": { "x": 6, "y": 3, "units": "slots" }, "type": "xod/core/nor" }, "HJ2OhLcCE": { "id": "HJ2OhLcCE", "label": "PORT", "position": { "x": 6, "y": 0, "units": "slots" }, "type": "xod/patch-nodes/input-port" }, "HJ4iD2890V": { "id": "HJ4iD2890V", "position": { "x": 9, "y": 4, "units": "slots" }, "type": "xod/core/if-else" }, "HyHiv3IcRE": { "boundLiterals": { "B1x2RV3eZ": "\"too bright\"" }, "id": "HyHiv3IcRE", "position": { "x": 10, "y": 3, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "HygjDhIqR4": { "boundLiterals": { "SJqZ8COrDkW": "0.3" }, "id": "HygjDhIqR4", "position": { "x": 3, "y": 2, "units": "slots" }, "type": "xod/core/less" }, "Hyov3U50V": { "boundLiterals": { "r1l3XcR17": "A1" }, "id": "Hyov3U50V", "position": { "x": 6, "y": 1, "units": "slots" }, "type": "xod/common-hardware/analog-sensor" }, "SyDiP385CE": { "id": "SyDiP385CE", "position": { "x": 6, "y": 4, "units": "slots" }, "type": "xod/core/if-else" }, "rJWsv3LqAN": { "boundLiterals": { "HJbACN3gb": "0.8" }, "id": "rJWsv3LqAN", "position": { "x": 9, "y": 2, "units": "slots" }, "type": "xod/core/greater" }, "rJaqhI5RE": { "id": "rJaqhI5RE", "label": "UPD", "position": { "x": 7, "y": 0, "units": "slots" }, "type": "xod/patch-nodes/input-pulse" }, "rJfov3L9C4": { "id": "rJfov3L9C4", "position": { "x": 3, "y": 4, "units": "slots" }, "type": "xod/core/if-else" }, "rJuovh85CV": { "boundLiterals": { "B1x2RV3eZ": "\"all ok\"" }, "id": "rJuovh85CV", "position": { "x": 8, "y": 3, "units": "slots" }, "size": { "height": 1, "width": 2, "units": "slots" }, "type": "xod/core/constant-string" }, "rkKovnIcAV": { "arityLevel": 2, "id": "rkKovnIcAV", "position": { "x": 5, "y": 5, "units": "slots" }, "type": "xod/core/concat" } }, "path": "@/xod-light-sensor1" } } }