{
  "name": "sensor-ssd1306-bargraph-v3",
  "patches": {
    "@/analog": {
      "links": {
        "B1YeXXFK0HL": {
          "id": "B1YeXXFK0HL",
          "input": {
            "nodeId": "BkimmYFRHU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "rkQQKFCSU",
            "pinKey": "HJU8CE2lW"
          }
        },
        "B1wem7tY0HU": {
          "id": "B1wem7tY0HU",
          "input": {
            "nodeId": "Hk5QXFKCS8",
            "pinKey": "BJlzICOSv1-"
          },
          "output": {
            "nodeId": "H1UX7YFCSL",
            "pinKey": "__out__"
          }
        },
        "H1Fqqt0SI": {
          "id": "H1Fqqt0SI",
          "input": {
            "nodeId": "H1XY9F0B8",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "Hym7mFFABL",
            "pinKey": "BkGpcpcJQ"
          }
        },
        "HkdvptAHL": {
          "id": "HkdvptAHL",
          "input": {
            "nodeId": "BJSrpYCSI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "Hk5QXFKCS8",
            "pinKey": "H12bIR_SPyZ"
          }
        },
        "HyWgQXYKCSL": {
          "id": "HyWgQXYKCSL",
          "input": {
            "nodeId": "SJl7mKKCrL",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "By2m7tYAHL",
            "pinKey": "BkGpcpcJQ"
          }
        },
        "HyXCYFRHL": {
          "id": "HyXCYFRHL",
          "input": {
            "nodeId": "Hym7mFFABL",
            "pinKey": "SyKd0E2x-"
          },
          "output": {
            "nodeId": "BJhTKt0SL",
            "pinKey": "__out__"
          }
        },
        "S17gXXKKRrI": {
          "id": "S17gXXKKRrI",
          "input": {
            "nodeId": "BkFXmFt0HI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "Hym7mFFABL",
            "pinKey": "BkGpcpcJQ"
          }
        },
        "S1Izct0r8": {
          "id": "S1Izct0r8",
          "input": {
            "nodeId": "rkQQKFCSU",
            "pinKey": "B13SCNhl-"
          },
          "output": {
            "nodeId": "H1ObctABI",
            "pinKey": "__out__"
          }
        },
        "SJb29t0r8": {
          "id": "SJb29t0r8",
          "input": {
            "nodeId": "Hyfo5Y0SI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "By2m7tYAHL",
            "pinKey": "SyBtREhlW"
          }
        },
        "SkLgmXKYRHL": {
          "id": "SkLgmXKYRHL",
          "input": {
            "nodeId": "rkO7XYKCSL",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "By2m7tYAHL",
            "pinKey": "SyBtREhlW"
          }
        },
        "SkYp5KCH8": {
          "id": "SkYp5KCH8",
          "input": {
            "nodeId": "rks2qKRHI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "By2m7tYAHL",
            "pinKey": "BkGpcpcJQ"
          }
        },
        "SkZl5F0SI": {
          "id": "SkZl5F0SI",
          "input": {
            "nodeId": "By2m7tYAHL",
            "pinKey": "SyKd0E2x-"
          },
          "output": {
            "nodeId": "H1sycKAHI",
            "pinKey": "__out__"
          }
        },
        "SkeE5FASI": {
          "id": "SkeE5FASI",
          "input": {
            "nodeId": "ryPmcFCBU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "rkQQKFCSU",
            "pinKey": "HJU8CE2lW"
          }
        },
        "SyVynKAH8": {
          "id": "SyVynKAH8",
          "input": {
            "nodeId": "Hym7mFFABL",
            "pinKey": "SkuhqCqym"
          },
          "output": {
            "nodeId": "SkhCjt0B8",
            "pinKey": "__out__"
          }
        },
        "Sysw9tCHL": {
          "id": "Sysw9tCHL",
          "input": {
            "nodeId": "Bk7vcFCHL",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "Hym7mFFABL",
            "pinKey": "SyBtREhlW"
          }
        },
        "rJ1gXmFFRBI": {
          "id": "rJ1gXmFFRBI",
          "input": {
            "nodeId": "BJf77YKCH8",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "Hym7mFFABL",
            "pinKey": "SyBtREhlW"
          }
        },
        "rkQ7ntABL": {
          "id": "rkQ7ntABL",
          "input": {
            "nodeId": "By2m7tYAHL",
            "pinKey": "SkuhqCqym"
          },
          "output": {
            "nodeId": "HypGhYRBI",
            "pinKey": "__out__"
          }
        }
      },
      "nodes": {
        "BJSrpYCSI": {
          "id": "BJSrpYCSI",
          "label": "DATA2",
          "position": {
            "x": 12,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "BJf77YKCH8": {
          "id": "BJf77YKCH8",
          "label": "A0",
          "position": {
            "x": 4,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "BJhTKt0SL": {
          "id": "BJhTKt0SL",
          "label": "CLK",
          "position": {
            "x": 5,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "Bk7vcFCHL": {
          "id": "Bk7vcFCHL",
          "label": "A0",
          "position": {
            "x": 3,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "BkFXmFt0HI": {
          "id": "BkFXmFt0HI",
          "label": "A0done",
          "position": {
            "x": 5,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "BkimmYFRHU": {
          "id": "BkimmYFRHU",
          "label": "CLK",
          "position": {
            "x": 1,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "By2m7tYAHL": {
          "boundLiterals": {
            "SkuhqCqym": "A1"
          },
          "id": "By2m7tYAHL",
          "label": "ANALOG2",
          "position": {
            "x": 8,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/gpio/analog-read"
        },
        "H1ObctABI": {
          "id": "H1ObctABI",
          "label": "TV",
          "position": {
            "x": 2,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1UX7YFCSL": {
          "id": "H1UX7YFCSL",
          "label": "A1",
          "position": {
            "x": 12,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "H1XY9F0B8": {
          "id": "H1XY9F0B8",
          "label": "A0dune",
          "position": {
            "x": 6,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "H1sycKAHI": {
          "id": "H1sycKAHI",
          "label": "CLK",
          "position": {
            "x": 9,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "Hk5QXFKCS8": {
          "boundLiterals": {
            "HJCWLAdSwyW": "1",
            "rJbGU0_Hv1Z": "100",
            "rkpbU0OrwyZ": "0",
            "ry1z8CuBDy-": "0"
          },
          "id": "Hk5QXFKCS8",
          "position": {
            "x": 12,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/math/map"
        },
        "Hyfo5Y0SI": {
          "id": "Hyfo5Y0SI",
          "label": "A1",
          "position": {
            "x": 7,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "Hym7mFFABL": {
          "id": "Hym7mFFABL",
          "label": "ANALOG1",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/gpio/analog-read"
        },
        "HypGhYRBI": {
          "id": "HypGhYRBI",
          "label": "ANL1",
          "position": {
            "x": 8,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "SJl7mKKCrL": {
          "id": "SJl7mKKCrL",
          "label": "A1done",
          "position": {
            "x": 9,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "SkhCjt0B8": {
          "id": "SkhCjt0B8",
          "label": "ANL0",
          "position": {
            "x": 4,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "rkO7XYKCSL": {
          "id": "rkO7XYKCSL",
          "label": "A1",
          "position": {
            "x": 8,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "rkQQKFCSU": {
          "boundLiterals": {
            "B13SCNhl-": ".5"
          },
          "id": "rkQQKFCSU",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/core/clock"
        },
        "rks2qKRHI": {
          "id": "rks2qKRHI",
          "label": "A1dune",
          "position": {
            "x": 10,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "ryPmcFCBU": {
          "id": "ryPmcFCBU",
          "label": "CLK",
          "position": {
            "x": 0,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        }
      },
      "path": "@/analog"
    },
    "@/data-formatting": {
      "links": {
        "B1bzx9ABI": {
          "id": "B1bzx9ABI",
          "input": {
            "nodeId": "Hk0f7RF0B8",
            "pinKey": "SJ4zUC_BD1-"
          },
          "output": {
            "nodeId": "ryObg5RSL",
            "pinKey": "__out__"
          }
        },
        "BJS_Xc0rL": {
          "id": "BJS_Xc0rL",
          "input": {
            "nodeId": "ryBL75RBL",
            "pinKey": "SJ4zUC_BD1-"
          },
          "output": {
            "nodeId": "HkBjRFArL",
            "pinKey": "__out__"
          }
        },
        "BJmNk90HU": {
          "id": "BJmNk90HU",
          "input": {
            "nodeId": "BkPGmCtRS8",
            "pinKey": "ByU7LRuSPkW"
          },
          "output": {
            "nodeId": "HyOXyqABU",
            "pinKey": "__out__"
          }
        },
        "Bke9AFRSU": {
          "id": "Bke9AFRSU",
          "input": {
            "nodeId": "BkPGmCtRS8",
            "pinKey": "ryv7IRdSP1b"
          },
          "output": {
            "nodeId": "HkUuRK0rI",
            "pinKey": "__out__"
          }
        },
        "BybrxqArL": {
          "id": "BybrxqArL",
          "input": {
            "nodeId": "r17Vx9AHI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "Hk0f7RF0B8",
            "pinKey": "BkQzLCurwJZ"
          }
        },
        "HJcvk9CrU": {
          "id": "HJcvk9CrU",
          "input": {
            "nodeId": "ryYIJ90HI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "SJzMXRKCHI",
            "pinKey": "r1H_oipZb"
          }
        },
        "HkDnRK0HI": {
          "id": "HkDnRK0HI",
          "input": {
            "nodeId": "HyfXCtCBI",
            "pinKey": "BJlHojaWZ"
          },
          "output": {
            "nodeId": "HkBjRFArL",
            "pinKey": "__out__"
          }
        },
        "HkNrz5CSL": {
          "id": "HkNrz5CSL",
          "input": {
            "nodeId": "rJyyMcRHL",
            "pinKey": "B1GfLR_SPk-"
          },
          "output": {
            "nodeId": "HkVEz5Rr8",
            "pinKey": "__out__"
          }
        },
        "HkTxJqASL": {
          "id": "HkTxJqASL",
          "input": {
            "nodeId": "SyOfXRKCBL",
            "pinKey": "B1GfLR_SPk-"
          },
          "output": {
            "nodeId": "rJVgy9ASU",
            "pinKey": "__out__"
          }
        },
        "HkYKm5AS8": {
          "id": "HkYKm5AS8",
          "input": {
            "nodeId": "H1puX50BU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "ryBL75RBL",
            "pinKey": "BkQzLCurwJZ"
          }
        },
        "Hkau19CB8": {
          "id": "Hkau19CB8",
          "input": {
            "nodeId": "SJAv15ASI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HyfXCtCBI",
            "pinKey": "r1H_oipZb"
          }
        },
        "Hye21c0H8": {
          "id": "Hye21c0H8",
          "input": {
            "nodeId": "Sklik9CBU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "BkPGmCtRS8",
            "pinKey": "ByHmL0uHPk-"
          }
        },
        "S1MWx5RBI": {
          "id": "S1MWx5RBI",
          "input": {
            "nodeId": "SyOfXRKCBL",
            "pinKey": "SJ4zUC_BD1-"
          },
          "output": {
            "nodeId": "SkUelqCHL",
            "pinKey": "__out__"
          }
        },
        "Sk1gxcCS8": {
          "id": "Sk1gxcCS8",
          "input": {
            "nodeId": "HyfXCtCBI",
            "pinKey": "HJTIija-W"
          },
          "output": {
            "nodeId": "SyTR1c0HU",
            "pinKey": "__out__"
          }
        },
        "Sy6cQc0BL": {
          "id": "Sy6cQc0BL",
          "input": {
            "nodeId": "ryBL75RBL",
            "pinKey": "B1GfLR_SPk-"
          },
          "output": {
            "nodeId": "rJ4cQcArU",
            "pinKey": "__out__"
          }
        },
        "r1cfy5CSL": {
          "id": "r1cfy5CSL",
          "input": {
            "nodeId": "Hk0f7RF0B8",
            "pinKey": "B1GfLR_SPk-"
          },
          "output": {
            "nodeId": "rJh-19Ar8",
            "pinKey": "__out__"
          }
        },
        "r1iB190HU": {
          "id": "r1iB190HU",
          "input": {
            "nodeId": "SJzMXRKCHI",
            "pinKey": "BJlHojaWZ"
          },
          "output": {
            "nodeId": "S12NkqCHU",
            "pinKey": "__out__"
          }
        },
        "rJDDMc0BU": {
          "id": "rJDDMc0BU",
          "input": {
            "nodeId": "rJyyMcRHL",
            "pinKey": "SJ4zUC_BD1-"
          },
          "output": {
            "nodeId": "S12NkqCHU",
            "pinKey": "__out__"
          }
        },
        "rJhcJ5AHL": {
          "id": "rJhcJ5AHL",
          "input": {
            "nodeId": "rJcFkc0rU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "SyOfXRKCBL",
            "pinKey": "BkQzLCurwJZ"
          }
        },
        "rk21ec0HU": {
          "id": "rk21ec0HU",
          "input": {
            "nodeId": "SJzMXRKCHI",
            "pinKey": "HJTIija-W"
          },
          "output": {
            "nodeId": "BJip1cCHL",
            "pinKey": "__out__"
          }
        },
        "rysKMqCrL": {
          "id": "rysKMqCrL",
          "input": {
            "nodeId": "BJ6vM5RBU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "rJyyMcRHL",
            "pinKey": "BkQzLCurwJZ"
          }
        }
      },
      "nodes": {
        "BJ6vM5RBU": {
          "id": "BJ6vM5RBU",
          "label": "D1M",
          "position": {
            "x": 9,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "BJip1cCHL": {
          "id": "BJip1cCHL",
          "label": "DIG1",
          "position": {
            "x": 12,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "BkPGmCtRS8": {
          "id": "BkPGmCtRS8",
          "position": {
            "x": 5,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/any"
        },
        "H1puX50BU": {
          "id": "H1puX50BU",
          "label": "D2M",
          "position": {
            "x": 13,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "Hk0f7RF0B8": {
          "boundLiterals": {
            "SJ4zUC_BD1-": "100"
          },
          "id": "Hk0f7RF0B8",
          "position": {
            "x": 7,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/multiply"
        },
        "HkBjRFArL": {
          "id": "HkBjRFArL",
          "label": "DATA2",
          "position": {
            "x": 15,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HkUuRK0rI": {
          "id": "HkUuRK0rI",
          "label": "A0done",
          "position": {
            "x": 5,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "HkVEz5Rr8": {
          "id": "HkVEz5Rr8",
          "label": "FACT1",
          "position": {
            "x": 9,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HyOXyqABU": {
          "id": "HyOXyqABU",
          "label": "A1done",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "HyfXCtCBI": {
          "boundLiterals": {
            "HJTIija-W": "0"
          },
          "id": "HyfXCtCBI",
          "position": {
            "x": 15,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/format-number"
        },
        "S12NkqCHU": {
          "id": "S12NkqCHU",
          "label": "DATA1",
          "position": {
            "x": 11,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SJAv15ASI": {
          "id": "SJAv15ASI",
          "label": "TXT2",
          "position": {
            "x": 15,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-string"
        },
        "SJzMXRKCHI": {
          "boundLiterals": {
            "HJTIija-W": "0"
          },
          "id": "SJzMXRKCHI",
          "position": {
            "x": 11,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/format-number"
        },
        "SkUelqCHL": {
          "id": "SkUelqCHL",
          "label": "M1",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "Sklik9CBU": {
          "id": "Sklik9CBU",
          "label": "CLR",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "SyOfXRKCBL": {
          "boundLiterals": {
            "SJ4zUC_BD1-": "100"
          },
          "id": "SyOfXRKCBL",
          "position": {
            "x": 3,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/multiply"
        },
        "SyTR1c0HU": {
          "id": "SyTR1c0HU",
          "label": "DIG2",
          "position": {
            "x": 16,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "r17Vx9AHI": {
          "id": "r17Vx9AHI",
          "label": "M",
          "position": {
            "x": 7,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "rJ4cQcArU": {
          "id": "rJ4cQcArU",
          "label": "FACT2",
          "position": {
            "x": 13,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rJVgy9ASU": {
          "id": "rJVgy9ASU",
          "label": "A0",
          "position": {
            "x": 3,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rJcFkc0rU": {
          "id": "rJcFkc0rU",
          "label": "AO",
          "position": {
            "x": 3,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "rJh-19Ar8": {
          "id": "rJh-19Ar8",
          "label": "A1",
          "position": {
            "x": 7,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rJyyMcRHL": {
          "boundLiterals": {
            "B1GfLR_SPk-": "1.23"
          },
          "id": "rJyyMcRHL",
          "position": {
            "x": 9,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/multiply"
        },
        "ryBL75RBL": {
          "boundLiterals": {
            "B1GfLR_SPk-": "1.23"
          },
          "id": "ryBL75RBL",
          "position": {
            "x": 13,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/multiply"
        },
        "ryObg5RSL": {
          "id": "ryObg5RSL",
          "label": "M2",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "ryYIJ90HI": {
          "id": "ryYIJ90HI",
          "label": "TXT1",
          "position": {
            "x": 11,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-string"
        }
      },
      "path": "@/data-formatting"
    },
    "@/main": {
      "links": {
        "B1IXM8wKArL": {
          "id": "B1IXM8wKArL",
          "input": {
            "nodeId": "Skjz8DtCH8",
            "pinKey": "Sy6LZuYIE"
          },
          "output": {
            "nodeId": "Sk3bfIwY0B8",
            "pinKey": "__out__"
          }
        },
        "B1ul-qRSU": {
          "id": "B1ul-qRSU",
          "input": {
            "nodeId": "B1cbMIvKABU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "rJcFkc0rU"
          }
        },
        "BJz0g75RHI": {
          "id": "BJz0g75RHI",
          "input": {
            "nodeId": "rkhfUPFABL",
            "pinKey": "HyIYbhwh8E"
          },
          "output": {
            "nodeId": "H1ZCeQcASU",
            "pinKey": "__out__"
          }
        },
        "BkDXG8PYCr8": {
          "id": "BkDXG8PYCr8",
          "input": {
            "nodeId": "SkcfIDtRS8",
            "pinKey": "HJIQ6AY8E"
          },
          "output": {
            "nodeId": "Sy3xfUvYRBU",
            "pinKey": "__out__"
          }
        },
        "BkEUGIvK0SL": {
          "id": "BkEUGIvK0SL",
          "input": {
            "nodeId": "SJ6lGUPtAB8",
            "pinKey": "HyIYbhwh8E"
          },
          "output": {
            "nodeId": "rJAfMLvF0BU",
            "pinKey": "__out__"
          }
        },
        "BkFshKCB8": {
          "id": "BkFshKCB8",
          "input": {
            "nodeId": "SJyxzUvFCrI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HJuOhYASL",
            "pinKey": "ryPmcFCBU"
          }
        },
        "BklReX5CHL": {
          "id": "BklReX5CHL",
          "input": {
            "nodeId": "BJRem5RHU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "SJdWf8wtASI",
            "pinKey": "rylSGPt8E"
          }
        },
        "Bkz4GUvtRSI": {
          "id": "Bkz4GUvtRSI",
          "input": {
            "nodeId": "SkcfIDtRS8",
            "pinKey": "S1gH6CKIN"
          },
          "output": {
            "nodeId": "HypZGLvt0SL",
            "pinKey": "__out__"
          }
        },
        "By8mZqASU": {
          "id": "By8mZqASU",
          "input": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "HkUuRK0rI"
          },
          "output": {
            "nodeId": "HJwGMUDYCr8",
            "pinKey": "__out__"
          }
        },
        "ByULzIvtASU": {
          "id": "ByULzIvtASU",
          "input": {
            "nodeId": "BkcgfLPtRHL",
            "pinKey": "BypX80uSD1Z"
          },
          "output": {
            "nodeId": "rkkQMUPY0SL",
            "pinKey": "__out__"
          }
        },
        "ByZC3K0BU": {
          "id": "ByZC3K0BU",
          "input": {
            "nodeId": "H1Nff8vFAHL",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HJuOhYASL",
            "pinKey": "Bk7vcFCHL"
          }
        },
        "By_4Z9CSL": {
          "id": "By_4Z9CSL",
          "input": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "HyOXyqABU"
          },
          "output": {
            "nodeId": "ryqzG8vF0rL",
            "pinKey": "__out__"
          }
        },
        "BytXMIvYArI": {
          "id": "BytXMIvYArI",
          "input": {
            "nodeId": "SJyzzIPtArU",
            "pinKey": "S1gH6CKIN"
          },
          "output": {
            "nodeId": "HyYWfUPF0S8",
            "pinKey": "__out__"
          }
        },
        "H1A-pFRrU": {
          "id": "H1A-pFRrU",
          "input": {
            "nodeId": "BkYGzUPtRrI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HJuOhYASL",
            "pinKey": "rks2qKRHI"
          }
        },
        "HJ3VzLwY0rI": {
          "id": "HJ3VzLwY0rI",
          "input": {
            "nodeId": "H1jlfLPFASU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "By_M8wY0HL",
            "pinKey": "ryH6tSt8N"
          }
        },
        "HJJsW5Cr8": {
          "id": "HJJsW5Cr8",
          "input": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "HkBjRFArL"
          },
          "output": {
            "nodeId": "S1az8PtCBI",
            "pinKey": "__out__"
          }
        },
        "Hk8Ef8DK0HU": {
          "id": "Hk8Ef8DK0HU",
          "input": {
            "nodeId": "SkcfIDtRS8",
            "pinKey": "Hypl61qUE"
          },
          "output": {
            "nodeId": "H1HMLvKCSL",
            "pinKey": "HyRmUCdBDkZ"
          }
        },
        "HkYHfIwFRBL": {
          "id": "HkYHfIwFRBL",
          "input": {
            "nodeId": "r1WGG8vKASI",
            "pinKey": "BJnQUR_BwyZ"
          },
          "output": {
            "nodeId": "BkgbGIPYCHU",
            "pinKey": "__out__"
          }
        },
        "HkvSfIwYCrI": {
          "id": "HkvSfIwYCrI",
          "input": {
            "nodeId": "r1mffIvYRBL",
            "pinKey": "r1n7kPYIN"
          },
          "output": {
            "nodeId": "SyBZzLDF0BU",
            "pinKey": "__out__"
          }
        },
        "Hy8BMUPtRrU": {
          "id": "Hy8BMUPtRrU",
          "input": {
            "nodeId": "HkPfIDFCSU",
            "pinKey": "HyIYbhwh8E"
          },
          "output": {
            "nodeId": "SJ6lGUPtAB8",
            "pinKey": "ryQK-nDnU4"
          }
        },
        "HyMHGIwYABI": {
          "id": "HyMHGIwYABI",
          "input": {
            "nodeId": "SJyzzIPtArU",
            "pinKey": "B11QT1qLN"
          },
          "output": {
            "nodeId": "rkhfUPFABL",
            "pinKey": "ryQK-nDnU4"
          }
        },
        "HyOSzIPt0BU": {
          "id": "HyOSzIPt0BU",
          "input": {
            "nodeId": "SJdWf8wtASI",
            "pinKey": "S1mxGvKUN"
          },
          "output": {
            "nodeId": "SJulMIwtRS8",
            "pinKey": "__out__"
          }
        },
        "HyZHfLDFRrI": {
          "id": "HyZHfLDFRrI",
          "input": {
            "nodeId": "HkPfIDFCSU",
            "pinKey": "BylY-3Pn84"
          },
          "output": {
            "nodeId": "H1zzLvtCBL",
            "pinKey": "__out__"
          }
        },
        "S1Y4MUPFAr8": {
          "id": "S1Y4MUPFAr8",
          "input": {
            "nodeId": "HkPfIDFCSU",
            "pinKey": "BJZFW2v3IV"
          },
          "output": {
            "nodeId": "SkGlMUwFRrL",
            "pinKey": "__out__"
          }
        },
        "S1_4GIDKCrU": {
          "id": "S1_4GIDKCrU",
          "input": {
            "nodeId": "SJyzzIPtArU",
            "pinKey": "Hypl61qUE"
          },
          "output": {
            "nodeId": "BkcgfLPtRHL",
            "pinKey": "HyRmUCdBDkZ"
          }
        },
        "S1_7zLwYABU": {
          "id": "S1_7zLwYABU",
          "input": {
            "nodeId": "SJ6lGUPtAB8",
            "pinKey": "BJZFW2v3IV"
          },
          "output": {
            "nodeId": "ryLxM8wYCS8",
            "pinKey": "__out__"
          }
        },
        "S1eVzLvFRHL": {
          "id": "S1eVzLvFRHL",
          "input": {
            "nodeId": "rkhfUPFABL",
            "pinKey": "BJZFW2v3IV"
          },
          "output": {
            "nodeId": "B14ZMLvtRHL",
            "pinKey": "__out__"
          }
        },
        "S1vSZcCBI": {
          "id": "S1vSZcCBI",
          "input": {
            "nodeId": "S18-fIvF0S8",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "SJAv15ASI"
          }
        },
        "SJ8ZZ5CBU": {
          "id": "SJ8ZZ5CBU",
          "input": {
            "nodeId": "HkAlM8vF0rI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "Sklik9CBU"
          }
        },
        "SJDgN5CrL": {
          "id": "SJDgN5CrL",
          "input": {
            "nodeId": "H1fQfLPFASL",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "H1puX50BU"
          }
        },
        "SJE4MUDtRBU": {
          "id": "SJE4MUDtRBU",
          "input": {
            "nodeId": "SJdWf8wtASI",
            "pinKey": "r1H7MwK8E"
          },
          "output": {
            "nodeId": "S1A-MIvKAHL",
            "pinKey": "__out__"
          }
        },
        "SJQIzIwYABU": {
          "id": "SJQIzIwYABU",
          "input": {
            "nodeId": "SkaMz8wFCBL",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "SJyzzIPtArU",
            "pinKey": "r1DL6CFU4"
          }
        },
        "SJjVG8DtRB8": {
          "id": "SJjVG8DtRB8",
          "input": {
            "nodeId": "SJ6lGUPtAB8",
            "pinKey": "BylY-3Pn84"
          },
          "output": {
            "nodeId": "ryG-MLPFABL",
            "pinKey": "__out__"
          }
        },
        "SJrHMLwt0rI": {
          "id": "SJrHMLwt0rI",
          "input": {
            "nodeId": "Skjz8DtCH8",
            "pinKey": "SJDbf_YUV"
          },
          "output": {
            "nodeId": "SkcfIDtRS8",
            "pinKey": "r1DL6CFU4"
          }
        },
        "SJvu6KAH8": {
          "id": "SJvu6KAH8",
          "input": {
            "nodeId": "HyiZzLwFAS8",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HJuOhYASL",
            "pinKey": "BJSrpYCSI"
          }
        },
        "Sk6xptRSL": {
          "id": "Sk6xptRSL",
          "input": {
            "nodeId": "S1uGMUwY0HI",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HJuOhYASL",
            "pinKey": "Hyfo5Y0SI"
          }
        },
        "Skj_bc0SL": {
          "id": "Skj_bc0SL",
          "input": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "rJh-19Ar8"
          },
          "output": {
            "nodeId": "rJiMfUPFRSI",
            "pinKey": "__out__"
          }
        },
        "Sy7SzIPYCH8": {
          "id": "Sy7SzIPYCH8",
          "input": {
            "nodeId": "SJyzzIPtArU",
            "pinKey": "HJIQ6AY8E"
          },
          "output": {
            "nodeId": "HklGf8DKCSI",
            "pinKey": "__out__"
          }
        },
        "SyAEG8vKAr8": {
          "id": "SyAEG8vKAr8",
          "input": {
            "nodeId": "SkcfIDtRS8",
            "pinKey": "Bkw-6yqI4"
          },
          "output": {
            "nodeId": "r1WGG8vKASI",
            "pinKey": "SyomIRurDJ-"
          }
        },
        "SycXMIwY0HI": {
          "id": "SycXMIwY0HI",
          "input": {
            "nodeId": "ByEeMUvKABL",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "B1HxMIDYRrI",
            "pinKey": "B1x2RV3eZ"
          }
        },
        "rJ9Rl5RB8": {
          "id": "rJ9Rl5RB8",
          "input": {
            "nodeId": "By1ZfIwK0H8",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "ryYIJ90HI"
          }
        },
        "rJXF6FRB8": {
          "id": "rJXF6FRB8",
          "input": {
            "nodeId": "SyeeMIwt0r8",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "HJuOhYASL",
            "pinKey": "BJSrpYCSI"
          }
        },
        "rJuTM5CHU": {
          "id": "rJuTM5CHU",
          "input": {
            "nodeId": "rkeXGLwFCSU",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "BJ6vM5RBU"
          }
        },
        "rkO5e5CSU": {
          "id": "rkO5e5CSU",
          "input": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "S12NkqCHU"
          },
          "output": {
            "nodeId": "rJ0zUPYCHU",
            "pinKey": "__out__"
          }
        },
        "rkUk6FRS8": {
          "id": "rkUk6FRS8",
          "input": {
            "nodeId": "SJUMM8DFCr8",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HJuOhYASL",
            "pinKey": "H1XY9F0B8"
          }
        },
        "rkY8GUDt0HL": {
          "id": "rkY8GUDt0HL",
          "input": {
            "nodeId": "H1HMLvKCSL",
            "pinKey": "BypX80uSD1Z"
          },
          "output": {
            "nodeId": "Hy7mGUDF0rU",
            "pinKey": "__out__"
          }
        },
        "rkqLzUwFRSL": {
          "id": "rkqLzUwFRSL",
          "input": {
            "nodeId": "HkPfIDFCSU",
            "pinKey": "rkGYb3D2I4"
          },
          "output": {
            "nodeId": "HkV7MIvKArL",
            "pinKey": "__out__"
          }
        },
        "ry4HGIDtCHU": {
          "id": "ry4HGIDtCHU",
          "input": {
            "nodeId": "SkcfIDtRS8",
            "pinKey": "B11QT1qLN"
          },
          "output": {
            "nodeId": "HkPfIDFCSU",
            "pinKey": "ryQK-nDnU4"
          }
        },
        "rycse9AH8": {
          "id": "rycse9AH8",
          "input": {
            "nodeId": "HyfYxqAHI",
            "pinKey": "rJVgy9ASU"
          },
          "output": {
            "nodeId": "r1BGzLPYAHU",
            "pinKey": "__out__"
          }
        },
        "ryw8GUDF0SL": {
          "id": "ryw8GUDF0SL",
          "input": {
            "nodeId": "rkhfUPFABL",
            "pinKey": "rkGYb3D2I4"
          },
          "output": {
            "nodeId": "B1bmMIDFAS8",
            "pinKey": "__out__"
          }
        }
      },
      "nodes": {
        "B14ZMLvtRHL": {
          "id": "B14ZMLvtRHL",
          "label": "DEV",
          "position": {
            "x": 14,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "B1HxMIDYRrI": {
          "boundLiterals": {
            "B1x2RV3eZ": "42"
          },
          "description": "ROW 2 VERTICAL POSTION",
          "id": "B1HxMIDYRrI",
          "label": "R2P",
          "position": {
            "x": 0,
            "y": 7,
            "units": "slots"
          },
          "type": "xod/core/constant-number"
        },
        "B1bmMIDFAS8": {
          "id": "B1bmMIDFAS8",
          "label": "D1M",
          "position": {
            "x": 17,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "B1cbMIvKABU": {
          "id": "B1cbMIvKABU",
          "label": "DATA1",
          "position": {
            "x": 0,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "BJRem5RHU": {
          "id": "BJRem5RHU",
          "label": "DONE",
          "position": {
            "x": 15,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "BkYGzUPtRrI": {
          "id": "BkYGzUPtRrI",
          "label": "A1done",
          "position": {
            "x": 6,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "BkcgfLPtRHL": {
          "boundLiterals": {
            "BypX80uSD1Z": "1",
            "rkJ4URuHDJ-": "24"
          },
          "id": "BkcgfLPtRHL",
          "position": {
            "x": 8,
            "y": 6,
            "units": "slots"
          },
          "type": "xod/core/subtract"
        },
        "BkgbGIPYCHU": {
          "id": "BkgbGIPYCHU",
          "label": "R2P",
          "position": {
            "x": 4,
            "y": 7,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "By1ZfIwK0H8": {
          "id": "By1ZfIwK0H8",
          "label": "TXT1",
          "position": {
            "x": 4,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "ByEeMUvKABL": {
          "id": "ByEeMUvKABL",
          "label": "R2P",
          "position": {
            "x": 0,
            "y": 8,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "By_M8wY0HL": {
          "id": "By_M8wY0HL",
          "position": {
            "x": 9,
            "y": 1,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/ssd1306-oled-i2c-device"
        },
        "H1HMLvKCSL": {
          "boundLiterals": {
            "BypX80uSD1Z": "1",
            "rkJ4URuHDJ-": "0"
          },
          "id": "H1HMLvKCSL",
          "position": {
            "x": 2,
            "y": 8,
            "units": "slots"
          },
          "type": "xod/core/subtract"
        },
        "H1Nff8vFAHL": {
          "id": "H1Nff8vFAHL",
          "label": "A0",
          "position": {
            "x": 3,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "H1ZCeQcASU": {
          "id": "H1ZCeQcASU",
          "label": "DONE",
          "position": {
            "x": 22,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "H1fQfLPFASL": {
          "description": "DATA2 X 1.23",
          "id": "H1fQfLPFASL",
          "label": "D2M",
          "position": {
            "x": 5,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "H1jlfLPFASU": {
          "id": "H1jlfLPFASU",
          "label": "DEV",
          "position": {
            "x": 9,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "H1zzLvtCBL": {
          "id": "H1zzLvtCBL",
          "label": "R2P",
          "position": {
            "x": 10,
            "y": 8,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "HJuOhYASL": {
          "boundLiterals": {
            "H1ObctABI": ".25",
            "HypGhYRBI": "A1",
            "SkhCjt0B8": "A0"
          },
          "id": "HJuOhYASL",
          "position": {
            "x": 2,
            "y": 1,
            "units": "slots"
          },
          "type": "@/analog"
        },
        "HJwGMUDYCr8": {
          "id": "HJwGMUDYCr8",
          "label": "A0done",
          "position": {
            "x": 2,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "HkAlM8vF0rI": {
          "id": "HkAlM8vF0rI",
          "label": "CLR",
          "position": {
            "x": 1,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "HkPfIDFCSU": {
          "boundLiterals": {
            "B1rFb2DhLV": "0",
            "BylY-3Pn84": "20",
            "SJOt-3wn8N": "18",
            "r1tZnDhLV": "True",
            "rkGYb3D2I4": "128",
            "ryPtZnPhIN": "2"
          },
          "id": "HkPfIDFCSU",
          "label": "INPUT 1 BAR",
          "position": {
            "x": 8,
            "y": 9,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/draw-rounded-rectangle"
        },
        "HkV7MIvKArL": {
          "id": "HkV7MIvKArL",
          "label": "D2M",
          "position": {
            "x": 11,
            "y": 8,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "HklGf8DKCSI": {
          "id": "HklGf8DKCSI",
          "label": "DEV",
          "position": {
            "x": 7,
            "y": 6,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "Hy7mGUDF0rU": {
          "id": "Hy7mGUDF0rU",
          "label": "D2M",
          "position": {
            "x": 2,
            "y": 7,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "HyYWfUPF0S8": {
          "id": "HyYWfUPF0S8",
          "label": "TXT1",
          "position": {
            "x": 10,
            "y": 6,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "HyfYxqAHI": {
          "boundLiterals": {
            "HkVEz5Rr8": "1.23",
            "SkUelqCHL": "100",
            "rJ4cQcArU": "1.23",
            "ryObg5RSL": "100"
          },
          "id": "HyfYxqAHI",
          "position": {
            "x": 0,
            "y": 4,
            "units": "slots"
          },
          "type": "@/data-formatting"
        },
        "HyiZzLwFAS8": {
          "id": "HyiZzLwFAS8",
          "label": "DATA2",
          "position": {
            "x": 7,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "HypZGLvt0SL": {
          "id": "HypZGLvt0SL",
          "label": "TXT2",
          "position": {
            "x": 4,
            "y": 9,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "S18-fIvF0S8": {
          "id": "S18-fIvF0S8",
          "label": "TXT2",
          "position": {
            "x": 6,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "S1A-MIvKAHL": {
          "id": "S1A-MIvKAHL",
          "label": "CLR",
          "position": {
            "x": 16,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "S1az8PtCBI": {
          "id": "S1az8PtCBI",
          "label": "DATA2",
          "position": {
            "x": 10,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "S1uGMUwY0HI": {
          "id": "S1uGMUwY0HI",
          "label": "A1",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "SJ6lGUPtAB8": {
          "boundLiterals": {
            "B1rFb2DhLV": "0",
            "BylY-3Pn84": "20",
            "SJOt-3wn8N": "18",
            "r1tZnDhLV": "True",
            "rkGYb3D2I4": "128"
          },
          "id": "SJ6lGUPtAB8",
          "label": "INPUT 1 BAR",
          "position": {
            "x": 16,
            "y": 8,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/draw-rounded-rectangle"
        },
        "SJUMM8DFCr8": {
          "id": "SJUMM8DFCr8",
          "label": "A0done",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "SJdWf8wtASI": {
          "id": "SJdWf8wtASI",
          "position": {
            "x": 15,
            "y": 2,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/clear-display"
        },
        "SJulMIwtRS8": {
          "id": "SJulMIwtRS8",
          "label": "DEV",
          "position": {
            "x": 15,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "SJyxzUvFCrI": {
          "id": "SJyxzUvFCrI",
          "label": "CLK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "SJyzzIPtArU": {
          "boundLiterals": {
            "BkhUQ_2IN": "2",
            "Bkw-6yqI4": "1",
            "ByW_2k9IN": "02h",
            "Hypl61qUE": "31",
            "S1gH6CKIN": "\"DRE\"",
            "rJgOsycUN": "False"
          },
          "id": "SJyzzIPtArU",
          "label": "INPUT 1 TXT",
          "position": {
            "x": 7,
            "y": 7,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/draw-text"
        },
        "Sk3bfIwY0B8": {
          "id": "Sk3bfIwY0B8",
          "label": "DEV",
          "position": {
            "x": 0,
            "y": 10,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "SkGlMUwFRrL": {
          "id": "SkGlMUwFRrL",
          "label": "DEV",
          "position": {
            "x": 8,
            "y": 8,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "SkaMz8wFCBL": {
          "description": "LLINE 1 DONE",
          "id": "SkaMz8wFCBL",
          "label": "L1D",
          "position": {
            "x": 7,
            "y": 8,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "SkcfIDtRS8": {
          "boundLiterals": {
            "BkhUQ_2IN": "2",
            "Bkw-6yqI4": "23",
            "ByW_2k9IN": "02h",
            "Hypl61qUE": "31",
            "S1gH6CKIN": "\"DRE\"",
            "rJgOsycUN": "False"
          },
          "id": "SkcfIDtRS8",
          "label": "INPUT 2 TXT",
          "position": {
            "x": 1,
            "y": 10,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/draw-text"
        },
        "Skjz8DtCH8": {
          "id": "Skjz8DtCH8",
          "position": {
            "x": 0,
            "y": 11,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/send-buffer-to-display"
        },
        "Sy3xfUvYRBU": {
          "id": "Sy3xfUvYRBU",
          "label": "DEV",
          "position": {
            "x": 1,
            "y": 9,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "SyBZzLDF0BU": {
          "id": "SyBZzLDF0BU",
          "label": "DEV",
          "position": {
            "x": 12,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "SyeeMIwt0r8": {
          "id": "SyeeMIwt0r8",
          "position": {
            "x": 8,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/debug/watch"
        },
        "r1BGzLPYAHU": {
          "id": "r1BGzLPYAHU",
          "label": "A0",
          "position": {
            "x": 0,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "r1WGG8vKASI": {
          "boundLiterals": {
            "HkqmLAOrD1W": "2"
          },
          "id": "r1WGG8vKASI",
          "position": {
            "x": 4,
            "y": 8,
            "units": "slots"
          },
          "type": "xod/core/add"
        },
        "r1mffIvYRBL": {
          "id": "r1mffIvYRBL",
          "position": {
            "x": 12,
            "y": 2,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/init"
        },
        "rJ0zUPYCHU": {
          "id": "rJ0zUPYCHU",
          "label": "DATA1",
          "position": {
            "x": 7,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "rJAfMLvF0BU": {
          "id": "rJAfMLvF0BU",
          "label": "L1D",
          "position": {
            "x": 24,
            "y": 7,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "rJiMfUPFRSI": {
          "id": "rJiMfUPFRSI",
          "label": "A1",
          "position": {
            "x": 4,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "rkeXGLwFCSU": {
          "description": "DATA1 X 1.23",
          "id": "rkeXGLwFCSU",
          "label": "D1M",
          "position": {
            "x": 3,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/to-bus"
        },
        "rkhfUPFABL": {
          "boundLiterals": {
            "B1rFb2DhLV": "0",
            "BylY-3Pn84": "0",
            "SJOt-3wn8N": "16",
            "r1tZnDhLV": "True",
            "rkGYb3D2I4": "0"
          },
          "id": "rkhfUPFABL",
          "label": "INPUT 1 BAR",
          "position": {
            "x": 14,
            "y": 6,
            "units": "slots"
          },
          "type": "wayland/ssd1306-oled-i2c/draw-rounded-rectangle"
        },
        "rkkQMUPY0SL": {
          "id": "rkkQMUPY0SL",
          "label": "D1M",
          "position": {
            "x": 8,
            "y": 5,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "ryG-MLPFABL": {
          "id": "ryG-MLPFABL",
          "label": "R2P",
          "position": {
            "x": 18,
            "y": 7,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "ryLxM8wYCS8": {
          "id": "ryLxM8wYCS8",
          "label": "DEV",
          "position": {
            "x": 16,
            "y": 7,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        },
        "ryqzG8vF0rL": {
          "id": "ryqzG8vF0rL",
          "label": "A1done",
          "position": {
            "x": 3,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/from-bus"
        }
      },
      "path": "@/main"
    },
    "Storage/bradzilla84/arduino-serial-plotter": {
      "description": "Utill to view data in the Arduino IDE Serial Plotter tool.",
      "links": {
        "BkSLDBSeN": {
          "id": "BkSLDBSeN",
          "input": {
            "nodeId": "HJ8RIBSgN",
            "pinKey": "Hkqu9oaWb"
          },
          "output": {
            "nodeId": "S1FBvrSlN",
            "pinKey": "__out__"
          }
        },
        "HJ1ZPSHxN": {
          "id": "HJ1ZPSHxN",
          "input": {
            "nodeId": "HyuYIHBxV",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "HJ8RIBSgN",
            "pinKey": "rksccsp-W"
          }
        },
        "HJwUDHrlN": {
          "id": "HJwUDHrlN",
          "input": {
            "nodeId": "HJ8RIBSgN",
            "pinKey": "BkeKcj6ZZ-$1"
          },
          "output": {
            "nodeId": "BJpEPSSxV",
            "pinKey": "__out__"
          }
        }
      },
      "nodes": {
        "BJpEPSSxV": {
          "id": "BJpEPSSxV",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-string"
        },
        "HJ8RIBSgN": {
          "arityLevel": 2,
          "boundLiterals": {
            "BkeKcj6ZZ": "\",\"",
            "BkeKcj6ZZ-$2": "\",\"",
            "BkeKcj6ZZ-$4": "\",\""
          },
          "id": "HJ8RIBSgN",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/core/concat"
        },
        "HJvV8rSlV": {
          "id": "HJvV8rSlV",
          "position": {
            "x": 7,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/variadic-1"
        },
        "HyuYIHBxV": {
          "id": "HyuYIHBxV",
          "position": {
            "x": 1,
            "y": 4,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-string"
        },
        "S1FBvrSlN": {
          "id": "S1FBvrSlN",
          "position": {
            "x": 0,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-string"
        }
      },
      "path": "Storage/bradzilla84/arduino-serial-plotter"
    },
    "Storage/bradzilla84/colour": {
      "attachments": [
        {
          "content": "struct State {\n    // this is a regular state related to the patch (i.e. constructor in this case)\n};\n\nstruct Type {\n    uint8_t Red;\n    uint8_t Green;\n    uint8_t Blue;\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n\n    if (!isInputDirty<input_INIT>(ctx)){\n        return;}\n\n\n    uint8_t Red = getValue<input_Red>(ctx) * 255.f;\n    uint8_t Green = getValue<input_Green>(ctx) * 255.f;\n    uint8_t Blue = getValue<input_Blue>(ctx) * 255.f;\n    Type Colour = { Red, Green, Blue };\n    emitValue<output_OUT>(ctx, Colour);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Set Colour's(pulse to update)(Check example for usage)Easy to Theme.",
      "nodes": {
        "BJypwwa6X": {
          "description": "Blue Colour 0 min, 1Max.",
          "id": "BJypwwa6X",
          "label": "Blue",
          "position": {
            "x": 5,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1S2wD6pX": {
          "id": "H1S2wD6pX",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-self"
        },
        "rJa2wvp6Q": {
          "description": "Green Colour 0 min, 1Max.",
          "id": "rJa2wvp6Q",
          "label": "Green",
          "position": {
            "x": 3,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rkh2PD6p7": {
          "description": "Red Colour 0 min, 1Max.",
          "id": "rkh2PD6p7",
          "label": "Red",
          "position": {
            "x": 1,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "ryQTDDa67": {
          "id": "ryQTDDa67",
          "position": {
            "x": 2,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "rydofjTaQ": {
          "boundLiterals": {
            "__out__": "Continuously"
          },
          "id": "rydofjTaQ",
          "label": "INIT",
          "position": {
            "x": 7,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        }
      },
      "path": "Storage/bradzilla84/colour"
    },
    "Storage/bradzilla84/display-text": {
      "attachments": [
        {
          "content": "struct State {\n\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n    emitValue<output_OUT>(ctx, getValue<input_DEV>(ctx));\n        return;}\n\n\n    auto Display = getValue<input_DEV>(ctx);  // Get a pointer to the `TFT` class instance\n    auto Colour = getValue<input_Colour>(ctx);\n    auto TXTString = getValue<input_String>(ctx);\n\n    String Stringg = \"\";// I REALY NEED a better way to do this XString to char\n    for (auto it = TXTString.iterate(); it; ++it)\n        Stringg = Stringg + (*it);\n\n    int str_len = Stringg.length() + 1;\n    char TXT[str_len];\n    Stringg.toCharArray(TXT, str_len);\n\n    // write the static text to the screen\n    // set the font color\n    Display->stroke(Colour.Red,Colour.Green,Colour.Blue);\n    // set the font size\n    Display->setTextSize(getValue<input_Size>(ctx));\n    // write the text to the screen\n    Display->text((TXT), getValue<input_XLoc>(ctx), getValue<input_YLoc>(ctx));\n    // Pulse that module initialized successfully\n\n    emitValue<output_OUT>(ctx, Display);\n    emitValue<output_OK>(ctx, 1);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Write text to the screen at the given coordinates.",
      "nodes": {
        "BkE48jpam": {
          "boundLiterals": {
            "__out__": "\"Hello World\""
          },
          "description": "The text you want to write on the screen.",
          "id": "BkE48jpam",
          "label": "String",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-string"
        },
        "HJV-XUjaTQ": {
          "description": "Colour of TXT",
          "id": "HJV-XUjaTQ",
          "label": "Colour",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-colour"
        },
        "HJec2ECam": {
          "boundLiterals": {
            "__out__": "1"
          },
          "description": "Sets the size of text that follows. The default size is \"1\". Each change in size increases the text by 10 pixels in height. That is, size 1 = 10 pixels, size 2 =20 pixels, and so on.",
          "id": "HJec2ECam",
          "label": "Size",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HJz-XIja6X": {
          "id": "HJz-XIja6X",
          "label": "DEV",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-device"
        },
        "HkZ-78sppm": {
          "id": "HkZ-78sppm",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "HkeZXIoaTm": {
          "description": "Display",
          "id": "HkeZXIoaTm",
          "label": "INIT",
          "position": {
            "x": 12,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "SkFAnVRpm": {
          "description": "The location on the Y-axis you want to start drawing text to the screen.",
          "id": "SkFAnVRpm",
          "label": "YLoc",
          "position": {
            "x": 10,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SkvChEAam": {
          "description": "The location on the X-axis you want to start drawing text to the screen.",
          "id": "SkvChEAam",
          "label": "XLoc",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "r1QWmIopT7": {
          "id": "r1QWmIopT7",
          "label": "OUT",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-device"
        },
        "ryZQUoTaX": {
          "description": "Completed OK",
          "id": "ryZQUoTaX",
          "label": "OK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        }
      },
      "path": "Storage/bradzilla84/display-text"
    },
    "Storage/bradzilla84/draw-circle": {
      "attachments": [
        {
          "content": "struct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n    emitValue<output_OUT>(ctx, getValue<input_DEV>(ctx));\n        return;}\n\n    // Get a pointer to the `TFT` class instance\n    auto Display = getValue<input_DEV>(ctx);\n    auto ColourFill = getValue<input_ColourFill>(ctx);\n    auto ColourDraw = getValue<input_ColourDraw>(ctx);\n\n    if (!isInputDirty<input_ColourDraw>(ctx)){//Do we want a otline? (is it connected)\n    Display->noStroke();\n    }\n    else\n    {\n    Display->stroke(ColourDraw.Red,ColourDraw.Green,ColourDraw.Blue);\n    }\n\n    if (!isInputDirty<input_ColourFill>(ctx)){//Do we want to Fill? (is it connected)\n    Display->noFill();\n    }\n    else\n    {\n    Display->fill(ColourFill.Red,ColourFill.Green,ColourFill.Blue);\n    }\n\n\n    Display->circle(getValue<input_X>(ctx),getValue<input_Y>(ctx),getValue<input_Rad>(ctx));\n\n    // Pulse that module initialized successfully\n    emitValue<output_OUT>(ctx, Display);\n    emitValue<output_OK>(ctx, 1);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Circle at location, With or Without Fill and Outline.",
      "nodes": {
        "Bkjh-qC6Q": {
          "description": "X Center Position",
          "id": "Bkjh-qC6Q",
          "label": "X",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1bA1-9Cam": {
          "description": "Redraw the display",
          "id": "H1bA1-9Cam",
          "label": "INIT",
          "position": {
            "x": 14,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "HJNRk-cR6m": {
          "description": "Colour to Fill With",
          "id": "HJNRk-cR6m",
          "label": "ColourFill",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-colour"
        },
        "HyG01WqATQ": {
          "description": "From Device Node",
          "id": "HyG01WqATQ",
          "label": "DEV",
          "position": {
            "x": 0,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-tft-device"
        },
        "SkA1bcATm": {
          "id": "SkA1bcATm",
          "label": "OUT",
          "position": {
            "x": 0,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-device"
        },
        "SyYWZqRa7": {
          "description": "Colour to Draw With",
          "id": "SyYWZqRa7",
          "label": "ColourDraw",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-colour"
        },
        "SylAyZ5Aam": {
          "description": "Completed OK",
          "id": "SylAyZ5Aam",
          "label": "OK",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "SylC3WcAam": {
          "description": "Radius of Coicle",
          "id": "SylC3WcAam",
          "label": "Rad",
          "position": {
            "x": 10,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rkXCyZ5CpX": {
          "id": "rkXCyZ5CpX",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "ryChZ9CpX": {
          "description": "X Center Position",
          "id": "ryChZ9CpX",
          "label": "Y",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        }
      },
      "path": "Storage/bradzilla84/draw-circle"
    },
    "Storage/bradzilla84/draw-fillscreen": {
      "attachments": [
        {
          "content": "struct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n    emitValue<output_OUT>(ctx, getValue<input_DEV>(ctx));\n        return;}\n\n    // Get a pointer to the `TFT` class instance\n    auto Display = getValue<input_DEV>(ctx);\n    auto Colour = getValue<input_Colour>(ctx);\n\n    Display->background(Colour.Red,Colour.Green,Colour.Blue);\n\n    // Pulse that module initialized successfully\n    emitValue<output_OUT>(ctx, Display);\n    emitValue<output_OK>(ctx, 1);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Blanck/Fill the display with a Colour.",
      "nodes": {
        "BJdP7DTTX": {
          "id": "BJdP7DTTX",
          "label": "OUT",
          "position": {
            "x": -1,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-device"
        },
        "SJZdwYEnTm": {
          "description": "Completed OK",
          "id": "SJZdwYEnTm",
          "label": "OK",
          "position": {
            "x": 3,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "SyV_DtN26X": {
          "description": "Redraw the display",
          "id": "SyV_DtN26X",
          "label": "INIT",
          "position": {
            "x": 7,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "rJGw7v6am": {
          "description": "From Device Node",
          "id": "rJGw7v6am",
          "label": "DEV",
          "position": {
            "x": -1,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-tft-device"
        },
        "rJQuwKN2aX": {
          "id": "rJQuwKN2aX",
          "position": {
            "x": 0,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "rkwbiv6pm": {
          "description": "Colour to make the Background",
          "id": "rkwbiv6pm",
          "label": "Colour",
          "position": {
            "x": 1,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-colour"
        }
      },
      "path": "Storage/bradzilla84/draw-fillscreen"
    },
    "Storage/bradzilla84/draw-line": {
      "attachments": [
        {
          "content": "struct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n    emitValue<output_OUT>(ctx, getValue<input_DEV>(ctx));\n        return;}\n\n    // Get a pointer to the `TFT` class instance\n    auto Display = getValue<input_DEV>(ctx);\n    auto ColourDraw = getValue<input_ColourDraw>(ctx);\n\n    if (!isInputDirty<input_ColourDraw>(ctx)){//Do we want a otline? (is it connected)\n    Display->noStroke();\n    }\n    else\n    {\n    Display->stroke(ColourDraw.Red,ColourDraw.Green,ColourDraw.Blue);\n    }\n\n\n\n    Display->line(getValue<input_XStart>(ctx),getValue<input_YStart>(ctx),getValue<input_XEnd>(ctx),getValue<input_YEnd>(ctx));\n\n    // Pulse that module initialized successfully\n    emitValue<output_OUT>(ctx, Display);\n    emitValue<output_OK>(ctx, 1);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Line",
      "nodes": {
        "BJ70ZQiA67": {
          "id": "BJ70ZQiA67",
          "label": "OUT",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-device"
        },
        "BJlbmmoAp7": {
          "description": "Y End Position",
          "id": "BJlbmmoAp7",
          "label": "YEnd",
          "position": {
            "x": 12,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1CW7i067": {
          "description": "X Start Position",
          "id": "H1CW7i067",
          "label": "XStart",
          "position": {
            "x": 6,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "Hyg0bXsRaX": {
          "description": "Redraw the display",
          "id": "Hyg0bXsRaX",
          "label": "INIT",
          "position": {
            "x": 14,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "S1GCbXoRa7": {
          "description": "From Device Node",
          "id": "S1GCbXoRa7",
          "label": "DEV",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-device"
        },
        "S1SCZmjCp7": {
          "description": "Completed OK",
          "id": "S1SCZmjCp7",
          "label": "OK",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "SyORbmoCa7": {
          "description": "Y Start Position",
          "id": "SyORbmoCa7",
          "label": "YStart",
          "position": {
            "x": 8,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rkV0-Xj0p7": {
          "description": "Colour to Draw With",
          "id": "rkV0-Xj0p7",
          "label": "ColourDraw",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-colour"
        },
        "rkwA-QiATX": {
          "id": "rkwA-QiATX",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "ryZmXoR67": {
          "description": "X End Position",
          "id": "ryZmXoR67",
          "label": "XEnd",
          "position": {
            "x": 10,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        }
      },
      "path": "Storage/bradzilla84/draw-line"
    },
    "Storage/bradzilla84/draw-point": {
      "attachments": [
        {
          "content": "struct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n    emitValue<output_OUT>(ctx, getValue<input_DEV>(ctx));\n        return;}\n\n    // Get a pointer to the `TFT` class instance\n    auto Display = getValue<input_DEV>(ctx);\n    auto ColourDraw = getValue<input_ColourDraw>(ctx);\n\n    if (!isInputDirty<input_ColourDraw>(ctx)){//Do we want to Colour? (is it connected)\n    Display->noStroke();\n    }\n    else\n    {\n    Display->stroke(ColourDraw.Red,ColourDraw.Green,ColourDraw.Blue);\n    }\n\n    Display->point(getValue<input_X>(ctx),getValue<input_Y>(ctx));\n\n    // Pulse that module initialized successfully\n    emitValue<output_OUT>(ctx, Display);\n    emitValue<output_OK>(ctx, 1);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a single point on the display.",
      "nodes": {
        "H1PyUuqC67": {
          "description": "X Center Position",
          "id": "H1PyUuqC67",
          "label": "Y",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SJIJIO5ATX": {
          "description": "X Center Position",
          "id": "SJIJIO5ATX",
          "label": "X",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SkXJId506m": {
          "id": "SkXJId506m",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "Sy-1Luc0aX": {
          "description": "Redraw the display",
          "id": "Sy-1Luc0aX",
          "label": "INIT",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "rJG1Ld5Cpm": {
          "description": "From Device Node",
          "id": "rJG1Ld5Cpm",
          "label": "DEV",
          "position": {
            "x": 0,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-tft-device"
        },
        "rk1IdqCT7": {
          "id": "rk1IdqCT7",
          "label": "OUT",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-device"
        },
        "ryeJ8d5C6X": {
          "description": "Completed OK",
          "id": "ryeJ8d5C6X",
          "label": "OK",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "ryrJL_5Aa7": {
          "description": "Colour to Draw With",
          "id": "ryrJL_5Aa7",
          "label": "ColourDraw",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-colour"
        }
      },
      "path": "Storage/bradzilla84/draw-point"
    },
    "Storage/bradzilla84/draw-rectangle": {
      "attachments": [
        {
          "content": "struct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n    emitValue<output_OUT>(ctx, getValue<input_DEV>(ctx));\n        return;}\n\n    // Get a pointer to the `TFT` class instance\n    auto Display = getValue<input_DEV>(ctx);\n    auto ColourFill = getValue<input_ColourFill>(ctx);\n    auto ColourDraw = getValue<input_ColourDraw>(ctx);\n\n    if (!isInputDirty<input_ColourDraw>(ctx)){//Do we want a otline? (is it connected)\n    Display->noStroke();\n    }\n    else\n    {\n    Display->stroke(ColourDraw.Red,ColourDraw.Green,ColourDraw.Blue);\n    }\n\n    if (!isInputDirty<input_ColourFill>(ctx)){//Do we want to Fill? (is it connected)\n    Display->noFill();\n    }\n    else\n    {\n    Display->fill(ColourFill.Red,ColourFill.Green,ColourFill.Blue);\n    }\n\n\n    Display->rect(getValue<input_X1>(ctx),getValue<input_Y1>(ctx),getValue<input_Width>(ctx),getValue<input_Height>(ctx));\n\n    // Pulse that module initialized successfully\n    emitValue<output_OUT>(ctx, Display);\n    emitValue<output_OK>(ctx, 1);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Rectangle",
      "nodes": {
        "BJGbj2sAT7": {
          "description": "From Device Node",
          "id": "BJGbj2sAT7",
          "label": "DEV",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-device"
        },
        "BJU-sni0Tm": {
          "id": "BJU-sni0Tm",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "H17Zihi0T7": {
          "id": "H17Zihi0T7",
          "label": "OUT",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-device"
        },
        "S14Wi2oR6X": {
          "description": "Colour to Draw With",
          "id": "S14Wi2oR6X",
          "label": "ColourDraw",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-colour"
        },
        "S1Fbs3sApm": {
          "description": "Height (on the Y axis)",
          "id": "S1Fbs3sApm",
          "label": "Height",
          "position": {
            "x": 12,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SJrbo2sRpm": {
          "description": "Completed OK",
          "id": "SJrbo2sRpm",
          "label": "OK",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "SJuZonsR6Q": {
          "description": "Width(on the X axis)",
          "id": "SJuZonsR6Q",
          "label": "Width",
          "position": {
            "x": 10,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SkPWsniApX": {
          "description": "Y Start Position",
          "id": "SkPWsniApX",
          "label": "Y1",
          "position": {
            "x": 8,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "r1-o3oRpm": {
          "description": "X Start Position",
          "id": "r1-o3oRpm",
          "label": "X1",
          "position": {
            "x": 6,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rJ-Zj2jRpQ": {
          "description": "Colour to Fill With",
          "id": "rJ-Zj2jRpQ",
          "label": "ColourFill",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-colour"
        },
        "rylZj2jC6Q": {
          "description": "Redraw the display",
          "id": "rylZj2jC6Q",
          "label": "INIT",
          "position": {
            "x": 14,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        }
      },
      "path": "Storage/bradzilla84/draw-rectangle"
    },
    "Storage/bradzilla84/draw-triangle": {
      "attachments": [
        {
          "content": "struct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n    emitValue<output_OUT>(ctx, getValue<input_DEV>(ctx));\n        return;}\n\n    // Get a pointer to the `TFT` class instance\n    auto Display = getValue<input_DEV>(ctx);\n    auto ColourFill = getValue<input_ColourFill>(ctx);\n    auto ColourDraw = getValue<input_ColourDraw>(ctx);\n\n    if (!isInputDirty<input_ColourDraw>(ctx)){//Do we want a otline? (is it connected)\n    Display->noStroke();\n    }\n    else\n    {\n    Display->stroke(ColourDraw.Red,ColourDraw.Green,ColourDraw.Blue);\n    }\n\n    if (!isInputDirty<input_ColourFill>(ctx)){//Do we want to Fill? (is it connected)\n    Display->noFill();\n    }\n    else\n    {\n    Display->fill(ColourFill.Red,ColourFill.Green,ColourFill.Blue);\n    }\n\n\n    Display->triangle(getValue<input_X1>(ctx),getValue<input_Y1>(ctx),getValue<input_X2>(ctx),getValue<input_Y2>(ctx),getValue<input_X3>(ctx),getValue<input_Y3>(ctx));\n\n    // Pulse that module initialized successfully\n    emitValue<output_OUT>(ctx, Display);\n    emitValue<output_OK>(ctx, 1);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Triangle",
      "nodes": {
        "BJgDKBo06m": {
          "description": "Second Point Y",
          "id": "BJgDKBo06m",
          "label": "Y2",
          "position": {
            "x": 12,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "BJmquSjA67": {
          "id": "BJmquSjA67",
          "label": "OUT",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-device"
        },
        "ByGqdHoRpQ": {
          "description": "From Device Node",
          "id": "ByGqdHoRpQ",
          "label": "DEV",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-device"
        },
        "H1Z5uBsA6Q": {
          "description": "Colour to Fill With",
          "id": "H1Z5uBsA6Q",
          "label": "ColourFill",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-colour"
        },
        "HJ_9urjAT7": {
          "description": "First Point Y",
          "id": "HJ_9urjAT7",
          "label": "Y1",
          "position": {
            "x": 8,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "Skwc_riRT7": {
          "id": "Skwc_riRT7",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "SyfvKSs06m": {
          "description": "Third Point Y",
          "id": "SyfvKSs06m",
          "label": "Y3",
          "position": {
            "x": 16,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "r1curjRpX": {
          "description": "First Point X",
          "id": "r1curjRpX",
          "label": "X1",
          "position": {
            "x": 6,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "r1g5dHjAam": {
          "description": "Redraw the display",
          "id": "r1g5dHjAam",
          "label": "INIT",
          "position": {
            "x": 18,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "r1rcdSsAaQ": {
          "description": "Completed OK",
          "id": "r1rcdSsAaQ",
          "label": "OK",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "rJvFHoCa7": {
          "description": "Second Point X",
          "id": "rJvFHoCa7",
          "label": "X2",
          "position": {
            "x": 10,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rkWPtSsRaQ": {
          "description": "Third Point X",
          "id": "rkWPtSsRaQ",
          "label": "X3",
          "position": {
            "x": 14,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "ry4quHjAaX": {
          "description": "Colour to Draw With",
          "id": "ry4quHjAaX",
          "label": "ColourDraw",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-colour"
        }
      },
      "path": "Storage/bradzilla84/draw-triangle"
    },
    "Storage/bradzilla84/example": {
      "links": {
        "B13lNoApQ": {
          "id": "B13lNoApQ",
          "input": {
            "nodeId": "S1Oe4oCTQ",
            "pinKey": "Hyg0bXsRaX"
          },
          "output": {
            "nodeId": "H1qcu9CpX",
            "pinKey": "ryeJ8d5C6X"
          }
        },
        "B1PpucRT7": {
          "id": "B1PpucRT7",
          "input": {
            "nodeId": "H1qcu9CpX",
            "pinKey": "rJG1Ld5Cpm"
          },
          "output": {
            "nodeId": "SyTZNq067",
            "pinKey": "SkA1bcATm"
          }
        },
        "BJshHcRTm": {
          "id": "BJshHcRTm",
          "input": {
            "nodeId": "B1f7Nc0pX",
            "pinKey": "rJa2wvp6Q"
          },
          "output": {
            "nodeId": "B17nH9AaX",
            "pinKey": "HkyxURuSPyW"
          }
        },
        "BkM9vi06m": {
          "id": "BkM9vi06m",
          "input": {
            "nodeId": "HJ-ODsApm",
            "pinKey": "ry4quHjAaX"
          },
          "output": {
            "nodeId": "BkS2ZYR6m",
            "pinKey": "H1S2wD6pX"
          }
        },
        "BkiAS5Rpm": {
          "id": "BkiAS5Rpm",
          "input": {
            "nodeId": "SyTZNq067",
            "pinKey": "H1bA1-9Cam"
          },
          "output": {
            "nodeId": "HkDTScAam",
            "pinKey": "HJU8CE2lW"
          }
        },
        "Bkn2B9R6Q": {
          "id": "Bkn2B9R6Q",
          "input": {
            "nodeId": "B1f7Nc0pX",
            "pinKey": "BJypwwa6X"
          },
          "output": {
            "nodeId": "B17nH9AaX",
            "pinKey": "HkyxURuSPyW"
          }
        },
        "H1MHUq0pm": {
          "id": "H1MHUq0pm",
          "input": {
            "nodeId": "SyTZNq067",
            "pinKey": "HJNRk-cR6m"
          },
          "output": {
            "nodeId": "SkPm_waaX",
            "pinKey": "H1S2wD6pX"
          }
        },
        "H1f6piR67": {
          "id": "H1f6piR67",
          "input": {
            "nodeId": "rkJp2s0aQ",
            "pinKey": "rJ-Zj2jRpQ"
          },
          "output": {
            "nodeId": "BkS2ZYR6m",
            "pinKey": "H1S2wD6pX"
          }
        },
        "HJexYc0pQ": {
          "id": "HJexYc0pQ",
          "input": {
            "nodeId": "H1qcu9CpX",
            "pinKey": "ryrJL_5Aa7"
          },
          "output": {
            "nodeId": "BkS2ZYR6m",
            "pinKey": "H1S2wD6pX"
          }
        },
        "Hy1tPsAT7": {
          "id": "Hy1tPsAT7",
          "input": {
            "nodeId": "HJ-ODsApm",
            "pinKey": "r1g5dHjAam"
          },
          "output": {
            "nodeId": "S1Oe4oCTQ",
            "pinKey": "S1SCZmjCp7"
          }
        },
        "Hy3IBnR6X": {
          "id": "Hy3IBnR6X",
          "input": {
            "nodeId": "SyoAbnC6m",
            "pinKey": "HJz-XIja6X"
          },
          "output": {
            "nodeId": "rkJp2s0aQ",
            "pinKey": "H17Zihi0T7"
          }
        },
        "HyGvBnA67": {
          "id": "HyGvBnA67",
          "input": {
            "nodeId": "SyoAbnC6m",
            "pinKey": "HkeZXIoaTm"
          },
          "output": {
            "nodeId": "rkJp2s0aQ",
            "pinKey": "SJrbo2sRpm"
          }
        },
        "SJ2dDsCpm": {
          "id": "SJ2dDsCpm",
          "input": {
            "nodeId": "HJ-ODsApm",
            "pinKey": "ByGqdHoRpQ"
          },
          "output": {
            "nodeId": "S1Oe4oCTQ",
            "pinKey": "BJ70ZQiA67"
          }
        },
        "SJet8cCaQ": {
          "id": "SJet8cCaQ",
          "input": {
            "nodeId": "SyTZNq067",
            "pinKey": "SyYWZqRa7"
          },
          "output": {
            "nodeId": "B1f7Nc0pX",
            "pinKey": "H1S2wD6pX"
          }
        },
        "SJkGV506m": {
          "id": "SJkGV506m",
          "input": {
            "nodeId": "SyTZNq067",
            "pinKey": "HyG01WqATQ"
          },
          "output": {
            "nodeId": "BkVEQwaaX",
            "pinKey": "BJdP7DTTX"
          }
        },
        "SJlir30a7": {
          "id": "SJlir30a7",
          "input": {
            "nodeId": "SyoAbnC6m",
            "pinKey": "HJV-XUjaTQ"
          },
          "output": {
            "nodeId": "HyhqHn0Tm",
            "pinKey": "H1S2wD6pX"
          }
        },
        "SJo0enC6X": {
          "id": "SJo0enC6X",
          "input": {
            "nodeId": "rkJp2s0aQ",
            "pinKey": "rylZj2jC6Q"
          },
          "output": {
            "nodeId": "HJ-ODsApm",
            "pinKey": "r1rcdSsAaQ"
          }
        },
        "SJuyMo6pm": {
          "id": "SJuyMo6pm",
          "input": {
            "nodeId": "BkVEQwaaX",
            "pinKey": "rkwbiv6pm"
          },
          "output": {
            "nodeId": "SkPm_waaX",
            "pinKey": "H1S2wD6pX"
          }
        },
        "SkFVVi0aX": {
          "id": "SkFVVi0aX",
          "input": {
            "nodeId": "S1Oe4oCTQ",
            "pinKey": "rkV0-Xj0p7"
          },
          "output": {
            "nodeId": "BkS2ZYR6m",
            "pinKey": "H1S2wD6pX"
          }
        },
        "Sy8DZhAam": {
          "id": "Sy8DZhAam",
          "input": {
            "nodeId": "rkJp2s0aQ",
            "pinKey": "S14Wi2oR6X"
          },
          "output": {
            "nodeId": "B1f7Nc0pX",
            "pinKey": "H1S2wD6pX"
          }
        },
        "r1B1fo6a7": {
          "id": "r1B1fo6a7",
          "input": {
            "nodeId": "BkVEQwaaX",
            "pinKey": "rJGw7v6am"
          },
          "output": {
            "nodeId": "r16IwV2TQ",
            "pinKey": "rkpW8En6Q"
          }
        },
        "r1Kprq0am": {
          "id": "r1Kprq0am",
          "input": {
            "nodeId": "B17nH9AaX",
            "pinKey": "ryTIROHwkW"
          },
          "output": {
            "nodeId": "HkDTScAam",
            "pinKey": "HJU8CE2lW"
          }
        },
        "r1_TOq0pQ": {
          "id": "r1_TOq0pQ",
          "input": {
            "nodeId": "H1qcu9CpX",
            "pinKey": "Sy-1Luc0aX"
          },
          "output": {
            "nodeId": "SyTZNq067",
            "pinKey": "SylAyZ5Aam"
          }
        },
        "r1z2soATQ": {
          "id": "r1z2soATQ",
          "input": {
            "nodeId": "HJ-ODsApm",
            "pinKey": "H1Z5uBsA6Q"
          },
          "output": {
            "nodeId": "B1f7Nc0pX",
            "pinKey": "H1S2wD6pX"
          }
        },
        "rJX6kcR6Q": {
          "id": "rJX6kcR6Q",
          "input": {
            "nodeId": "BkVEQwaaX",
            "pinKey": "SyV_DtN26X"
          },
          "output": {
            "nodeId": "B1xayq0aQ",
            "pinKey": "ryVmUAOrvkb"
          }
        },
        "rJbansCaX": {
          "id": "rJbansCaX",
          "input": {
            "nodeId": "rkJp2s0aQ",
            "pinKey": "BJGbj2sAT7"
          },
          "output": {
            "nodeId": "HJ-ODsApm",
            "pinKey": "BJmquSjA67"
          }
        },
        "rkilNo0aQ": {
          "id": "rkilNo0aQ",
          "input": {
            "nodeId": "S1Oe4oCTQ",
            "pinKey": "S1GCbXoRa7"
          },
          "output": {
            "nodeId": "H1qcu9CpX",
            "pinKey": "rk1IdqCT7"
          }
        }
      },
      "nodes": {
        "B17nH9AaX": {
          "id": "B17nH9AaX",
          "position": {
            "x": 18,
            "y": 4,
            "units": "slots"
          },
          "type": "xod/core/flip-flop"
        },
        "B1f7Nc0pX": {
          "boundLiterals": {
            "BJypwwa6X": "1",
            "rJa2wvp6Q": "1",
            "rkh2PD6p7": "1"
          },
          "id": "B1f7Nc0pX",
          "position": {
            "x": 17,
            "y": 5,
            "units": "slots"
          },
          "type": "@/colour"
        },
        "B1xayq0aQ": {
          "id": "B1xayq0aQ",
          "position": {
            "x": 3,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/boot"
        },
        "BkS2ZYR6m": {
          "boundLiterals": {
            "BJypwwa6X": "0",
            "rJa2wvp6Q": "0.5",
            "rkh2PD6p7": "1"
          },
          "id": "BkS2ZYR6m",
          "position": {
            "x": 11,
            "y": 4,
            "units": "slots"
          },
          "type": "@/colour"
        },
        "BkVEQwaaX": {
          "boundLiterals": {
            "SyV_DtN26X": "Never"
          },
          "id": "BkVEQwaaX",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "@/draw-fillscreen"
        },
        "H1qcu9CpX": {
          "boundLiterals": {
            "H1PyUuqC67": "30",
            "SJIJIO5ATX": "50"
          },
          "id": "H1qcu9CpX",
          "position": {
            "x": 1,
            "y": 4,
            "units": "slots"
          },
          "type": "@/draw-point"
        },
        "HJ-ODsApm": {
          "boundLiterals": {
            "BJgDKBo06m": "10",
            "HJ_9urjAT7": "10",
            "SJEvtHo06m": "100",
            "SyfvKSs06m": "90",
            "r1curjRpX": "100",
            "rJvFHoCa7": "120",
            "rkWPtSsRaQ": "106",
            "ryXvtrsC6Q": "100"
          },
          "id": "HJ-ODsApm",
          "position": {
            "x": 1,
            "y": 6,
            "units": "slots"
          },
          "type": "@/draw-triangle"
        },
        "HkDTScAam": {
          "id": "HkDTScAam",
          "position": {
            "x": 19,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/core/clock"
        },
        "HyhqHn0Tm": {
          "boundLiterals": {
            "BJypwwa6X": "0",
            "rJa2wvp6Q": "1",
            "rkh2PD6p7": "0"
          },
          "id": "HyhqHn0Tm",
          "position": {
            "x": 10,
            "y": 8,
            "units": "slots"
          },
          "type": "@/colour"
        },
        "S1Oe4oCTQ": {
          "boundLiterals": {
            "BJlbmmoAp7": "128",
            "ryZmXoR67": "128"
          },
          "id": "S1Oe4oCTQ",
          "position": {
            "x": 1,
            "y": 5,
            "units": "slots"
          },
          "type": "@/draw-line"
        },
        "SkPm_waaX": {
          "boundLiterals": {
            "BJypwwa6X": "1",
            "rJa2wvp6Q": "0",
            "rkh2PD6p7": "0"
          },
          "id": "SkPm_waaX",
          "position": {
            "x": 6,
            "y": 1,
            "units": "slots"
          },
          "type": "@/colour"
        },
        "SyTZNq067": {
          "boundLiterals": {
            "Bkjh-qC6Q": "64",
            "H1bA1-9Cam": "Continuously",
            "SylC3WcAam": "20",
            "ryChZ9CpX": "64"
          },
          "id": "SyTZNq067",
          "position": {
            "x": 1,
            "y": 3,
            "units": "slots"
          },
          "type": "@/draw-circle"
        },
        "SyoAbnC6m": {
          "boundLiterals": {
            "BkE48jpam": "\"Hello World.\"",
            "HJec2ECam": "1",
            "SkFAnVRpm": "10",
            "SkvChEAam": "10"
          },
          "id": "SyoAbnC6m",
          "position": {
            "x": 1,
            "y": 8,
            "units": "slots"
          },
          "type": "@/display-text"
        },
        "r16IwV2TQ": {
          "id": "r16IwV2TQ",
          "position": {
            "x": 1,
            "y": 0,
            "units": "slots"
          },
          "type": "@/tft-device"
        },
        "rkJp2s0aQ": {
          "boundLiterals": {
            "S1Fbs3sApm": "15",
            "SJuZonsR6Q": "10",
            "SkPWsniApX": "100",
            "r1-o3oRpm": "10"
          },
          "id": "rkJp2s0aQ",
          "position": {
            "x": 1,
            "y": 7,
            "units": "slots"
          },
          "type": "@/draw-rectangle"
        }
      },
      "path": "Storage/bradzilla84/example"
    },
    "Storage/bradzilla84/example-map-grid": {
      "links": {
        "BJDpaJe0Q": {
          "id": "BJDpaJe0Q",
          "input": {
            "nodeId": "rJOQIyx0m",
            "pinKey": "S1XXIZ3107"
          },
          "output": {
            "nodeId": "SJoCuj10Q",
            "pinKey": "B1KNDoJAQ"
          }
        },
        "BJXSP1eAX": {
          "id": "BJXSP1eAX",
          "input": {
            "nodeId": "rJOQIyx0m",
            "pinKey": "Bk1qlRJ0X"
          },
          "output": {
            "nodeId": "HyX5qnyAX",
            "pinKey": "H1gFK31RQ"
          }
        },
        "ByXWw1g0m": {
          "id": "ByXWw1g0m",
          "input": {
            "nodeId": "SkY1tokAX",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "HyX5qnyAX",
            "pinKey": "H1gFK31RQ"
          }
        },
        "H1CNDyxAm": {
          "id": "H1CNDyxAm",
          "input": {
            "nodeId": "HyX5qnyAX",
            "pinKey": "Hkpi9hJRX"
          },
          "output": {
            "nodeId": "SJoCuj10Q",
            "pinKey": "S1W-a8jkAQ"
          }
        },
        "H1rWPyxCX": {
          "id": "H1rWPyxCX",
          "input": {
            "nodeId": "HkTyts1Rm",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "HyX5qnyAX",
            "pinKey": "HyftYhkRX"
          }
        },
        "HJuZw1lRm": {
          "id": "HJuZw1lRm",
          "input": {
            "nodeId": "r1eYM8yeRQ",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "rJOQIyx0m",
            "pinKey": "ByYRVkxCQ"
          }
        },
        "HkDWPJeRm": {
          "id": "HkDWPJeRm",
          "input": {
            "nodeId": "HkYMLklRX",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "rJOQIyx0m",
            "pinKey": "H1XLW3yRX"
          }
        },
        "S1SrvJlAX": {
          "id": "S1SrvJlAX",
          "input": {
            "nodeId": "rJOQIyx0m",
            "pinKey": "Skl15e0kAQ"
          },
          "output": {
            "nodeId": "HyX5qnyAX",
            "pinKey": "HyftYhkRX"
          }
        },
        "SJ2YtgeR7": {
          "id": "SJ2YtgeR7",
          "input": {
            "nodeId": "SJoCuj10Q",
            "pinKey": "B1N-pUsJAm"
          },
          "output": {
            "nodeId": "SJyJFjJ0X",
            "pinKey": "BJxewIjy0Q"
          }
        },
        "Sy54P1eAX": {
          "id": "Sy54P1eAX",
          "input": {
            "nodeId": "HyX5qnyAX",
            "pinKey": "B1si52107"
          },
          "output": {
            "nodeId": "SJoCuj10Q",
            "pinKey": "S1bpIiJAQ"
          }
        },
        "SytWDJeRX": {
          "id": "SytWDJeRX",
          "input": {
            "nodeId": "B1ZFMIylRQ",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "rJOQIyx0m",
            "pinKey": "B19CN1l0X"
          }
        },
        "r18GPkl07": {
          "id": "r18GPkl07",
          "input": {
            "nodeId": "r1eaytsyR7",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "SJoCuj10Q",
            "pinKey": "SJlWaIjkCX"
          }
        },
        "rJTGP1x0Q": {
          "id": "rJTGP1x0Q",
          "input": {
            "nodeId": "rJxYkphyC7",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "SJoCuj10Q",
            "pinKey": "S1W-a8jkAQ"
          }
        },
        "rksMwJe0Q": {
          "id": "rksMwJe0Q",
          "input": {
            "nodeId": "ryYkphkC7",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "SJoCuj10Q",
            "pinKey": "S1bpIiJAQ"
          }
        }
      },
      "nodes": {
        "B1ZFMIylRQ": {
          "id": "B1ZFMIylRQ",
          "position": {
            "x": 16,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "HkTyts1Rm": {
          "id": "HkTyts1Rm",
          "position": {
            "x": 4,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "HkYMLklRX": {
          "id": "HkYMLklRX",
          "position": {
            "x": 14,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "HyX5qnyAX": {
          "boundLiterals": {
            "B1mwO2JA7": "115",
            "BJLLdnJ07": "115",
            "By1V_n1AQ": "940"
          },
          "id": "HyX5qnyAX",
          "position": {
            "x": 3,
            "y": -3,
            "units": "slots"
          },
          "type": "@/touch-map-to-display"
        },
        "SJoCuj10Q": {
          "id": "SJoCuj10Q",
          "position": {
            "x": 10,
            "y": -5,
            "units": "slots"
          },
          "type": "@/touch-detect"
        },
        "SJyJFjJ0X": {
          "id": "SJyJFjJ0X",
          "position": {
            "x": 10,
            "y": -6,
            "units": "slots"
          },
          "type": "@/touch-device"
        },
        "SkY1tokAX": {
          "id": "SkY1tokAX",
          "position": {
            "x": 3,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "r1eYM8yeRQ": {
          "id": "r1eYM8yeRQ",
          "position": {
            "x": 15,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "r1eaytsyR7": {
          "id": "r1eaytsyR7",
          "position": {
            "x": 12,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "rJOQIyx0m": {
          "boundLiterals": {
            "BJSbD6JAX": "3",
            "H1MWPa1AQ": "4"
          },
          "id": "rJOQIyx0m",
          "position": {
            "x": 14,
            "y": -3,
            "units": "slots"
          },
          "type": "@/touch-detect-grid"
        },
        "rJxYkphyC7": {
          "id": "rJxYkphyC7",
          "position": {
            "x": 11,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "ryYkphkC7": {
          "id": "ryYkphkC7",
          "position": {
            "x": 10,
            "y": -2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        }
      },
      "path": "Storage/bradzilla84/example-map-grid"
    },
    "Storage/bradzilla84/example-serial-plotter": {
      "comments": {
        "B19yLrHeE": {
          "content": "Upload with debug on then exit debug and open the Arduino IDE Serial Plotter",
          "id": "B19yLrHeE",
          "position": {
            "x": 11,
            "y": 1,
            "units": "slots"
          },
          "size": {
            "height": 2,
            "width": 7,
            "units": "slots"
          }
        }
      },
      "links": {
        "BkG6wHBlE": {
          "id": "BkG6wHBlE",
          "input": {
            "nodeId": "Sk1g8HSeV",
            "pinKey": "S1FBvrSlN"
          },
          "output": {
            "nodeId": "SyP3wHHlN",
            "pinKey": "r1H_oipZb"
          }
        },
        "H1KfdHBxE": {
          "id": "H1KfdHBxE",
          "input": {
            "nodeId": "HJe21_rBg4",
            "pinKey": "BJlHojaWZ"
          },
          "output": {
            "nodeId": "ryxMM_SHlN",
            "pinKey": "B1x2RV3eZ"
          }
        },
        "S1dM_rBlV": {
          "id": "S1dM_rBlV",
          "input": {
            "nodeId": "S1x6wrBl4",
            "pinKey": "BJlHojaWZ"
          },
          "output": {
            "nodeId": "rkMMuSSxV",
            "pinKey": "B1x2RV3eZ"
          }
        },
        "SJxe_SrlE": {
          "id": "SJxe_SrlE",
          "input": {
            "nodeId": "Sk1g8HSeV",
            "pinKey": "BJpEPSSxV-$1"
          },
          "output": {
            "nodeId": "HJe21_rBg4",
            "pinKey": "r1H_oipZb"
          }
        },
        "SkMl_BrlV": {
          "id": "SkMl_BrlV",
          "input": {
            "nodeId": "Sk1g8HSeV",
            "pinKey": "BJpEPSSxV-$2"
          },
          "output": {
            "nodeId": "BynkdHrxN",
            "pinKey": "r1H_oipZb"
          }
        },
        "r1ofOrrxV": {
          "id": "r1ofOrrxV",
          "input": {
            "nodeId": "BynkdHrxN",
            "pinKey": "BJlHojaWZ"
          },
          "output": {
            "nodeId": "HkZzM_SBeV",
            "pinKey": "B1x2RV3eZ"
          }
        },
        "rJyZuHSxE": {
          "id": "rJyZuHSxE",
          "input": {
            "nodeId": "SyP3wHHlN",
            "pinKey": "BJlHojaWZ"
          },
          "output": {
            "nodeId": "HJFg_HBxN",
            "pinKey": "B1x2RV3eZ"
          }
        },
        "rkXpwBSeN": {
          "id": "rkXpwBSeN",
          "input": {
            "nodeId": "Sk1g8HSeV",
            "pinKey": "BJpEPSSxV"
          },
          "output": {
            "nodeId": "S1x6wrBl4",
            "pinKey": "r1H_oipZb"
          }
        },
        "rksCDSrgN": {
          "id": "rksCDSrgN",
          "input": {
            "nodeId": "ryt0wBSxE",
            "pinKey": "HJdO9HwJ-"
          },
          "output": {
            "nodeId": "Sk1g8HSeV",
            "pinKey": "HyuYIHBxV"
          }
        }
      },
      "nodes": {
        "BynkdHrxN": {
          "id": "BynkdHrxN",
          "position": {
            "x": 8,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/format-number"
        },
        "HJFg_HBxN": {
          "boundLiterals": {
            "B1x2RV3eZ": "1"
          },
          "id": "HJFg_HBxN",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/core/constant-number"
        },
        "HJe21_rBg4": {
          "id": "HJe21_rBg4",
          "position": {
            "x": 6,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/format-number"
        },
        "HkZzM_SBeV": {
          "boundLiterals": {
            "B1x2RV3eZ": "4"
          },
          "id": "HkZzM_SBeV",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/core/constant-number"
        },
        "S1x6wrBl4": {
          "id": "S1x6wrBl4",
          "position": {
            "x": 4,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/format-number"
        },
        "Sk1g8HSeV": {
          "arityLevel": 3,
          "id": "Sk1g8HSeV",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "@/arduino-serial-plotter"
        },
        "SyP3wHHlN": {
          "id": "SyP3wHHlN",
          "position": {
            "x": 2,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/format-number"
        },
        "rkMMuSSxV": {
          "boundLiterals": {
            "B1x2RV3eZ": "2"
          },
          "id": "rkMMuSSxV",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/core/constant-number"
        },
        "ryt0wBSxE": {
          "boundLiterals": {
            "S1n95SDJb": "Continuously"
          },
          "id": "ryt0wBSxE",
          "position": {
            "x": 2,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/core/console-log"
        },
        "ryxMM_SHlN": {
          "boundLiterals": {
            "B1x2RV3eZ": "3"
          },
          "id": "ryxMM_SHlN",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/core/constant-number"
        }
      },
      "path": "Storage/bradzilla84/example-serial-plotter"
    },
    "Storage/bradzilla84/example1": {
      "links": {
        "B14MNk_1V": {
          "id": "B14MNk_1V",
          "input": {
            "nodeId": "Byjf7yOJN",
            "pinKey": "S1wUtrCvkV"
          },
          "output": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "B1KU7AL1N": {
          "id": "B1KU7AL1N",
          "input": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "ByMhWlPFRm"
          },
          "output": {
            "nodeId": "Bk5BXAIyV",
            "pinKey": "S1M3cEBJE"
          }
        },
        "B1pYl1gk4": {
          "id": "B1pYl1gk4",
          "input": {
            "nodeId": "SksNkRy14",
            "pinKey": "BkeKcj6ZZ-$2"
          },
          "output": {
            "nodeId": "B1S_lkg1N",
            "pinKey": "Hk2bcGVDm"
          }
        },
        "BJAfmy_JE": {
          "id": "BJAfmy_JE",
          "input": {
            "nodeId": "Byjf7yOJN",
            "pinKey": "rJeLtHAD1N"
          },
          "output": {
            "nodeId": "r1sHVCPyN",
            "pinKey": "SyDKj7RvkV"
          }
        },
        "BJFulk1JV": {
          "id": "BJFulk1JV",
          "input": {
            "nodeId": "HyvTe9ARQ",
            "pinKey": "HkbKHxqCR7"
          },
          "output": {
            "nodeId": "HkfSggXnm",
            "pinKey": "ryKQrXfh7"
          }
        },
        "BJLF4AwkE": {
          "id": "BJLF4AwkE",
          "input": {
            "nodeId": "BkrEVRwJE",
            "pinKey": "r1OtomADyN"
          },
          "output": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "BJnI7RLyV": {
          "id": "BJnI7RLyV",
          "input": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "B13-lPKCQ"
          },
          "output": {
            "nodeId": "Bk5BXAIyV",
            "pinKey": "ryD2qNryV"
          }
        },
        "BJpjfyyJE": {
          "id": "BJpjfyyJE",
          "input": {
            "nodeId": "rJuoGyJ1N",
            "pinKey": "H1NDmwmn7"
          },
          "output": {
            "nodeId": "BJN8jF0A7",
            "pinKey": "H1bbNuaCQ"
          }
        },
        "BkzDe_aAm": {
          "id": "BkzDe_aAm",
          "input": {
            "nodeId": "BJJPlupC7",
            "pinKey": "B1si52107"
          },
          "output": {
            "nodeId": "rJLiiDpCm",
            "pinKey": "S1bpIiJAQ"
          }
        },
        "By7QWJJkV": {
          "id": "By7QWJJkV",
          "input": {
            "nodeId": "BJN8jF0A7",
            "pinKey": "HkLXiKRCX"
          },
          "output": {
            "nodeId": "HyvTe9ARQ",
            "pinKey": "Hyq8-9CAX"
          }
        },
        "ByQwlupAm": {
          "id": "ByQwlupAm",
          "input": {
            "nodeId": "BJJPlupC7",
            "pinKey": "Hkpi9hJRX"
          },
          "output": {
            "nodeId": "rJLiiDpCm",
            "pinKey": "S1W-a8jkAQ"
          }
        },
        "BynKeJxkV": {
          "id": "BynKeJxkV",
          "input": {
            "nodeId": "SksNkRy14",
            "pinKey": "BkeKcj6ZZ"
          },
          "output": {
            "nodeId": "ryovlyxJN",
            "pinKey": "Hk2bcGVDm"
          }
        },
        "BywVVRPkE": {
          "id": "BywVVRPkE",
          "input": {
            "nodeId": "BkrEVRwJE",
            "pinKey": "HkrFjm0PJN"
          },
          "output": {
            "nodeId": "BJh0z0wyV",
            "pinKey": "BkzZNGRDyE"
          }
        },
        "HJ-kPK1Ok4": {
          "id": "HJ-kPK1Ok4",
          "input": {
            "nodeId": "H1xkPtJO1V",
            "pinKey": "ByMhWlPFRm"
          },
          "output": {
            "nodeId": "rkkvtkukE",
            "pinKey": "S1M3cEBJE"
          }
        },
        "HJvwYyu14": {
          "id": "HJvwYyu14",
          "input": {
            "nodeId": "SyVA6Ty1N",
            "pinKey": "SJFX468kE"
          },
          "output": {
            "nodeId": "H1xkPtJO1V",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "Hk1aGJyyE": {
          "id": "Hk1aGJyyE",
          "input": {
            "nodeId": "rJuoGyJ1N",
            "pinKey": "ByPYqYbTX"
          },
          "output": {
            "nodeId": "BJJPlupC7",
            "pinKey": "H1gFK31RQ"
          }
        },
        "Hk4P1CJ1E": {
          "id": "Hk4P1CJ1E",
          "input": {
            "nodeId": "SyVA6Ty1N",
            "pinKey": "HkRLX6JyE"
          },
          "output": {
            "nodeId": "SksNkRy14",
            "pinKey": "rksccsp-W"
          }
        },
        "Hkgpzy1kV": {
          "id": "Hkgpzy1kV",
          "input": {
            "nodeId": "rJuoGyJ1N",
            "pinKey": "B1Jc9KbpX"
          },
          "output": {
            "nodeId": "BJJPlupC7",
            "pinKey": "HyftYhkRX"
          }
        },
        "HyS1mAvkN": {
          "id": "HyS1mAvkN",
          "input": {
            "nodeId": "BJh0z0wyV",
            "pinKey": "HJ_bEM0D1V"
          },
          "output": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "HyjUmCIJN": {
          "id": "HyjUmCIJN",
          "input": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "BkbhWlwKCm"
          },
          "output": {
            "nodeId": "Bk5BXAIyV",
            "pinKey": "ryS2c4rkV"
          }
        },
        "S12KEAP1E": {
          "id": "S12KEAP1E",
          "input": {
            "nodeId": "BkrEVRwJE",
            "pinKey": "ryWFjXRDy4"
          },
          "output": {
            "nodeId": "BJh0z0wyV",
            "pinKey": "rkvZVfCvkV"
          }
        },
        "S1CZ41dkE": {
          "id": "S1CZ41dkE",
          "input": {
            "nodeId": "HJ5-VJ_kV",
            "pinKey": "BJ-KY7y_yE"
          },
          "output": {
            "nodeId": "Byjf7yOJN",
            "pinKey": "BJ8LtBADJ4"
          }
        },
        "SJBDK1_1E": {
          "id": "SJBDK1_1E",
          "input": {
            "nodeId": "rJuoGyJ1N",
            "pinKey": "rJvI4aUkV"
          },
          "output": {
            "nodeId": "H1xkPtJO1V",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "SJFmXJky4": {
          "id": "SJFmXJky4",
          "input": {
            "nodeId": "rJuoGyJ1N",
            "pinKey": "BkZfcjEhQ"
          },
          "output": {
            "nodeId": "rJLiiDpCm",
            "pinKey": "B1KNDoJAQ"
          }
        },
        "SJqdxkkkV": {
          "id": "SJqdxkkkV",
          "input": {
            "nodeId": "BJN8jF0A7",
            "pinKey": "HkybN_TA7"
          },
          "output": {
            "nodeId": "HyvTe9ARQ",
            "pinKey": "HJtHxqARm"
          }
        },
        "SkYKekeyN": {
          "id": "SkYKekeyN",
          "input": {
            "nodeId": "ryovlyxJN",
            "pinKey": "H1DWqMVw7"
          },
          "output": {
            "nodeId": "BJJPlupC7",
            "pinKey": "H1gFK31RQ"
          }
        },
        "Sy51lCJJ4": {
          "id": "Sy51lCJJ4",
          "input": {
            "nodeId": "SyVA6Ty1N",
            "pinKey": "BkXE47pJyN"
          },
          "output": {
            "nodeId": "rJLiiDpCm",
            "pinKey": "B1KNDoJAQ"
          }
        },
        "SyRhowpRm": {
          "id": "SyRhowpRm",
          "input": {
            "nodeId": "rJLiiDpCm",
            "pinKey": "B1N-pUsJAm"
          },
          "output": {
            "nodeId": "r1xjjwTC7",
            "pinKey": "BJxewIjy0Q"
          }
        },
        "SyRtVRP1V": {
          "id": "SyRtVRP1V",
          "input": {
            "nodeId": "r1sHVCPyN",
            "pinKey": "ryWFjXRDy4"
          },
          "output": {
            "nodeId": "BkrEVRwJE",
            "pinKey": "SyDKj7RvkV"
          }
        },
        "Sylw_y_JV": {
          "id": "Sylw_y_JV",
          "input": {
            "nodeId": "BJh0z0wyV",
            "pinKey": "BkSZEM0D1V"
          },
          "output": {
            "nodeId": "BJN8jF0A7",
            "pinKey": "H1bbNuaCQ"
          }
        },
        "SysFgkeJN": {
          "id": "SysFgkeJN",
          "input": {
            "nodeId": "B1S_lkg1N",
            "pinKey": "H1DWqMVw7"
          },
          "output": {
            "nodeId": "BJJPlupC7",
            "pinKey": "HyftYhkRX"
          }
        },
        "r12z71_kN": {
          "id": "r12z71_kN",
          "input": {
            "nodeId": "Byjf7yOJN",
            "pinKey": "B148YSAv1V"
          },
          "output": {
            "nodeId": "r1sHVCPyN",
            "pinKey": "rkzYiQCw1E"
          }
        },
        "r1Dgqku1V": {
          "id": "r1Dgqku1V",
          "input": {
            "nodeId": "HyvTe9ARQ",
            "pinKey": "rJXFBgqR0m"
          },
          "output": {
            "nodeId": "HkCJck_yV",
            "pinKey": "ryVmUAOrvkb"
          }
        },
        "r1Xyvt1_JV": {
          "id": "r1Xyvt1_JV",
          "input": {
            "nodeId": "H1xkPtJO1V",
            "pinKey": "BkbhWlwKCm"
          },
          "output": {
            "nodeId": "rkkvtkukE",
            "pinKey": "ryS2c4rkV"
          }
        },
        "r1_z4kdkE": {
          "id": "r1_z4kdkE",
          "input": {
            "nodeId": "HJ5-VJ_kV",
            "pinKey": "HJuFtXkO1N"
          },
          "output": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "rJLAp6yyV": {
          "id": "rJLAp6yyV",
          "input": {
            "nodeId": "SyVA6Ty1N",
            "pinKey": "HybVV7aJJ4"
          },
          "output": {
            "nodeId": "rJuoGyJ1N",
            "pinKey": "BkoXLoN3m"
          }
        },
        "rk2Z4yOyN": {
          "id": "rk2Z4yOyN",
          "input": {
            "nodeId": "HJ5-VJ_kV",
            "pinKey": "rJStFXkuJN"
          },
          "output": {
            "nodeId": "Byjf7yOJN",
            "pinKey": "rJWLtB0P1N"
          }
        },
        "rkJaVJ_kE": {
          "id": "rkJaVJ_kE",
          "input": {
            "nodeId": "BJh0z0wyV",
            "pinKey": "SJ-WEf0D14"
          },
          "output": {
            "nodeId": "BJN8jF0A7",
            "pinKey": "BJnW-c0RQ"
          }
        },
        "rkKt4Cw14": {
          "id": "rkKt4Cw14",
          "input": {
            "nodeId": "r1sHVCPyN",
            "pinKey": "r1OtomADyN"
          },
          "output": {
            "nodeId": "BkvJN6L1N",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "rkz1vY1ukV": {
          "id": "rkz1vY1ukV",
          "input": {
            "nodeId": "H1xkPtJO1V",
            "pinKey": "B13-lPKCQ"
          },
          "output": {
            "nodeId": "rkkvtkukE",
            "pinKey": "ryD2qNryV"
          }
        },
        "ry18ECDJ4": {
          "id": "ry18ECDJ4",
          "input": {
            "nodeId": "r1sHVCPyN",
            "pinKey": "HkrFjm0PJN"
          },
          "output": {
            "nodeId": "BkrEVRwJE",
            "pinKey": "rkzYiQCw1E"
          }
        }
      },
      "nodes": {
        "B1S_lkg1N": {
          "boundLiterals": {
            "BkKz5GVwX": "3"
          },
          "id": "B1S_lkg1N",
          "position": {
            "x": 25,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/core/pad-with-zeroes"
        },
        "BJJPlupC7": {
          "id": "BJJPlupC7",
          "position": {
            "x": 23,
            "y": 1,
            "units": "slots"
          },
          "type": "bradzilla84/touch-adafruit/touch-map-to-display"
        },
        "BJN8jF0A7": {
          "boundLiterals": {
            "HkLXiKRCX": "Never"
          },
          "id": "BJN8jF0A7",
          "position": {
            "x": 13,
            "y": 1,
            "units": "slots"
          },
          "type": "@/tft-lcd-background"
        },
        "BJh0z0wyV": {
          "boundLiterals": {
            "Hy-Nz0Py4": "230",
            "SkE-EGRPkV": "310",
            "r1Q-4GRDyN": "10",
            "rJl-VzAPkV": "10"
          },
          "id": "BJh0z0wyV",
          "position": {
            "x": 13,
            "y": 3,
            "units": "slots"
          },
          "type": "@/tft-lcd-draw-line"
        },
        "Bk5BXAIyV": {
          "boundLiterals": {
            "B1E_rVB1E": ".250",
            "HJiOBVB1N": "Continuously",
            "S18uBVry4": "1",
            "SkDdSVHyV": ".5"
          },
          "id": "Bk5BXAIyV",
          "position": {
            "x": 17,
            "y": 0,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/hsl-to-rgb"
        },
        "BkrEVRwJE": {
          "boundLiterals": {
            "HJNKsQRDkN": "30",
            "HJmYo7Rw14": "200",
            "HklKoXCD1E": "40"
          },
          "id": "BkrEVRwJE",
          "position": {
            "x": 13,
            "y": 4,
            "units": "slots"
          },
          "type": "@/tft-lcd-draw-circle"
        },
        "BkvJN6L1N": {
          "boundLiterals": {
            "BkV2-ewKAX": "Continuously",
            "BkbhWlwKCm": "255"
          },
          "id": "BkvJN6L1N",
          "position": {
            "x": 17,
            "y": 1,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/rgb-color-pack"
        },
        "Byjf7yOJN": {
          "boundLiterals": {
            "H1e_jrRwJV": "40",
            "Hk8Fr0D1V": "10",
            "S1usBRPyE": "40",
            "rJUjHCvyE": "40",
            "rJeIjB0DJ4": "10",
            "rJfUFHAPJV": "10"
          },
          "id": "Byjf7yOJN",
          "position": {
            "x": 13,
            "y": 6,
            "units": "slots"
          },
          "type": "@/tft-lcd-draw-triangle"
        },
        "H1xkPtJO1V": {
          "boundLiterals": {
            "BkV2-ewKAX": "Continuously",
            "BkbhWlwKCm": "255"
          },
          "id": "H1xkPtJO1V",
          "position": {
            "x": 29,
            "y": 3,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/rgb-color-pack"
        },
        "HJ5-VJ_kV": {
          "boundLiterals": {
            "B1EYt7kuJ4": "40",
            "BJXYKmy_J4": "200",
            "HJlYYm1O1N": "100",
            "HJtKXydyN": "40",
            "HyWqm1O1N": "10"
          },
          "id": "HJ5-VJ_kV",
          "position": {
            "x": 13,
            "y": 7,
            "units": "slots"
          },
          "type": "@/tft-lcd-draw-roundbox"
        },
        "HkCJck_yV": {
          "id": "HkCJck_yV",
          "position": {
            "x": 19,
            "y": -1,
            "units": "slots"
          },
          "type": "xod/core/boot"
        },
        "HkfSggXnm": {
          "id": "HkfSggXnm",
          "position": {
            "x": 13,
            "y": -1,
            "units": "slots"
          },
          "type": "@/tft-lcd-device"
        },
        "HyvTe9ARQ": {
          "boundLiterals": {
            "HJtPecAR7": "1",
            "rJXFBgqR0m": "On Boot"
          },
          "id": "HyvTe9ARQ",
          "position": {
            "x": 13,
            "y": 0,
            "units": "slots"
          },
          "type": "@/tft-lcd-rotation"
        },
        "SksNkRy14": {
          "arityLevel": 3,
          "boundLiterals": {
            "BkeKcj6ZZ-$1": "\" Y:\"",
            "Hkqu9oaWb": "\"X:\""
          },
          "id": "SksNkRy14",
          "position": {
            "x": 22,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/core/concat"
        },
        "SyVA6Ty1N": {
          "boundLiterals": {
            "HkRLX6JyE": "\"Hello World\"",
            "HyKHnTkJV": "1",
            "S1xgIap1JV": "50",
            "r1eIp6yJV": "50"
          },
          "id": "SyVA6Ty1N",
          "position": {
            "x": 22,
            "y": 5,
            "units": "slots"
          },
          "type": "@/tft-lcd-display-txt"
        },
        "r1sHVCPyN": {
          "boundLiterals": {
            "HJNKsQRDkN": "30",
            "HJmYo7Rw14": "40",
            "HklKoXCD1E": "190",
            "rkKKjQAvkN": "True"
          },
          "id": "r1sHVCPyN",
          "position": {
            "x": 13,
            "y": 5,
            "units": "slots"
          },
          "type": "@/tft-lcd-draw-circle"
        },
        "r1xjjwTC7": {
          "id": "r1xjjwTC7",
          "position": {
            "x": 23,
            "y": -1,
            "units": "slots"
          },
          "type": "bradzilla84/touch-adafruit/touch-device"
        },
        "rJLiiDpCm": {
          "id": "rJLiiDpCm",
          "position": {
            "x": 23,
            "y": 0,
            "units": "slots"
          },
          "type": "bradzilla84/touch-adafruit/touch-detect"
        },
        "rJuoGyJ1N": {
          "boundLiterals": {
            "B1-19cKZa7": "5",
            "Byly9cKZ6X": "5",
            "ryj0M1JkE": "True"
          },
          "id": "rJuoGyJ1N",
          "position": {
            "x": 22,
            "y": 4,
            "units": "slots"
          },
          "type": "@/tft-lcd-draw-box"
        },
        "rkkvtkukE": {
          "boundLiterals": {
            "B1E_rVB1E": ".100",
            "HJiOBVB1N": "Continuously",
            "S18uBVry4": "1",
            "SkDdSVHyV": ".5"
          },
          "id": "rkkvtkukE",
          "position": {
            "x": 29,
            "y": 2,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/hsl-to-rgb"
        },
        "ryovlyxJN": {
          "boundLiterals": {
            "BkKz5GVwX": "3"
          },
          "id": "ryovlyxJN",
          "position": {
            "x": 23,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/core/pad-with-zeroes"
        }
      },
      "path": "Storage/bradzilla84/example1"
    },
    "Storage/bradzilla84/hsl-to-rgb": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nfloat H,S,L, Rval,Gval,Bval;\n\nvoid HSL(float H, float S, float L, float& Rval, float& Gval, float& Bval);\nfloat Hue_2_RGB( float v1, float v2, float vH );\n\nvoid HSL(float H, float S, float L, float& Rval, float& Gval, float& Bval)\n{\n  float var_1;\n  float var_2;\n  float Hu=H+.33;\n  float Hd=H-.33;\n  if ( S == 0 )                       //HSL from 0 to 1\n  {\n    Rval = L * 255;                      //RGB results from 0 to 255\n    Gval = L * 255;\n    Bval = L * 255;\n  }\n  else\n  {\n    if ( L < 0.5 ) \n      var_2 = L * ( 1 + S );\n    else           \n      var_2 = ( L + S ) - ( S * L );\n\n    var_1 = 2 * L - var_2;\n\n    Rval = round(255 * Hue_2_RGB( var_1, var_2, Hu ));\n    Gval = round(255 * Hue_2_RGB( var_1, var_2, H ));\n    Bval = round(255 * Hue_2_RGB( var_1, var_2, Hd ));\n  }\n\n}\nfloat Hue_2_RGB( float v1, float v2, float vH )             //Function Hue_2_RGB\n{\n  if ( vH < 0 ) \n    vH += 1;\n  if ( vH > 1 ) \n    vH -= 1;\n  if ( ( 6 * vH ) < 1 ) \n    return ( v1 + ( v2 - v1 ) * 6 * vH );\n  if ( ( 2 * vH ) < 1 ) \n    return ( v2 );\n  if ( ( 3 * vH ) < 2 ) \n    return ( v1 + ( v2 - v1 ) * (.66-vH) * 6 );\n  return ( v1 );\n}\nvoid evaluate(Context ctx) {\n\n    if (!isInputDirty<input_INIT>(ctx)){\n        return;}\n\n    float Red;\n    float Green;\n    float Blue;\n\n    HSL(getValue<input_H>(ctx), getValue<input_S>(ctx), getValue<input_L>(ctx), Red, Green, Blue);\n\n    emitValue<output_Red>(ctx, Red);\n    emitValue<output_Green>(ctx, Green);\n    emitValue<output_Blue>(ctx, Blue);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "nodes": {
        "B1E_rVB1E": {
          "description": " Hue, Starting at the Red primary \nat 0.0, passing through the Green primary at 0.120 and the Blue primary at 0.240 (0 MIN) (1 MAX)",
          "id": "B1E_rVB1E",
          "label": "H",
          "position": {
            "x": 1,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "B1q2rVrJ4": {
          "id": "B1q2rVrJ4",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "HJiOBVB1N": {
          "boundLiterals": {
            "__out__": "Continuously"
          },
          "id": "HJiOBVB1N",
          "label": "INIT",
          "position": {
            "x": 7,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "S18uBVry4": {
          "description": "Saturation 0(Black) T 1(Full Color) ",
          "id": "S18uBVry4",
          "label": "S",
          "position": {
            "x": 3,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "S1M3cEBJE": {
          "id": "S1M3cEBJE",
          "label": "Red",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "SkDdSVHyV": {
          "description": "Lightnes 0(Black) T 1(White) ",
          "id": "SkDdSVHyV",
          "label": "L",
          "position": {
            "x": 5,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "ryD2qNryV": {
          "id": "ryD2qNryV",
          "label": "Blue",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "ryS2c4rkV": {
          "id": "ryS2c4rkV",
          "label": "Green",
          "position": {
            "x": 3,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        }
      },
      "path": "Storage/bradzilla84/hsl-to-rgb"
    },
    "Storage/bradzilla84/list": {
      "links": {
        "BJBsssf4N": {
          "id": "BJBsssf4N",
          "input": {
            "nodeId": "Skk9ioz4V",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "SyHSIoM44",
            "pinKey": "HkBWIjMEV"
          }
        },
        "BJvjijGNN": {
          "id": "BJvjijGNN",
          "input": {
            "nodeId": "rypqjifNV",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "SyL_oifNN",
            "pinKey": "rJWuBiszEV"
          }
        },
        "HJiRjoz4N": {
          "id": "HJiRjoz4N",
          "input": {
            "nodeId": "SyL_oifNN",
            "pinKey": "S1edBssGVV"
          },
          "output": {
            "nodeId": "H1gRosfEN",
            "pinKey": "B1x2RV3eZ"
          }
        },
        "Sk5CsszNN": {
          "id": "Sk5CsszNN",
          "input": {
            "nodeId": "SyHSIoM44",
            "pinKey": "S11Z8oGN4"
          },
          "output": {
            "nodeId": "H1gRosfEN",
            "pinKey": "B1x2RV3eZ"
          }
        },
        "Sk_W6ozEV": {
          "id": "Sk_W6ozEV",
          "input": {
            "nodeId": "Bkx69jsfE4",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "HkBW6iM44",
            "pinKey": "BJZO2nszV4"
          }
        },
        "r1IWaozEE": {
          "id": "r1IWaozEE",
          "input": {
            "nodeId": "HkBW6iM44",
            "pinKey": "HylO22iz4V"
          },
          "output": {
            "nodeId": "H1gRosfEN",
            "pinKey": "B1x2RV3eZ"
          }
        }
      },
      "nodes": {
        "Bkx69jsfE4": {
          "id": "Bkx69jsfE4",
          "position": {
            "x": 9,
            "y": 2,
            "units": "slots"
          },
          "size": {
            "height": 1,
            "width": 2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "H1gRosfEN": {
          "boundLiterals": {
            "B1x2RV3eZ": "\"10240.2\""
          },
          "id": "H1gRosfEN",
          "position": {
            "x": 7,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/core/constant-string"
        },
        "HkBW6iM44": {
          "id": "HkBW6iM44",
          "position": {
            "x": 9,
            "y": 1,
            "units": "slots"
          },
          "type": "@/string-to-long-int"
        },
        "S1J8qqGNE": {
          "id": "S1J8qqGNE",
          "position": {
            "x": 0,
            "y": 0,
            "units": "slots"
          },
          "type": "@/arduino-serial-plotter"
        },
        "Skk9ioz4V": {
          "id": "Skk9ioz4V",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "size": {
            "height": 1,
            "width": 2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "SyHSIoM44": {
          "id": "SyHSIoM44",
          "position": {
            "x": 5,
            "y": 1,
            "units": "slots"
          },
          "type": "@/string-to-int"
        },
        "SyL_oifNN": {
          "id": "SyL_oifNN",
          "position": {
            "x": 7,
            "y": 1,
            "units": "slots"
          },
          "type": "@/string-to-float"
        },
        "rypqjifNV": {
          "id": "rypqjifNV",
          "position": {
            "x": 7,
            "y": 2,
            "units": "slots"
          },
          "size": {
            "height": 1,
            "width": 2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        }
      },
      "path": "Storage/bradzilla84/list"
    },
    "Storage/bradzilla84/main": {
      "links": {
        "B1G-zVHJN": {
          "id": "B1G-zVHJN",
          "input": {
            "nodeId": "S1eslfEBy4",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "H11abES14",
            "pinKey": "BkaCx4S14"
          }
        },
        "B1q3EHr14": {
          "id": "B1q3EHr14",
          "input": {
            "nodeId": "ry-LIdNSkN",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "BkGuI4B1N",
            "pinKey": "ryS2c4rkV"
          }
        },
        "BkGab4SkV": {
          "id": "BkGab4SkV",
          "input": {
            "nodeId": "H11abES14",
            "pinKey": "rJApe4HkV"
          },
          "output": {
            "nodeId": "rkIzMwF0X",
            "pinKey": "S1x3ZgDYR7"
          }
        },
        "Bkdh4SSyN": {
          "id": "Bkdh4SSyN",
          "input": {
            "nodeId": "rkzIIuNSJV",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "BkGuI4B1N",
            "pinKey": "S1M3cEBJE"
          }
        },
        "H1LmKnIyV": {
          "id": "H1LmKnIyV",
          "input": {
            "nodeId": "rkIzMwF0X",
            "pinKey": "BkbhWlwKCm"
          },
          "output": {
            "nodeId": "BkGuI4B1N",
            "pinKey": "ryS2c4rkV"
          }
        },
        "Hy7-zES14": {
          "id": "Hy7-zES14",
          "input": {
            "nodeId": "rkjlzEry4",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "H11abES14",
            "pinKey": "S1y1ZVSkV"
          }
        },
        "Hyih4rrkE": {
          "id": "Hyih4rrkE",
          "input": {
            "nodeId": "rylU8_Nr1E",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "BkGuI4B1N",
            "pinKey": "ryD2qNryV"
          }
        },
        "HyugG4rkE": {
          "id": "HyugG4rkE",
          "input": {
            "nodeId": "rk4lMEBkN",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "H11abES14",
            "pinKey": "H1D8-4SkN"
          }
        },
        "SJumK3UJ4": {
          "id": "SJumK3UJ4",
          "input": {
            "nodeId": "rkIzMwF0X",
            "pinKey": "B13-lPKCQ"
          },
          "output": {
            "nodeId": "BkGuI4B1N",
            "pinKey": "ryD2qNryV"
          }
        },
        "SyZbf4rJN": {
          "id": "SyZbf4rJN",
          "input": {
            "nodeId": "HJ-iefVHJ4",
            "pinKey": "HkXK-dGob"
          },
          "output": {
            "nodeId": "H11abES14",
            "pinKey": "B1nAeErJE"
          }
        },
        "r1SmKnL1E": {
          "id": "r1SmKnL1E",
          "input": {
            "nodeId": "rkIzMwF0X",
            "pinKey": "ByMhWlPFRm"
          },
          "output": {
            "nodeId": "BkGuI4B1N",
            "pinKey": "S1M3cEBJE"
          }
        }
      },
      "nodes": {
        "BkGuI4B1N": {
          "boundLiterals": {
            "B1E_rVB1E": "0.120",
            "HJiOBVB1N": "Continuously",
            "S18uBVry4": "1",
            "SkDdSVHyV": "0.5"
          },
          "id": "BkGuI4B1N",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "@/hsl-to-rgb"
        },
        "H11abES14": {
          "boundLiterals": {
            "H1geTeNHyV": "Continuously"
          },
          "id": "H11abES14",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "@/rgb-color-unpack"
        },
        "HJ-iefVHJ4": {
          "id": "HJ-iefVHJ4",
          "position": {
            "x": 2,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "S1eslfEBy4": {
          "id": "S1eslfEBy4",
          "position": {
            "x": 3,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "rk4lMEBkN": {
          "id": "rk4lMEBkN",
          "position": {
            "x": 5,
            "y": 3,
            "units": "slots"
          },
          "size": {
            "height": 1,
            "width": 2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "rkIzMwF0X": {
          "boundLiterals": {
            "B13-lPKCQ": "300",
            "BkV2-ewKAX": "Continuously",
            "BkbhWlwKCm": "0.99",
            "ByMhWlPFRm": "100"
          },
          "id": "rkIzMwF0X",
          "position": {
            "x": 2,
            "y": 1,
            "units": "slots"
          },
          "type": "@/rgb-color-pack"
        },
        "rkjlzEry4": {
          "id": "rkjlzEry4",
          "position": {
            "x": 4,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "rkzIIuNSJV": {
          "id": "rkzIIuNSJV",
          "position": {
            "x": 7,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "ry-LIdNSkN": {
          "id": "ry-LIdNSkN",
          "position": {
            "x": 8,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/core/watch"
        },
        "rylU8_Nr1E": {
          "id": "rylU8_Nr1E",
          "position": {
            "x": 9,
            "y": 1,
            "units": "slots"
          },
          "size": {
            "height": 1,
            "width": 2,
            "units": "slots"
          },
          "type": "xod/core/watch"
        }
      },
      "path": "Storage/bradzilla84/main"
    },
    "Storage/bradzilla84/rgb-color-pack": {
      "attachments": [
        {
          "content": "struct State {\n    // this is a regular state related to the patch (i.e. constructor in this case)\n};\n\nstruct Type {\n    uint8_t Red;\n    uint8_t Green;\n    uint8_t Blue;\n    uint16_t Hex;\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n\n    if (!isInputDirty<input_INIT>(ctx)){\n        return;}\n\n\n    uint8_t Red = getValue<input_Red>(ctx);\n    uint8_t Green = getValue<input_Green>(ctx);\n    uint8_t Blue = getValue<input_Blue>(ctx);\n\n    if(Red <= 1) Red = getValue<input_Red>(ctx) * 255;\n    if(Green <= 1) Green = getValue<input_Green>(ctx) * 255;\n    if(Blue <= 1) Blue = getValue<input_Blue>(ctx) * 255;\n\n    if(Red >= 255) Red = 255;\n    if(Green >= 255) Green = 255;\n    if(Blue >= 255) Blue = 255;\n\n    uint16_t Hex = { ((Red & 0xF8) << 8) | ((Green & 0xFC) << 3) | ((Blue & 0xF8) >> 3) };\n    Type Color = { Red, Green, Blue, Hex };\n    emitValue<output_OUT>(ctx, Color);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "nodes": {
        "B13-lPKCQ": {
          "description": "Blue Colour 0 min, 255 Max.\nYou can use 0 to 1 to it will be remapped automatically.",
          "id": "B13-lPKCQ",
          "label": "Blue",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "BkV2-ewKAX": {
          "boundLiterals": {
            "__out__": "Continuously"
          },
          "id": "BkV2-ewKAX",
          "label": "INIT",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "BkbhWlwKCm": {
          "description": "Green Colour 0 min, 255 Max.\nYou can use 0 to 1 to it will be remapped automatically.",
          "id": "BkbhWlwKCm",
          "label": "Green",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "ByMhWlPFRm": {
          "description": "Red Colour 0 min, 255 Max.\nYou can use 0 to 1 to it will be remapped automatically.",
          "id": "ByMhWlPFRm",
          "label": "Red",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "S1x3ZgDYR7": {
          "id": "S1x3ZgDYR7",
          "label": "OUT",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-self"
        },
        "ryweTmSyV": {
          "id": "ryweTmSyV",
          "position": {
            "x": 0,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        }
      },
      "path": "Storage/bradzilla84/rgb-color-pack"
    },
    "Storage/bradzilla84/rgb-color-unpack": {
      "attachments": [
        {
          "content": "struct State {\n    // this is a regular state related to the patch (i.e. constructor in this case)\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n\n    if (!isInputDirty<input_INIT>(ctx)){\n        return;}\n\n\n    auto Color = getValue<input_IN>(ctx);\n    emitValue<output_Red>(ctx, Color.Red);\n    emitValue<output_Green>(ctx, Color.Green);\n    emitValue<output_Blue>(ctx, Color.Blue);\n    emitValue<output_Hex>(ctx, Color.Hex);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "nodes": {
        "B1nAeErJE": {
          "id": "B1nAeErJE",
          "label": "Red",
          "position": {
            "x": 0,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "BkaCx4S14": {
          "id": "BkaCx4S14",
          "label": "Green",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "H1D8-4SkN": {
          "id": "H1D8-4SkN",
          "label": "Hex",
          "position": {
            "x": 6,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-byte"
        },
        "H1Vl6gVHJE": {
          "id": "H1Vl6gVHJE",
          "position": {
            "x": 0,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "H1geTeNHyV": {
          "boundLiterals": {
            "__out__": "Continuously"
          },
          "id": "H1geTeNHyV",
          "label": "INIT",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "S1y1ZVSkV": {
          "id": "S1y1ZVSkV",
          "label": "Blue",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "rJApe4HkV": {
          "id": "rJApe4HkV",
          "position": {
            "x": 0,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-rgb-color-pack"
        }
      },
      "path": "Storage/bradzilla84/rgb-color-unpack"
    },
    "Storage/bradzilla84/string-to-float": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    char TXTC[16] = { 0 };\n    auto inValue = getValue<input_IN>(ctx);\n    dump(inValue, TXTC);\n    emitValue<output_OUT>(ctx, atof(TXTC));\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Convert a number stored in a string to a Float Number",
      "nodes": {
        "S1edBssGVV": {
          "description": "Input Number as a String",
          "id": "S1edBssGVV",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-string"
        },
        "SkOroszNE": {
          "id": "SkOroszNE",
          "position": {
            "x": -0.05,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "rJWuBiszEV": {
          "description": "Output Numer as INT",
          "id": "rJWuBiszEV",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        }
      },
      "path": "Storage/bradzilla84/string-to-float"
    },
    "Storage/bradzilla84/string-to-int": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    char TXTC[16] = { 0 };\n    auto inValue = getValue<input_IN>(ctx);\n    dump(inValue, TXTC);\n    emitValue<output_OUT>(ctx, atoi(TXTC));\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Convert a number stored in a string to a Int Number",
      "nodes": {
        "HkBWIjMEV": {
          "description": "Output Numer as INT",
          "id": "HkBWIjMEV",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "S11Z8oGN4": {
          "description": "Input Number as a String",
          "id": "S11Z8oGN4",
          "position": {
            "x": 1,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-string"
        },
        "SyTxIsGN4": {
          "id": "SyTxIsGN4",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        }
      },
      "path": "Storage/bradzilla84/string-to-int"
    },
    "Storage/bradzilla84/string-to-long-int": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    char TXTC[32] = { 0 };\n    auto inValue = getValue<input_IN>(ctx);\n    dump(inValue, TXTC);\n    emitValue<output_OUT>(ctx, atol(TXTC));\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Convert a number stored in a string to a Long Int Number",
      "nodes": {
        "BJZO2nszV4": {
          "description": "Output Numer as INT",
          "id": "BJZO2nszV4",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "ByO22sG4V": {
          "id": "ByO22sG4V",
          "position": {
            "x": -0.05,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "HylO22iz4V": {
          "description": "Input Number as a String",
          "id": "HylO22iz4V",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-string"
        }
      },
      "path": "Storage/bradzilla84/string-to-long-int"
    },
    "Storage/bradzilla84/tft-device": {
      "attachments": [
        {
          "content": "#pragma XOD require \"https://github.com/arduino-libraries/TFT\"\n// Include C++ library:\n{{#global}}\n#include <TFT.h>  // Arduino TFT LCD library\n#include <SPI.h>\n{{/global}}\n\n// Class wants to know ports in the moment of instantiation\n// but we don't know them at this moment.\n// Therefore, we reserve memory to store an instance of the class,\n// and create the instance later:\nstruct State {\n    uint8_t mem[sizeof(TFT)];\n};\n\n// Define our custom type as a pointer on the class instance.\nusing Type = TFT*;\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // It should be evaluated only once on the first (setup) transaction\n    if (!isSettingUp())\n        return;\n\n    auto state = getState(ctx);\n    auto pin_cs = getValue<input_pin_cs>(ctx);\n    auto pin_dc = getValue<input_pin_dc>(ctx);\n    auto pin_reset = getValue<input_pin_reset>(ctx);\n\n    // Create a new object in the memory area reserved previously.\n    Type Display = new (state->mem) TFT(pin_cs, pin_dc, pin_reset);\n    Display->begin();\n    emitValue<output_DEV>(ctx, Display);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Main Display Device",
      "nodes": {
        "BkbT-I4hpX": {
          "boundLiterals": {
            "__out__": "D10"
          },
          "description": "CS Pin Number",
          "id": "BkbT-I4hpX",
          "label": "pin_cs",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "Sy76WIV26Q": {
          "boundLiterals": {
            "__out__": "D9"
          },
          "description": "DC Pin Number",
          "id": "Sy76WIV26Q",
          "label": "pin_dc",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "SylaWI4hpQ": {
          "description": "FTOLDE Display device set data pins as per your setup.",
          "id": "SylaWI4hpQ",
          "position": {
            "x": 2,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "SyzT-UN3aX": {
          "boundLiterals": {
            "__out__": "D8"
          },
          "description": "Reset Pin Number",
          "id": "SyzT-UN3aX",
          "label": "pin_reset",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "rkpW8En6Q": {
          "id": "rkpW8En6Q",
          "label": "DEV",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-self"
        }
      },
      "path": "Storage/bradzilla84/tft-device"
    },
    "Storage/bradzilla84/tft-lcd-background": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n    auto color = getValue<input_Color>(ctx);\n\n    tft->fillScreen(color.Hex);\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Set the Background Color",
      "nodes": {
        "B1tMN6Lk4": {
          "description": "Background Color",
          "id": "B1tMN6Lk4",
          "label": "Color",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "BJnW-c0RQ": {
          "description": "Pulse on Complete",
          "id": "BJnW-c0RQ",
          "label": "OK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "H1bbNuaCQ": {
          "id": "H1bbNuaCQ",
          "position": {
            "x": 0,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        },
        "Hk4Z4_pRX": {
          "id": "Hk4Z4_pRX",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "HkLXiKRCX": {
          "boundLiterals": {
            "__out__": "Never"
          },
          "description": "Pulse to update",
          "id": "HkLXiKRCX",
          "label": "INIT",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "HkybN_TA7": {
          "id": "HkybN_TA7",
          "position": {
            "x": 0,
            "y": 0,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-background"
    },
    "Storage/bradzilla84/tft-lcd-device": {
      "attachments": [
        {
          "content": "// Tell XOD where it could download the library:\n#pragma XOD require \"https://github.com/adafruit/Adafruit-GFX-Library\"\n#pragma XOD require \"https://github.com/prenticedavid/MCUFRIEND_kbv\"\n\n{{#global}}\n#include <Adafruit_GFX.h>\n#include <MCUFRIEND_kbv.h>\n#include <stdio.h>\n{{/global}}\n\n\n\n\nstruct State {\n    uint8_t mem[sizeof(MCUFRIEND_kbv)];\n};\n\nusing Type = MCUFRIEND_kbv*;\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // It should be evaluated only once on the first (setup) transaction\n    if (!isSettingUp())\n        return;\n\n    auto state = getState(ctx);\n    Type tft = new (state->mem) MCUFRIEND_kbv(getValue<input_CS>(ctx),getValue<input_RS>(ctx),getValue<input_WR>(ctx),getValue<input_RD>(ctx),getValue<input_RST>(ctx));\n\n    tft->reset();\n    tft->begin(tft->readID());\n\n    emitValue<output_DEV>(ctx, tft);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Setup the LCD",
      "nodes": {
        "BJr7rmMnQ": {
          "id": "BJr7rmMnQ",
          "position": {
            "x": 3,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "Bk-OatL6R7": {
          "boundLiterals": {
            "__out__": "A0"
          },
          "description": "RD Pin",
          "id": "Bk-OatL6R7",
          "label": "RD",
          "position": {
            "x": 6,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "HyKaFLaAm": {
          "boundLiterals": {
            "__out__": "A4"
          },
          "description": "RST Pin",
          "id": "HyKaFLaAm",
          "label": "RST",
          "position": {
            "x": 7,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "SJOTt8pC7": {
          "boundLiterals": {
            "__out__": "A2"
          },
          "description": "RS Pin",
          "id": "SJOTt8pC7",
          "label": "RS",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "rkgOpKLpR7": {
          "boundLiterals": {
            "__out__": "A1"
          },
          "description": "WR Pin",
          "id": "rkgOpKLpR7",
          "label": "WR",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "ryBatI607": {
          "boundLiterals": {
            "__out__": "A3"
          },
          "description": "CS Pin",
          "id": "ryBatI607",
          "label": "CS",
          "position": {
            "x": 3,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "ryKQrXfh7": {
          "id": "ryKQrXfh7",
          "label": "DEV",
          "position": {
            "x": 3,
            "y": 4,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-self"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-device"
    },
    "Storage/bradzilla84/tft-lcd-display-txt": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n    auto color = getValue<input_Color>(ctx);\n    auto bgcolor = getValue<input_BGColor>(ctx);\n    auto TXT = getValue<input_TXT>(ctx);\n    // `length` returns the number of characters and you need an extra one to keep the\n    // terminal NUL-character used in C string representation. Initialize to 0’s to ensure the last char is indeed NUL\n    char TXTC[length(TXT) + 1] = { 0 };\n    // move the data from XString to the plain C string\n    dump(TXT, TXTC);\n\n    tft->setCursor(getValue<input_X>(ctx), getValue<input_Y>(ctx));\n    tft->setTextColor(color.Hex, bgcolor.Hex);\n    tft->setTextSize(getValue<input_TXTSize>(ctx));\n    tft->println(TXTC);\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Display TXT on Display",
      "nodes": {
        "BkXE47pJyN": {
          "boundLiterals": {
            "__out__": "Never"
          },
          "description": "Pulse to update",
          "id": "BkXE47pJyN",
          "label": "INIT",
          "position": {
            "x": 15,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "BksXETIkV": {
          "description": "Background Color (From Color block)\n(Used for quick erase of previous TXT)",
          "id": "BksXETIkV",
          "label": "BGColor",
          "position": {
            "x": 13,
            "y": 1,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "HkRLX6JyE": {
          "boundLiterals": {
            "__out__": "\"Hello World\""
          },
          "description": "TXT To Display.",
          "id": "HkRLX6JyE",
          "label": "TXT",
          "position": {
            "x": 10,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-string"
        },
        "HyKHnTkJV": {
          "boundLiterals": {
            "__out__": "1"
          },
          "description": "TXT Size",
          "id": "HyKHnTkJV",
          "label": "TXTSize",
          "position": {
            "x": 8,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HybVV7aJJ4": {
          "id": "HybVV7aJJ4",
          "position": {
            "x": 4,
            "y": 1,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        },
        "S1xgIap1JV": {
          "description": "Y Location",
          "id": "S1xgIap1JV",
          "label": "Y",
          "position": {
            "x": 7,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SJFX468kE": {
          "description": "Color (From Color block)",
          "id": "SJFX468kE",
          "label": "Color",
          "position": {
            "x": 12,
            "y": 1,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "SyEVNmT1JE": {
          "description": "Pulse on Complete",
          "id": "SyEVNmT1JE",
          "label": "OK",
          "position": {
            "x": 6,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "r1eIp6yJV": {
          "description": "X Location",
          "id": "r1eIp6yJV",
          "label": "X",
          "position": {
            "x": 6,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rklV4Xpk1V": {
          "id": "rklV4Xpk1V",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "ry4Nm6yJE": {
          "id": "ry4Nm6yJE",
          "position": {
            "x": 4,
            "y": 3,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-display-txt"
    },
    "Storage/bradzilla84/tft-lcd-draw-box": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n    auto color = getValue<input_Color>(ctx);\n\n\n    if (getValue<input_FILL>(ctx)){\n        tft->fillRect(getValue<input_PosX>(ctx),getValue<input_PosY>(ctx),getValue<input_SizeX>(ctx),getValue<input_SizeY>(ctx),color.Hex);\n    }\n    else\n    {\n        tft->drawRect(getValue<input_PosX>(ctx),getValue<input_PosY>(ctx),getValue<input_SizeX>(ctx),getValue<input_SizeY>(ctx),color.Hex);\n    }\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Box (Fill or No Fill)",
      "nodes": {
        "B1-19cKZa7": {
          "description": "Size in pixels Y",
          "id": "B1-19cKZa7",
          "label": "SizeY",
          "position": {
            "x": 10,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "B1Jc9KbpX": {
          "description": "Position Y Start",
          "id": "B1Jc9KbpX",
          "label": "PosY",
          "position": {
            "x": 8,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "BkZfcjEhQ": {
          "description": "Pulse to update",
          "id": "BkZfcjEhQ",
          "label": "INIT",
          "position": {
            "x": 15,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "BkoXLoN3m": {
          "id": "BkoXLoN3m",
          "position": {
            "x": 5,
            "y": 3,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        },
        "ByPYqYbTX": {
          "description": "Position X Start",
          "id": "ByPYqYbTX",
          "label": "PosX",
          "position": {
            "x": 7,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "Byly9cKZ6X": {
          "description": "Size in pixels X",
          "id": "Byly9cKZ6X",
          "label": "SizeX",
          "position": {
            "x": 9,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1NDmwmn7": {
          "id": "H1NDmwmn7",
          "position": {
            "x": 5,
            "y": 1,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        },
        "HysELoV27": {
          "id": "HysELoV27",
          "position": {
            "x": 6,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "Skdrb9RAm": {
          "description": "Pulse on Complete",
          "id": "Skdrb9RAm",
          "label": "OK",
          "position": {
            "x": 7,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "rJvI4aUkV": {
          "description": "Color to Fill/Outline with",
          "id": "rJvI4aUkV",
          "label": "Color",
          "position": {
            "x": 12,
            "y": 1,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "ryj0M1JkE": {
          "description": "Do you want to fill the box?",
          "id": "ryj0M1JkE",
          "label": "FILL",
          "position": {
            "x": 11,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-boolean"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-draw-box"
    },
    "Storage/bradzilla84/tft-lcd-draw-circle": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n    auto color = getValue<input_Color>(ctx);\n\n\n    if (getValue<input_FILL>(ctx)){\n        tft->fillCircle(getValue<input_PosX>(ctx),getValue<input_PosY>(ctx),getValue<input_Rad>(ctx),color.Hex);\n    }\n    else\n    {\n        tft->drawCircle(getValue<input_PosX>(ctx),getValue<input_PosY>(ctx),getValue<input_Rad>(ctx),color.Hex);\n    }\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Circle (Fill or No Fill)",
      "nodes": {
        "BkLFim0Dk4": {
          "id": "BkLFim0Dk4",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "HJNKsQRDkN": {
          "description": "Radius Size in pixels",
          "id": "HJNKsQRDkN",
          "label": "Rad",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HJmYo7Rw14": {
          "description": "Position X Start",
          "id": "HJmYo7Rw14",
          "label": "PosX",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HklKoXCD1E": {
          "description": "Position Y Start",
          "id": "HklKoXCD1E",
          "label": "PosY",
          "position": {
            "x": 3,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HkrFjm0PJN": {
          "id": "HkrFjm0PJN",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        },
        "SyDKj7RvkV": {
          "description": "Pulse on Complete",
          "id": "SyDKj7RvkV",
          "label": "OK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "r1OtomADyN": {
          "description": "Color to Fill/Outline with",
          "id": "r1OtomADyN",
          "label": "Color",
          "position": {
            "x": 7,
            "y": -0.05,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "rkKKjQAvkN": {
          "description": "Do you want to fill the Circle?",
          "id": "rkKKjQAvkN",
          "label": "FILL",
          "position": {
            "x": 6,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-boolean"
        },
        "rkzYiQCw1E": {
          "id": "rkzYiQCw1E",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        },
        "ryWFjXRDy4": {
          "description": "Pulse to update",
          "id": "ryWFjXRDy4",
          "label": "INIT",
          "position": {
            "x": 10,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-draw-circle"
    },
    "Storage/bradzilla84/tft-lcd-draw-line": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n    auto color = getValue<input_Color>(ctx);\n\n    tft->drawLine(getValue<input_StartX>(ctx),getValue<input_StartY>(ctx),getValue<input_EndX>(ctx),getValue<input_EndY>(ctx),color.Hex);\n\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "nodes": {
        "BkSZEM0D1V": {
          "id": "BkSZEM0D1V",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        },
        "BkzZNGRDyE": {
          "id": "BkzZNGRDyE",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        },
        "HJ_bEM0D1V": {
          "description": "Color to Fill with",
          "id": "HJ_bEM0D1V",
          "label": "Color",
          "position": {
            "x": 7,
            "y": -0.05,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "Hy-Nz0Py4": {
          "description": "Position Y End",
          "id": "Hy-Nz0Py4",
          "label": "EndY",
          "position": {
            "x": 5,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "S1UWNzCwkV": {
          "id": "S1UWNzCwkV",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "SJ-WEf0D14": {
          "boundLiterals": {
            "__out__": "Never"
          },
          "description": "Pulse to update",
          "id": "SJ-WEf0D14",
          "label": "INIT",
          "position": {
            "x": 10,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "SkE-EGRPkV": {
          "description": "Position X End",
          "id": "SkE-EGRPkV",
          "label": "EndX",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "r1Q-4GRDyN": {
          "description": "Position X Start",
          "id": "r1Q-4GRDyN",
          "label": "StartX",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rJl-VzAPkV": {
          "description": "Position Y Start",
          "id": "rJl-VzAPkV",
          "label": "StartY",
          "position": {
            "x": 3,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rkvZVfCvkV": {
          "description": "Pulse on Complete",
          "id": "rkvZVfCvkV",
          "label": "OK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-draw-line"
    },
    "Storage/bradzilla84/tft-lcd-draw-roundbox": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n    auto color = getValue<input_Color>(ctx);\n\n\n    if (getValue<input_FILL>(ctx)){\n        tft->fillRoundRect(getValue<input_PosX>(ctx),getValue<input_PosY>(ctx),getValue<input_SizeX>(ctx),getValue<input_SizeY>(ctx),getValue<input_Rad>(ctx),color.Hex);\n    }\n    else\n    {\n        tft->drawRoundRect(getValue<input_PosX>(ctx),getValue<input_PosY>(ctx),getValue<input_SizeX>(ctx),getValue<input_SizeY>(ctx),getValue<input_Rad>(ctx),color.Hex);\n    }\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Round Corner Box (Fill or No Fill)",
      "nodes": {
        "B1EYt7kuJ4": {
          "description": "Size in pixels X",
          "id": "B1EYt7kuJ4",
          "label": "SizeX",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "BJ-KY7y_yE": {
          "description": "Pulse to update",
          "id": "BJ-KY7y_yE",
          "label": "INIT",
          "position": {
            "x": 11,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "BJXYKmy_J4": {
          "description": "Position X Start",
          "id": "BJXYKmy_J4",
          "label": "PosX",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HJlYYm1O1N": {
          "description": "Position Y Start",
          "id": "HJlYYm1O1N",
          "label": "PosY",
          "position": {
            "x": 3,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HJtKXydyN": {
          "description": "Size in pixels Y",
          "id": "HJtKXydyN",
          "label": "SizeY",
          "position": {
            "x": 5,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HJuFtXkO1N": {
          "description": "Color to Fill/Outline with",
          "id": "HJuFtXkO1N",
          "label": "Color",
          "position": {
            "x": 9,
            "y": 0,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "HyWqm1O1N": {
          "description": "Radius Size in pixels",
          "id": "HyWqm1O1N",
          "label": "Rad",
          "position": {
            "x": 6,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "Sk8tYmJO1E": {
          "id": "Sk8tYmJO1E",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "SyMYFQJdJN": {
          "id": "SyMYFQJdJN",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        },
        "rJStFXkuJN": {
          "id": "rJStFXkuJN",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        },
        "rJYtKm1_yE": {
          "description": "Do you want to fill the box?",
          "id": "rJYtKm1_yE",
          "label": "FILL",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-boolean"
        },
        "rkvKKXyOkE": {
          "description": "Pulse on Complete",
          "id": "rkvKKXyOkE",
          "label": "OK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-draw-roundbox"
    },
    "Storage/bradzilla84/tft-lcd-draw-triangle": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n    auto color = getValue<input_Color>(ctx);\n\n\n    if (getValue<input_FILL>(ctx)){\n        tft->fillTriangle(getValue<input_Pos1X>(ctx),getValue<input_Pos1Y>(ctx),getValue<input_Pos2X>(ctx),getValue<input_Pos2Y>(ctx),getValue<input_Pos3X>(ctx),getValue<input_Pos3Y>(ctx),color.Hex);\n    }\n    else\n    {\n        tft->drawTriangle(getValue<input_Pos1X>(ctx),getValue<input_Pos1Y>(ctx),getValue<input_Pos2X>(ctx),getValue<input_Pos2Y>(ctx),getValue<input_Pos3X>(ctx),getValue<input_Pos3Y>(ctx),color.Hex);\n    }\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Draw a Triangle from 3 Points",
      "nodes": {
        "B148YSAv1V": {
          "id": "B148YSAv1V",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        },
        "BJ8LtBADJ4": {
          "description": "Pulse on Complete",
          "id": "BJ8LtBADJ4",
          "label": "OK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "H1e_jrRwJV": {
          "description": "Point3 X",
          "id": "H1e_jrRwJV",
          "label": "Pos3X",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "Hk8Fr0D1V": {
          "description": "Point1 Y",
          "id": "Hk8Fr0D1V",
          "label": "Pos1Y",
          "position": {
            "x": 3,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HkOUtS0wJV": {
          "description": "Do you want to fill the Triangle?",
          "id": "HkOUtS0wJV",
          "label": "FILL",
          "position": {
            "x": 11,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-boolean"
        },
        "S1usBRPyE": {
          "description": "Point3 Y",
          "id": "S1usBRPyE",
          "label": "Pos3Y",
          "position": {
            "x": 9,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "S1wUtrCvkV": {
          "description": "Color to Fill/Outline with",
          "id": "S1wUtrCvkV",
          "label": "Color",
          "position": {
            "x": 12,
            "y": 0,
            "units": "slots"
          },
          "type": "bradzilla84/color-rgb-hsl/input-rgb-color-pack"
        },
        "rJHIKBCv1V": {
          "id": "rJHIKBCv1V",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "rJUjHCvyE": {
          "description": "Point2 Y",
          "id": "rJUjHCvyE",
          "label": "Pos2Y",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rJWLtB0P1N": {
          "id": "rJWLtB0P1N",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        },
        "rJeIjB0DJ4": {
          "description": "Point2 X",
          "id": "rJeIjB0DJ4",
          "label": "Pos2X",
          "position": {
            "x": 5,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "rJeLtHAD1N": {
          "description": "Pulse to update",
          "id": "rJeLtHAD1N",
          "label": "INIT",
          "position": {
            "x": 15,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "rJfUFHAPJV": {
          "description": "Point1 X",
          "id": "rJfUFHAPJV",
          "label": "Pos1X",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-draw-triangle"
    },
    "Storage/bradzilla84/tft-lcd-rotation": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx)){\n        emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n        return;}\n\n    auto tft = getValue<input_IN>(ctx);\n\n    tft->setRotation(getValue<input_Rotation>(ctx));\n\n    emitValue<output_OUT>(ctx, getValue<input_IN>(ctx));\n    emitValue<output_OK>(ctx, 1);\n}\n\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "nodes": {
        "HJtHxqARm": {
          "id": "HJtHxqARm",
          "position": {
            "x": -0.05,
            "y": 2,
            "units": "slots"
          },
          "type": "@/output-tft-lcd-device"
        },
        "HJtPecAR7": {
          "description": "Set the Rotation of the display 0 -3",
          "id": "HJtPecAR7",
          "label": "Rotation",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HkbKHxqCR7": {
          "id": "HkbKHxqCR7",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-tft-lcd-device"
        },
        "Hyq8-9CAX": {
          "description": "Pulse on Complete",
          "id": "Hyq8-9CAX",
          "label": "OK",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "rJXFBgqR0m": {
          "boundLiterals": {
            "__out__": "Never"
          },
          "description": "Pulse to update",
          "id": "rJXFBgqR0m",
          "label": "INIT",
          "position": {
            "x": 4,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        }
      },
      "path": "Storage/bradzilla84/tft-lcd-rotation"
    },
    "Storage/bradzilla84/touch-detect": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx))\n        return;\n\n    // Get a pointer to the  class instance\n    auto ts = getValue<input_IN>(ctx);\n\n // a point object holds x y and z coordinates\n  TSPoint p = ts->getPoint();\n  pinMode(getValue<input_XM>(ctx), OUTPUT);        //restore shared pins\n  pinMode(getValue<input_YP>(ctx), OUTPUT);\n  digitalWrite(getValue<input_XM>(ctx), HIGH);     //because TFT control pins\n  digitalWrite(getValue<input_YP>(ctx), HIGH);\n  // we have some minimum pressure we consider 'valid'\n  // pressure of 0 means no pressing above 500 is error!\n  if (p.z > 0 && p.z < 500) {\n      emitValue<output_X>(ctx, p.x);\n      emitValue<output_Y>(ctx, p.y);\n      emitValue<output_Pressure>(ctx, p.z);\n      emitValue<output_TouchDetected>(ctx, 1);\n  }\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Detect Touch and output Raw XY",
      "nodes": {
        "B1KNDoJAQ": {
          "description": "Pulse on Touch Detected",
          "id": "B1KNDoJAQ",
          "label": "TouchDetected",
          "position": {
            "x": 4,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "B1N-pUsJAm": {
          "id": "B1N-pUsJAm",
          "label": "IN",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "@/input-touch-device"
        },
        "ByXZT8sk0Q": {
          "boundLiterals": {
            "__out__": "Continuously"
          },
          "description": "Check for Touch (just leave set to Continuously to recive touch evets on the TouchDetected pin)",
          "id": "ByXZT8sk0Q",
          "label": "INIT",
          "position": {
            "x": 5,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "H1GhKj1A7": {
          "boundLiterals": {
            "__out__": "A2"
          },
          "description": "YP Pin (Some display's share pins with the touch Screen set this to your YP Pin to Workarround)",
          "id": "H1GhKj1A7",
          "label": "YP",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "H1M-aIsy0m": {
          "description": "Read out the touch events on trigger or Continuously. X Y coordinates and pressure applied",
          "id": "H1M-aIsy0m",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "S1W-a8jkAQ": {
          "description": "Y  Location",
          "id": "S1W-a8jkAQ",
          "label": "Y",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "S1bpIiJAQ": {
          "description": "X Location",
          "id": "S1bpIiJAQ",
          "label": "X",
          "position": {
            "x": 0,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "SJlWaIjkCX": {
          "description": "Pressure Applied ",
          "id": "SJlWaIjkCX",
          "label": "Pressure",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "r1eM2KoJA7": {
          "boundLiterals": {
            "__out__": "A3"
          },
          "description": "XM Pin (Some display's share pins with the touch Screen set this to your XM Pin to Workarround)",
          "id": "r1eM2KoJA7",
          "label": "XM",
          "position": {
            "x": 3,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        }
      },
      "path": "Storage/bradzilla84/touch-detect"
    },
    "Storage/bradzilla84/touch-detect-grid": {
      "attachments": [
        {
          "content": "\nstruct State {\n};\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // The node responds only if there is an input pulse\n    if (!isInputDirty<input_INIT>(ctx))\n        return;\n    auto grids = (getValue<input_XGridNumber>(ctx) * getValue<input_YGridNumber>(ctx));\n    auto gridPixSizeX =((getValue<input_XMax>(ctx) - getValue<input_XMin>(ctx)) / getValue<input_XGridNumber>(ctx));\n    auto gridPixSizeY =((getValue<input_YMax>(ctx) - getValue<input_YMin>(ctx)) / getValue<input_YGridNumber>(ctx));\n    auto gridnumber = 0;\n    for (int gridy = 1; gridy <= getValue<input_YGridNumber>(ctx); gridy++) {\n        for (int gridx = 1; gridx <= getValue<input_XGridNumber>(ctx); gridx++) {\n            gridnumber++;\n            if(getValue<input_Y>(ctx) < (gridPixSizeY * gridy)){\n                if(getValue<input_X>(ctx) < (gridPixSizeX * gridx)){\n                    emitValue<output_TouchDetected>(ctx, 1);\n                    emitValue<output_GridNumber>(ctx, gridnumber);\n                    emitValue<output_GridX>(ctx, gridx);\n                    emitValue<output_GridY>(ctx, gridy);\n                    return;\n                }\n            }\n          }\n\n      }\n\n\n\n\n\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Make a Grid of touch events.( Usefull for making Button grids..Keypads...Ect...)(Trigger different Pages/Events based on what button was Pressed)",
      "nodes": {
        "B19CN1l0X": {
          "description": "Grid Y the touch was detected in.",
          "id": "B19CN1l0X",
          "label": "GridY",
          "position": {
            "x": 3,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "BJSbD6JAX": {
          "boundLiterals": {
            "__out__": "4"
          },
          "description": "Number or Blocks/Buttons in the Y Direction.",
          "id": "BJSbD6JAX",
          "label": "YGridNumber",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "Bk1qlRJ0X": {
          "description": "X Input from touch Map.",
          "id": "Bk1qlRJ0X",
          "label": "X",
          "position": {
            "x": -0.1,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "ByYRVkxCQ": {
          "description": "Grid X the touch was detected in.",
          "id": "ByYRVkxCQ",
          "label": "GridX",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "H1MWPa1AQ": {
          "boundLiterals": {
            "__out__": "3"
          },
          "description": "Number or Blocks/Buttons in the X Direction.",
          "id": "H1MWPa1AQ",
          "label": "XGridNumber",
          "position": {
            "x": 3,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1XLW3yRX": {
          "description": "Grid number the touch was detected in.",
          "id": "H1XLW3yRX",
          "label": "GridNumber",
          "position": {
            "x": 0,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "H1zQ8Wn1AX": {
          "description": "Read out the touch events on trigger or Continuously. X Y coordinates and pressure applied",
          "id": "H1zQ8Wn1AX",
          "position": {
            "x": 1,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "HJTxFpk0Q": {
          "boundLiterals": {
            "__out__": "0"
          },
          "description": "X Min of Grid Area.",
          "id": "HJTxFpk0Q",
          "label": "XMin",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HJx6xtakAm": {
          "boundLiterals": {
            "__out__": "0"
          },
          "description": "Y Min of Grid Area.",
          "id": "HJx6xtakAm",
          "label": "YMin",
          "position": {
            "x": 7,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "S1XXIZ3107": {
          "boundLiterals": {
            "__out__": "Continuously"
          },
          "description": "Check for Touch in Grid (Connect to the Touct-Detect block OK pin to keep things fast and clean.)",
          "id": "S1XXIZ3107",
          "label": "INIT",
          "position": {
            "x": 12,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "S1bTeFakRm": {
          "boundLiterals": {
            "__out__": "320"
          },
          "description": "X Max of Grid Area.",
          "id": "S1bTeFakRm",
          "label": "XMax",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SJfpgK6yR7": {
          "boundLiterals": {
            "__out__": "240"
          },
          "description": "X Max of Grid Area.",
          "id": "SJfpgK6yR7",
          "label": "YMax",
          "position": {
            "x": 9,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SkSXLb3kRm": {
          "description": "Pulse on Touch Detected in Grid",
          "id": "SkSXLb3kRm",
          "label": "TouchDetected",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "Skl15e0kAQ": {
          "description": "Y Input from touch Map.",
          "id": "Skl15e0kAQ",
          "label": "Y",
          "position": {
            "x": 1,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        }
      },
      "path": "Storage/bradzilla84/touch-detect-grid"
    },
    "Storage/bradzilla84/touch-device": {
      "attachments": [
        {
          "content": "// Tell XOD where it could download the library:\n#pragma XOD require \"https://github.com/adafruit/Adafruit_TouchScreen\"\n\n{{#global}}\n#include <stdint.h>\n#include \"TouchScreen.h\"\n{{/global}}\n\nstruct State {\n    uint8_t mem[sizeof(TouchScreen)];\n};\n\nusing Type = TouchScreen*;\n\n{{ GENERATED_CODE }}\n\nvoid evaluate(Context ctx) {\n    // It should be evaluated only once on the first (setup) transaction\n    if (!isSettingUp())\n        return;\n\n    auto state = getState(ctx);\n    // Create a new object in the memory area reserved previously.\n    Type ts = new (state->mem) TouchScreen(getValue<input_XP>(ctx), getValue<input_YP>(ctx), getValue<input_XM>(ctx), getValue<input_YM>(ctx), getValue<input_ResistanceValue>(ctx));\n    emitValue<output_DEV>(ctx, ts);\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "description": "Touch Device.\nThese are the pins for some typical shields!\nS6D0154: YP=A1, XM=A2, YM=7, XP=6\nST7783 : YP=A2, XM=A1, YM=6, XP=7\nILI9320: YP=A2, XM=A3, YM=8, XP=9\nILI9325: YP=A1, XM=A2, YM=7, XP=6\nILI9325BG: YP=A2, XM=A1, YM=6, XP=7\nILI9341: YP=A2, XM=A1, YM=7, XP=6\nILI9488: YP=A1, XM=A2, YM=7, XP=6\nR65109V: YP=A2, XM=A1, YM=6, XP=7",
      "nodes": {
        "B1ElwUsJA7": {
          "id": "B1ElwUsJA7",
          "position": {
            "x": 2,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "BJxewIjy0Q": {
          "id": "BJxewIjy0Q",
          "label": "DEV",
          "position": {
            "x": 2,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-self"
        },
        "HkXewIoJ07": {
          "boundLiterals": {
            "__out__": "D9"
          },
          "description": "XP Pin",
          "id": "HkXewIoJ07",
          "label": "XP",
          "position": {
            "x": 3,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "HygvUsJCm": {
          "boundLiterals": {
            "__out__": "A2"
          },
          "description": "YP Pin",
          "id": "HygvUsJCm",
          "label": "YP",
          "position": {
            "x": -0.05,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "S1blPIsy07": {
          "boundLiterals": {
            "__out__": "A3"
          },
          "description": "XM Pin",
          "id": "S1blPIsy07",
          "label": "XM",
          "position": {
            "x": 1,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "S1zlvIsy0m": {
          "boundLiterals": {
            "__out__": "D8"
          },
          "description": "YM Pin",
          "id": "S1zlvIsy0m",
          "label": "YM",
          "position": {
            "x": 2,
            "y": -0.05,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "SkgPea1RQ": {
          "boundLiterals": {
            "__out__": "300"
          },
          "description": "For better pressure precision, we need to know the resistance\nbetween X+ and X- Use any multimeter to read it\nFor the one i am using, its 300 ohms across the X plate",
          "id": "SkgPea1RQ",
          "label": "ResistanceValue",
          "position": {
            "x": 5,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        }
      },
      "path": "Storage/bradzilla84/touch-device"
    },
    "Storage/bradzilla84/touch-map-to-display": {
      "description": "Map the Touch Events to the Display Dimensions.",
      "links": {
        "BJD85ny07": {
          "id": "BJD85ny07",
          "input": {
            "nodeId": "BkiGFnkAX",
            "pinKey": "B1rSeJlnZ"
          },
          "output": {
            "nodeId": "BJLLdnJ07",
            "pinKey": "__out__"
          }
        },
        "H1I09hJAm": {
          "id": "H1I09hJAm",
          "input": {
            "nodeId": "BkiGFnkAX",
            "pinKey": "HJjEe1lnb"
          },
          "output": {
            "nodeId": "B1si52107",
            "pinKey": "__out__"
          }
        },
        "H1xUK2JRm": {
          "id": "H1xUK2JRm",
          "input": {
            "nodeId": "SyxjMF2J0X",
            "pinKey": "HkFBgJehW"
          },
          "output": {
            "nodeId": "SycjD3kCX",
            "pinKey": "__out__"
          }
        },
        "HkFatn1Rm": {
          "id": "HkFatn1Rm",
          "input": {
            "nodeId": "HyftYhkRX",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "SyxjMF2J0X",
            "pinKey": "rJFmgJehW"
          }
        },
        "SkYIcnyRm": {
          "id": "SkYIcnyRm",
          "input": {
            "nodeId": "SyxjMF2J0X",
            "pinKey": "SJbSlJxh-"
          },
          "output": {
            "nodeId": "rJpHO3yCm",
            "pinKey": "__out__"
          }
        },
        "Syh89nkAm": {
          "id": "Syh89nkAm",
          "input": {
            "nodeId": "SyxjMF2J0X",
            "pinKey": "B1rSeJlnZ"
          },
          "output": {
            "nodeId": "B1mwO2JA7",
            "pinKey": "__out__"
          }
        },
        "r12SYhJC7": {
          "id": "r12SYhJC7",
          "input": {
            "nodeId": "BkiGFnkAX",
            "pinKey": "HkFBgJehW"
          },
          "output": {
            "nodeId": "ryXiP2J0Q",
            "pinKey": "__out__"
          }
        },
        "r1_092kAX": {
          "id": "r1_092kAX",
          "input": {
            "nodeId": "SyxjMF2J0X",
            "pinKey": "HJjEe1lnb"
          },
          "output": {
            "nodeId": "Hkpi9hJRX",
            "pinKey": "__out__"
          }
        },
        "rJD6FhJCQ": {
          "id": "rJD6FhJCQ",
          "input": {
            "nodeId": "H1gFK31RQ",
            "pinKey": "__in__"
          },
          "output": {
            "nodeId": "BkiGFnkAX",
            "pinKey": "rJFmgJehW"
          }
        },
        "ryHUq3k0m": {
          "id": "ryHUq3k0m",
          "input": {
            "nodeId": "BkiGFnkAX",
            "pinKey": "SJbSlJxh-"
          },
          "output": {
            "nodeId": "By1V_n1AQ",
            "pinKey": "__out__"
          }
        }
      },
      "nodes": {
        "B1mwO2JA7": {
          "boundLiterals": {
            "__out__": "100"
          },
          "description": "X Max of Touch Output. (will need to be remaped for Orientation)",
          "id": "B1mwO2JA7",
          "label": "YMaxTouch",
          "position": {
            "x": 10,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "B1si52107": {
          "description": "X Input from touch detect.",
          "id": "B1si52107",
          "label": "X",
          "position": {
            "x": 1,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "BJLLdnJ07": {
          "boundLiterals": {
            "__out__": "100"
          },
          "description": "X Max of Touch Output. (will need to be remaped for Orientation)",
          "id": "BJLLdnJ07",
          "label": "XMaxTouch",
          "position": {
            "x": 9,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "BkiGFnkAX": {
          "boundLiterals": {
            "B1rSeJlnZ": "100",
            "HkFBgJehW": "320",
            "SJbSlJxh-": "950"
          },
          "id": "BkiGFnkAX",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/math/map-clip"
        },
        "By1V_n1AQ": {
          "boundLiterals": {
            "__out__": "950"
          },
          "description": "X Min of Touch Output. (will need to be remaped for Orientation)",
          "id": "By1V_n1AQ",
          "label": "XMinTouch",
          "position": {
            "x": 7,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1gFK31RQ": {
          "description": "X Position Mapped to the display.",
          "id": "H1gFK31RQ",
          "label": "XDisplayPoint",
          "position": {
            "x": 1,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "Hkpi9hJRX": {
          "description": "Y Input from touch detect.",
          "id": "Hkpi9hJRX",
          "label": "Y",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "HyftYhkRX": {
          "description": "Y Position Mapped to the display.",
          "id": "HyftYhkRX",
          "label": "YDisplayPoint",
          "position": {
            "x": 7,
            "y": 3,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "SycjD3kCX": {
          "boundLiterals": {
            "__out__": "240"
          },
          "description": "Display Max Pixels in Y dir",
          "id": "SycjD3kCX",
          "label": "YDisplay",
          "position": {
            "x": 5,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "SyxjMF2J0X": {
          "boundLiterals": {
            "B1rSeJlnZ": "100",
            "HkFBgJehW": "240",
            "SJbSlJxh-": "900"
          },
          "id": "SyxjMF2J0X",
          "position": {
            "x": 7,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/math/map-clip"
        },
        "rJpHO3yCm": {
          "boundLiterals": {
            "__out__": "900"
          },
          "description": "Y Min of Touch Output. (will need to be remaped for Orientation)",
          "id": "rJpHO3yCm",
          "label": "YMinTouch",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "ryXiP2J0Q": {
          "boundLiterals": {
            "__out__": "320"
          },
          "description": "Display Max Pixels in X dir",
          "id": "ryXiP2J0Q",
          "label": "XDisplay",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        }
      },
      "path": "Storage/bradzilla84/touch-map-to-display"
    },
    "Storage/bradzilla84/touch-screen": {
      "attachments": [
        {
          "content": "// Tell XOD where it could download the library:\n#pragma XOD require \"https://github.com/adafruit/Adafruit_TouchScreen\"\n\n{{#global}}\n#include <stdint.h>\n#include \"TouchScreen.h\"\n{{/global}}\n\nstruct State {\n        uint8_t mem[sizeof(TouchScreen)];\n};\n\n\n{{ GENERATED_CODE }}\nusing Type = TouchScreen*;\nType ts = new TouchScreen(9, A2, A3, 8, 300); //TouchScreen(XP, YP, XM, YM, 300)\nTSPoint tp;\nvoid evaluate(Context ctx) {\n    if (!isInputDirty<input_INIT>(ctx)){\n        return;}\n\n    auto XP = getValue<input_XP>(ctx);\n    auto YP = getValue<input_YP>(ctx);\n    auto XM = getValue<input_XM>(ctx);\n    auto YM = getValue<input_YM>(ctx);\n    auto RES = getValue<input_RES>(ctx);\n\n    if (isSettingUp()){\n        auto state = getState(ctx);\n        Type ts = new (state->mem) TouchScreen(XP, YP, XM, YM, RES);}\n\n\n\n    tp = ts->getPoint();\n    pinMode(A2, OUTPUT);//XM\n    pinMode(A3, OUTPUT);//YP\n\n    emitValue<output_XTouch>(ctx, tp.x);\n    emitValue<output_YTouch>(ctx, tp.y);\n    emitValue<output_TouchPressure>(ctx, tp.z);\n    if (tp.z){\n    emitValue<output_Touch>(ctx, 1);\n    }\n\n}\n",
          "encoding": "utf8",
          "filename": "patch.cpp"
        }
      ],
      "nodes": {
        "BJEHGV10m": {
          "id": "BJEHGV10m",
          "label": "XTouch",
          "position": {
            "x": 1,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "Bk98ME1Am": {
          "id": "Bk98ME1Am",
          "label": "TouchPressure",
          "position": {
            "x": 5,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        },
        "BkMVG41R7": {
          "boundLiterals": {
            "__out__": "A2"
          },
          "description": "YP Pin",
          "id": "BkMVG41R7",
          "label": "YP",
          "position": {
            "x": 2,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "By2oO91R7": {
          "boundLiterals": {
            "__out__": "300"
          },
          "id": "By2oO91R7",
          "label": "RES",
          "position": {
            "x": 8,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-number"
        },
        "H1bf4ME1CQ": {
          "boundLiterals": {
            "__out__": "A3"
          },
          "description": "XM Pin",
          "id": "H1bf4ME1CQ",
          "label": "XM",
          "position": {
            "x": 4,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "HJVMNMVkAQ": {
          "id": "HJVMNMVkAQ",
          "position": {
            "x": 3,
            "y": 1,
            "units": "slots"
          },
          "type": "xod/patch-nodes/not-implemented-in-xod"
        },
        "HJ_xXNyAm": {
          "description": "Touch Detected",
          "id": "HJ_xXNyAm",
          "label": "Touch",
          "position": {
            "x": 7,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-pulse"
        },
        "SJa7x51AX": {
          "boundLiterals": {
            "__out__": "Continuously"
          },
          "id": "SJa7x51AX",
          "label": "INIT",
          "position": {
            "x": 10,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-pulse"
        },
        "rJMfNzNkAm": {
          "boundLiterals": {
            "__out__": "D8"
          },
          "description": "YM Pin",
          "id": "rJMfNzNkAm",
          "label": "YM",
          "position": {
            "x": 6,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "rJQGEzEkCm": {
          "boundLiterals": {
            "__out__": "D9"
          },
          "description": "XP Pin",
          "id": "rJQGEzEkCm",
          "label": "XP",
          "position": {
            "x": 0,
            "y": 0,
            "units": "slots"
          },
          "type": "xod/patch-nodes/input-port"
        },
        "ryeLGEkRX": {
          "id": "ryeLGEkRX",
          "label": "YTouch",
          "position": {
            "x": 3,
            "y": 2,
            "units": "slots"
          },
          "type": "xod/patch-nodes/output-number"
        }
      },
      "path": "Storage/bradzilla84/touch-screen"
    }
  }
}
