diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/BLDC/TINYMOVR/TINYMOVR_CALIBRATE/a1-[autogen]/docstring.txt b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/BLDC/TINYMOVR/TINYMOVR_CALIBRATE/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..4caa19c488
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/BLDC/TINYMOVR/TINYMOVR_CALIBRATE/a1-[autogen]/docstring.txt
@@ -0,0 +1,10 @@
+Discover and calibrate a connected tinymovr BLDC driver through a CANine USB-to-CAN controller.
+
+ Parameters
+ ----------
+ None
+
+ Returns
+ -------
+ TextBlob
+ Traceback error
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/BLDC/TINYMOVR/TINYMOVR_SET_VELOCITY/a1-[autogen]/docstring.txt b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/BLDC/TINYMOVR/TINYMOVR_SET_VELOCITY/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..3c8d8087ce
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/BLDC/TINYMOVR/TINYMOVR_SET_VELOCITY/a1-[autogen]/docstring.txt
@@ -0,0 +1,11 @@
+Direct a tinymovr BLDC driver to a set velocity.
+
+ Input
+ -----
+ velocity : Scalar
+ Servo velocity (10k ticks/sec [1, 15]).
+
+ Returns
+ -------
+ Textblob
+ Traceback error (if any)
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/TIC.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/TIC.md
new file mode 100644
index 0000000000..a1c94ff619
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/TIC.md
@@ -0,0 +1,47 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/docstring.json b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/docstring.json
new file mode 100644
index 0000000000..edde653427
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/docstring.json
@@ -0,0 +1,21 @@
+{
+ "description": "The user defines the speed and the sleep time between movements.\n\n(To choose the position, use the STEPPER_DRIVER_TIC_KNOB.)",
+ "parameters": [
+ {
+ "name": "current_limit",
+ "type": "int",
+ "description": "Defines the current limitation that the stepper motor will receive."
+ },
+ {
+ "name": "sleep_time",
+ "type": "int",
+ "description": "Defines the sleep time after moving to each position."
+ },
+ {
+ "name": "speed",
+ "type": "int",
+ "description": "Defines the speed of the motor movement (between 0 and 200000)."
+ }
+ ],
+ "returns": []
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/docstring.txt b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..cafc92d372
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/docstring.txt
@@ -0,0 +1,14 @@
+The STEPPER_DRIVER_TIC node controls a stepper motor's movement with a TIC driver.
+
+ The user defines the speed and the sleep time between movements.
+
+ (To choose the position, use the STEPPER_DRIVER_TIC_KNOB.)
+
+ Parameters
+ ----------
+ current_limit : int
+ Defines the current limitation that the stepper motor will receive.
+ sleep_time : int
+ Defines the sleep time after moving to each position.
+ speed : int
+ Defines the speed of the motor movement (between 0 and 200000).
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/python_code.txt b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..d2cfda5213
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/a1-[autogen]/python_code.txt
@@ -0,0 +1,37 @@
+from flojoy import flojoy, OrderedPair
+from typing import Optional
+from ticlib import (
+ TicUSB,
+) # Import the TicUSB library to send command to Tic drivers with USB connection
+from time import sleep
+
+
+@flojoy(deps={"ticlib": "0.2.2"})
+def TIC(
+ default: Optional[OrderedPair] = None,
+ current_limit: int = 30,
+ sleep_time: int = 2,
+ speed: int = 100000,
+) -> OrderedPair:
+
+
+ # Setting default positions
+ positions: list[int] = [50, 100, 150, 200]
+
+ # Declaration of the stepper driver
+ tic: TicUSB = TicUSB()
+ tic.halt_and_set_position(0) # Set the position to 0
+ # Set the current limit of the TIC driver
+ tic.set_current_limit(current_limit)
+ tic.energize() # Turn on the driver
+ tic.exit_safe_start() # The driver is now ready to receive commands
+
+ for i in range(0, len(positions)):
+ tic.set_max_speed(speed) # Set motor speed
+ tic.set_target_position(positions[i]) # Set target positions
+ sleep(sleep_time)
+
+ tic.deenergize()
+ tic.enter_safe_start()
+
+ return OrderedPair(x=positions, y=positions)
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/hardware.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/media.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/notes.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/examples/EX1/app.json b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/examples/EX1/app.json
new file mode 100644
index 0000000000..cdd50cdcb4
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/examples/EX1/app.json
@@ -0,0 +1,84 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 150,
+ "height": 150,
+ "id": "STEPPER_DRIVER_TIC-deb4fca7-fc18-443d-bd70-f1455a749eff",
+ "type": "INSTRUMENTS",
+ "data": {
+ "id": "STEPPER_DRIVER_TIC-deb4fca7-fc18-443d-bd70-f1455a749eff",
+ "label": "STEPPER DRIVER TIC",
+ "func": "STEPPER_DRIVER_TIC",
+ "type": "INSTRUMENTS",
+ "ctrls": {
+ "current_limit": {
+ "type": "int",
+ "default": 30,
+ "functionName": "STEPPER_DRIVER_TIC",
+ "param": "current_limit",
+ "value": 30,
+ },
+ "sleep_time": {
+ "type": "int",
+ "default": 2,
+ "functionName": "STEPPER_DRIVER_TIC",
+ "param": "sleep_time",
+ "value": 2,
+ },
+ "speed": {
+ "type": "int",
+ "default": 100000,
+ "functionName": "STEPPER_DRIVER_TIC",
+ "param": "speed",
+ "value": 100000,
+ },
+ },
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "multiple": false,
+ }
+ ],
+ "outputs": [
+ {"name": "default", "id": "default", "type": "OrderedPair"}
+ ],
+ "pip_dependencies": [{"name": "ticlib", "v": "0.2.2"}],
+ "path": "PYTHON/nodes/INSTRUMENTS/STEPPER_MOTOR/STEPPER_DRIVER_TIC/STEPPER_DRIVER_TIC.py",
+ "selected": false,
+ },
+ "position": {"x": 883.1245033729516, "y": -2.309719518942927},
+ "selected": false,
+ "positionAbsolute": {"x": 883.1245033729516, "y": -2.309719518942927},
+ "dragging": true,
+ }
+ ],
+ "edges": [],
+ "viewport": {
+ "x": -358.59636577932724,
+ "y": 99.85117439980638,
+ "zoom": 1.0581352782820395,
+ },
+ },
+ "ctrlsManifest": [
+ {
+ "type": "input",
+ "name": "Slider",
+ "id": "INPUT_PLACEHOLDER",
+ "hidden": false,
+ "minHeight": 1,
+ "minWidth": 2,
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "h": 2,
+ "w": 2,
+ "minH": 1,
+ "minW": 2,
+ "i": "INPUT_PLACEHOLDER",
+ },
+ }
+ ],
+}
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/examples/EX1/example.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/examples/EX1/example.md
new file mode 100644
index 0000000000..fc3caa95ec
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC/examples/EX1/example.md
@@ -0,0 +1,15 @@
+---
+title: STEPPER_DRIVER_TIC
+description: This node controls a stepper motor movement with a TIC driver. The user defines the speed and the sleep time between movements.
+keyword: [Python, Instrument, Stepper motor control, Python integration with stepper driver, Motion control and automation, Python"-"based stepper motor control, Stepper motor driver integration, Accurate motor movement with Python, Enhance motion control with Python, Streamline motor automation, Precise motor control using Python, Python control of stepper driver TIC]
+image: https://raw.githubusercontent.com/flojoy-ai/docs/main/docs/nodes/INSTRUMENTS/STEPPER_MOTOR/STEPPER_DRIVER_TIC/examples/EX1/output.jpeg
+---
+
+In this example, the [`STEPPER_DRIVER_TIC`](https://github.com/flojoy-io/nodes/blob/main/INSTRUMENTS/STEPPER_MOTOR/STEPPER_DRIVER_TIC/STEPPER_DRIVER_TIC.py) node controls a stepper motor movement with a TIC driver.
+
+First, the user must define the current limitation, which depends on the motor's size and model.
+After that, he can set the speed and choose the sleep time between movements.
+
+Then, after clicking the PLAY button, the motor will move between the four default positions. (To choose positions, use the [`STEPPER_DRIVER_TIC_KNOB`](https://github.com/flojoy-io/nodes/blob/main/INSTRUMENTS/STEPPER_MOTOR/STEPPER_DRIVER_TIC_KNOB/STEPPER_DRIVER_TIC_KNOB.py) node.)
+
+To create a repetitive movement, use the [`LOOP`](https://github.com/flojoy-io/nodes/blob/main/LOGIC_GATES/LOOPS/LOOP/LOOP.py) node.
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/TIC_KNOB.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/TIC_KNOB.md
new file mode 100644
index 0000000000..cd7a13541c
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/TIC_KNOB.md
@@ -0,0 +1,47 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/docstring.json b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/docstring.json
new file mode 100644
index 0000000000..73ef385bb6
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/docstring.json
@@ -0,0 +1,26 @@
+{
+ "description": "The user controls the motor's rotation with the knob position, specified in the node's parameters.",
+ "parameters": [
+ {
+ "name": "knob_value",
+ "type": "int",
+ "description": "Defines the position of the motor (rotational movement)."
+ },
+ {
+ "name": "current_limit",
+ "type": "int",
+ "description": "Defines the current limitation that the stepper motor will receive."
+ },
+ {
+ "name": "sleep_time",
+ "type": "int",
+ "description": "Defines the sleep time after moving to each position."
+ },
+ {
+ "name": "speed",
+ "type": "int",
+ "description": "Defines the speed of the motor movement (between 0 and 200000)."
+ }
+ ],
+ "returns": []
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/docstring.txt b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..529afb278b
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/docstring.txt
@@ -0,0 +1,14 @@
+The STEPPER_DRIVER_TIC_KNOB controls a stepper motor's movement with a TIC driver.
+
+ The user controls the motor's rotation with the knob position, specified in the node's parameters.
+
+ Parameters
+ ----------
+ knob_value : int
+ Defines the position of the motor (rotational movement).
+ current_limit : int
+ Defines the current limitation that the stepper motor will receive.
+ sleep_time : int
+ Defines the sleep time after moving to each position.
+ speed : int
+ Defines the speed of the motor movement (between 0 and 200000).
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/python_code.txt b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..2f98079318
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/a1-[autogen]/python_code.txt
@@ -0,0 +1,41 @@
+from flojoy import flojoy, OrderedPair
+from typing import Optional
+
+# Import the TicUSB library to send command to Tic drivers with USB connection
+from ticlib import TicUSB
+from time import sleep
+
+
+@flojoy(deps={"ticlib": "0.2.2"})
+def TIC_KNOB(
+ default: Optional[OrderedPair] = None,
+ knob_value: int = 0,
+ current_limit: int = 30,
+ sleep_time: int = 2,
+ speed: int = 200000,
+) -> OrderedPair:
+
+
+ # Converting the knob value into a position
+ knob_position: int = 2 * knob_value
+
+ # Declaration of the stepper driver (You can add serial number to specify the driver)
+ tic: TicUSB = TicUSB()
+ # Set the current limit for the driver TIC
+ tic.set_current_limit(current_limit)
+ tic.energize() # Turn on the driver
+ tic.exit_safe_start() # The driver is now ready to receive commands
+ # Set maximum speed for the motor during first movement.
+ tic.set_max_speed(speed)
+
+ tic.halt_and_set_position(0) # Set initial position to origin
+ sleep(sleep_time)
+
+ # Set target position for the first movement
+ tic.set_target_position(knob_position)
+ sleep(sleep_time)
+
+ tic.deenergize()
+ tic.enter_safe_start()
+
+ return OrderedPair(x=knob_position, y=speed)
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/hardware.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/media.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/notes.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/examples/EX1/app.json b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/examples/EX1/app.json
new file mode 100644
index 0000000000..e0a12da8f6
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/examples/EX1/app.json
@@ -0,0 +1,106 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 150,
+ "height": 150,
+ "id": "STEPPER_DRIVER_TIC_KNOB-3b234e79-4648-4661-a8e8-3e14b3d0e72b",
+ "type": "INSTRUMENTS",
+ "data": {
+ "id": "STEPPER_DRIVER_TIC_KNOB-3b234e79-4648-4661-a8e8-3e14b3d0e72b",
+ "label": "STEPPER DRIVER TIC KNOB",
+ "func": "STEPPER_DRIVER_TIC_KNOB",
+ "type": "INSTRUMENTS",
+ "ctrls": {
+ "knob_value": {
+ "type": "int",
+ "default": 0,
+ "functionName": "STEPPER_DRIVER_TIC_KNOB",
+ "param": "knob_value",
+ "value": 0
+ },
+ "current_limit": {
+ "type": "int",
+ "default": 30,
+ "functionName": "STEPPER_DRIVER_TIC_KNOB",
+ "param": "current_limit",
+ "value": 30
+ },
+ "sleep_time": {
+ "type": "int",
+ "default": 2,
+ "functionName": "STEPPER_DRIVER_TIC_KNOB",
+ "param": "sleep_time",
+ "value": 2
+ },
+ "speed": {
+ "type": "int",
+ "default": 200000,
+ "functionName": "STEPPER_DRIVER_TIC_KNOB",
+ "param": "speed",
+ "value": 200000
+ }
+ },
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "multiple": false
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "ticlib",
+ "v": "0.2.2"
+ }
+ ],
+ "path": "PYTHON/nodes/INSTRUMENTS/STEPPER_MOTOR/STEPPER_DRIVER_TIC_KNOB/STEPPER_DRIVER_TIC_KNOB.py",
+ "selected": false
+ },
+ "position": {
+ "x": 934.1949826356821,
+ "y": -1.452956731347598
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 934.1949826356821,
+ "y": -1.452956731347598
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [],
+ "viewport": {
+ "x": -358.59636577932724,
+ "y": 99.85117439980638,
+ "zoom": 1.0581352782820395
+ }
+ },
+ "ctrlsManifest": [
+ {
+ "type": "input",
+ "name": "Slider",
+ "id": "INPUT_PLACEHOLDER",
+ "hidden": false,
+ "minHeight": 1,
+ "minWidth": 2,
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "h": 2,
+ "w": 2,
+ "minH": 1,
+ "minW": 2,
+ "i": "INPUT_PLACEHOLDER"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/examples/EX1/example.md b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/examples/EX1/example.md
new file mode 100644
index 0000000000..fdb3688444
--- /dev/null
+++ b/docs/nodes/IO/MOTION/MOTOR_DRIVERS/STEPPER/POLULU/TIC_KNOB/examples/EX1/example.md
@@ -0,0 +1,14 @@
+---
+title: STEPPER_DRIVER_TIC_KNOB
+description: In this example, the STEPPER_DRIVER_TIC_KNOB node controls a stepper motor movement with a TIC driver. It allows you to control the motor's rotation with a KNOB button. From 0 to 100 corresponds to a rotation between 0 and 360 degrees.
+keyword: [Python, Instrument, Stepper motor control with knob, Python integration with stepper driver, Motion control and automation, Python"-"based stepper motor control, Stepper motor driver integration, Accurate motor movement with Python, Enhance motion control with knob, Streamline motor automation, Precise motor control using Python, Python control of stepper driver TIC with knob]
+image: https://raw.githubusercontent.com/flojoy-ai/docs/main/docs/nodes/INSTRUMENTS/STEPPER_MOTOR/STEPPER_DRIVER_TIC_KNOB/examples/EX1/output.jpeg
+---
+
+In this example, the [`STEPPER_DRIVER_TIC_KNOB`](https://github.com/flojoy-io/nodes/blob/main/INSTRUMENTS/STEPPER_MOTOR/STEPPER_DRIVER_TIC_KNOB/STEPPER_DRIVER_TIC_KNOB.py) node controls a stepper motor movement with a TIC driver. It allows you to control the motor's rotation with a KNOB button. (From 0 to 100 corresponds to a rotation between 0 and 360 degrees.)
+
+First, the user must define the current limitation, which depends on the motor's size and model. After that, he can set the speed, the rotation, and the sleep time to create a specific movement for different applications. Then, after clicking the PLAY button, the motor will start moving.
+
+After updating the knob position, click on PLAY again to initiate a new movement.
+
+To create a repetitive movement, use the [`LOOP`](https://github.com/flojoy-io/nodes/blob/main/LOGIC_GATES/LOOPS/LOOP/LOOP.py) and [`GOTO`](https://github.com/flojoy-io/nodes/blob/main/LOGIC_GATES/LOOPS/GOTO/GOTO.py) nodes.
\ No newline at end of file
diff --git a/docs/nodes/IO/PROTOCOLS/CAN/CANABLE/CAN_MESSAGE/a1-[autogen]/docstring.txt b/docs/nodes/IO/PROTOCOLS/CAN/CANABLE/CAN_MESSAGE/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..e0ac0e29f4
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/CAN/CANABLE/CAN_MESSAGE/a1-[autogen]/docstring.txt
@@ -0,0 +1,18 @@
+The CAN_MESSAGE node sends a message onto CAN network through a slcan-compatible USB-to-CAN adapter.
+
+ Inputs
+ ------
+ message : Vector
+ The array of data to send to the CAN bus.
+
+ Parameters
+ ----------
+ arbitration_id : int
+ Unique ID for message being sent.
+ is_extended_id : bool
+ Flag that controls the size of the arbitration_id field.
+
+ Returns
+ -------
+ Textblob
+ Traceback error
diff --git a/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_ADDR/a1-[autogen]/docstring.txt b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_ADDR/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..0a108c9064
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_ADDR/a1-[autogen]/docstring.txt
@@ -0,0 +1,16 @@
+The PROLOGIX_ADDR node sets the GPIB address of an instrument using the Prologix USB-to-GPIB or USB-to-Ethernet adapter.
+
+ Inputs
+ ------
+ default: DataContainer
+ Any DataContainer - likely connected to the output of the OPEN_SERIAL node.
+
+ Parameters
+ ----------
+ connection: Serial
+ The open serial connection with the instrument.
+
+ Returns
+ -------
+ TextBlob
+ Response from the Prologix USB-to-GPIB controller.
diff --git a/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_AUTO/a1-[autogen]/docstring.txt b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_AUTO/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..bc574fa77e
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_AUTO/a1-[autogen]/docstring.txt
@@ -0,0 +1,18 @@
+The PROLOGIX_AUTO node toggles "Read-After-Write" mode on or off.
+
+ When Read-After-Write is on, the Prologix USB-to-GPIB controller automatically reads a bench-top instrument's response after writing a command to it.
+
+ Inputs
+ ------
+ default: DataContainer
+ Any DataContainer - likely connected to the output of the OPEN_SERIAL node.
+
+ Parameters
+ ----------
+ connection: Serial
+ The open serial connection with the instrument.
+
+ Returns
+ -------
+ TextBlob
+ Response from the Prologix USB-to-GPIB controller.
diff --git a/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_HELP/a1-[autogen]/docstring.txt b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_HELP/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..0e48a32202
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_HELP/a1-[autogen]/docstring.txt
@@ -0,0 +1,16 @@
+The PROLOGIX_HELP command returns a list of available Prologix USB-to-GPIB firmware commands.
+
+ Inputs
+ ------
+ default: DataContainer
+ Any DataContainer - likely connected to the output of the OPEN_SERIAL node.
+
+ Parameters
+ ----------
+ connection: Serial
+ The open serial connection with the instrument.
+
+ Returns
+ -------
+ TextBlob
+ A list of available Prologix USB-to-GPIB firmware commands
diff --git a/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_MODE/a1-[autogen]/docstring.txt b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_MODE/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..6bc0265178
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_MODE/a1-[autogen]/docstring.txt
@@ -0,0 +1,32 @@
+The PROLOGIX_MODE node sets the mode of the Prologix USB-to-GPIB controller - 1 for CONTROLLER mode and 0 for DEVICE mode.
+
+ From the Prologix manual:
+
+ In Controller mode, the GPIB-USB Controller acts as the Controller-In-Charge (CIC)
+ on the GPIB bus. When the controller receives a command over the USB port
+ terminated by the USB terminator – CR (ASCII 13) or LF (ASCII 10) – it addresses the
+ GPIB instrument at the currently specified address (See ++addr command) to listen, and
+ passes along the received data.
+
+ In Device mode, Prologix GPIB-USB Controller acts as another peripheral on the GPIB
+ bus. In this mode, the controller can act as a GPIB TALKER or GPIB LISTENER
+ only. Since Prologix GPIB-USB Controller is not the Controller-In-Charge while in this
+ mode, it expects to receive commands from a GPIB controller. When Device mode is
+ enabled Prologix GPIB-USB controller configures itself as a GPIB Listener. All data
+ received by the controller over the GPIB port is passed along to the USB port without
+ buffering.
+
+ Inputs
+ ------
+ default: DataContainer
+ Any DataContainer - likely connected to the output of the OPEN_SERIAL node.
+
+ Parameters
+ ----------
+ connection: Serial
+ The open serial connection with the instrument.
+
+ Returns
+ -------
+ TextBlob
+ Response from the Prologix USB-to-GPIB controller.
diff --git a/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_VER/a1-[autogen]/docstring.txt b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_VER/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..b776214225
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/GPIB/PROLOGIX/PROLOGIX_VER/a1-[autogen]/docstring.txt
@@ -0,0 +1,16 @@
+The PROLOGIX_VER command queries the Prologix USB-to-GPIB firmware version.
+
+ Inputs
+ ------
+ default: DataContainer
+ Any DataContainer - likely connected to the output of the OPEN_SERIAL node.
+
+ Parameters
+ ----------
+ connection: Serial
+ The open serial connection with the instrument.
+
+ Returns
+ -------
+ TextBlob
+ The Prologix controller available commands.
diff --git a/docs/nodes/IO/PROTOCOLS/SCPI/SCPI_WRITE/a1-[autogen]/docstring.txt b/docs/nodes/IO/PROTOCOLS/SCPI/SCPI_WRITE/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..999209a695
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/SCPI/SCPI_WRITE/a1-[autogen]/docstring.txt
@@ -0,0 +1,16 @@
+The SCPI_WRITE node writes a SCPI command to a connected bench-top instrument and returns the result.
+
+ Inputs
+ ------
+ default: DataContainer
+ Any DataContainer - likely connected to the output of the OPEN_SERIAL node.
+
+ Parameters
+ ----------
+ connection: Serial
+ The open serial connection with the instrument.
+
+ Returns
+ -------
+ Scalar|TextBlob
+ The return value from the bench-top instrument as a Scalar or TextBlob.
diff --git a/docs/nodes/IO/PROTOCOLS/SERIAL/OPEN_SERIAL/a1-[autogen]/docstring.json b/docs/nodes/IO/PROTOCOLS/SERIAL/OPEN_SERIAL/a1-[autogen]/docstring.json
new file mode 100644
index 0000000000..cb4bff4fb7
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/SERIAL/OPEN_SERIAL/a1-[autogen]/docstring.json
@@ -0,0 +1,17 @@
+{
+ "description": null,
+ "parameters": [
+ {
+ "name": "device",
+ "type": "Serial",
+ "description": "The connected serial device."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": null
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/PROTOCOLS/SERIAL/OPEN_SERIAL/a1-[autogen]/python_code.txt b/docs/nodes/IO/PROTOCOLS/SERIAL/OPEN_SERIAL/a1-[autogen]/python_code.txt
index 267175c76c..87b0c5ddb5 100644
--- a/docs/nodes/IO/PROTOCOLS/SERIAL/OPEN_SERIAL/a1-[autogen]/python_code.txt
+++ b/docs/nodes/IO/PROTOCOLS/SERIAL/OPEN_SERIAL/a1-[autogen]/python_code.txt
@@ -6,15 +6,7 @@ from flojoy.connection_manager import DeviceConnectionManager
@flojoy(deps={"pyserial": "3.5"})
def OPEN_SERIAL(device: SerialDevice, baudrate: int = 9600) -> TextBlob:
- """The OPEN_SERIAL node opens a serial connection through your computer's USB or RS-232 port.
- Parameters
- ----------
- device: Serial
- The connected serial device.
- Returns
- -------
- TextBlob
- """
+
ser = serial.Serial(
port=device.get_port(),
@@ -27,4 +19,4 @@ def OPEN_SERIAL(device: SerialDevice, baudrate: int = 9600) -> TextBlob:
DeviceConnectionManager.register_connection(device, ser)
- return TextBlob(text_blob=json.dumps(ser.get_settings()))
\ No newline at end of file
+ return TextBlob(text_blob=json.dumps(ser.get_settings()))
diff --git a/docs/nodes/IO/PROTOCOLS/SERIAL/SERIAL_SINGLE_MEASUREMENT/a1-[autogen]/docstring.json b/docs/nodes/IO/PROTOCOLS/SERIAL/SERIAL_SINGLE_MEASUREMENT/a1-[autogen]/docstring.json
new file mode 100644
index 0000000000..b1d987e054
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/SERIAL/SERIAL_SINGLE_MEASUREMENT/a1-[autogen]/docstring.json
@@ -0,0 +1,16 @@
+{
+ "description": null,
+ "parameters": [
+ {
+ "name": "baudrate",
+ "type": "int",
+ "description": "Baud rate for the serial communication."
+ },
+ {
+ "name": "comport",
+ "type": "string",
+ "description": "Defines the comunication port on which the serial device is connected."
+ }
+ ],
+ "returns": []
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/PROTOCOLS/SERIAL/SERIAL_TIMESERIES/a1-[autogen]/docstring.json b/docs/nodes/IO/PROTOCOLS/SERIAL/SERIAL_TIMESERIES/a1-[autogen]/docstring.json
new file mode 100644
index 0000000000..bbf5c0d639
--- /dev/null
+++ b/docs/nodes/IO/PROTOCOLS/SERIAL/SERIAL_TIMESERIES/a1-[autogen]/docstring.json
@@ -0,0 +1,31 @@
+{
+ "description": null,
+ "parameters": [
+ {
+ "name": "num_readings",
+ "type": "int",
+ "description": "Number of points to record."
+ },
+ {
+ "name": "record_period",
+ "type": "float",
+ "description": "Length between two recordings in seconds."
+ },
+ {
+ "name": "baudrate",
+ "type": "int",
+ "description": "Baud rate for the serial device."
+ },
+ {
+ "name": "comport",
+ "type": "string",
+ "description": "COM port of the serial device."
+ },
+ {
+ "name": "num_readings * record_period",
+ "type": "",
+ "description": "Is roughly the run length in seconds."
+ }
+ ],
+ "returns": []
+}
\ No newline at end of file
diff --git a/docs/nodes/TRANSFORMERS/TYPE_CASTING/ORDERED_PAIR_2_VECTOR/a1-[autogen]/docstring.txt b/docs/nodes/TRANSFORMERS/TYPE_CASTING/ORDERED_PAIR_2_VECTOR/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..e51e43393c
--- /dev/null
+++ b/docs/nodes/TRANSFORMERS/TYPE_CASTING/ORDERED_PAIR_2_VECTOR/a1-[autogen]/docstring.txt
@@ -0,0 +1,11 @@
+The ORDERED_PAIR_2_VECTOR return the y component of an ordered pair as a Vector.
+
+ Inputs
+ ------
+ default : OrderedPair
+ The input OrderedPair.
+
+ Returns
+ -------
+ Vector
+ The y component of the input OrderedPair.
diff --git a/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/docstring.txt b/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/docstring.txt
index 8db9cc3153..d091fba5f9 100644
--- a/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/docstring.txt
+++ b/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/docstring.txt
@@ -3,9 +3,14 @@ The TEXT_VIEW node creates a text visualization for a given TextBlob DataContain
Inputs
------
default : TextBlob
- the DataContainer to be visualized in text format
+ The DataContainer to be visualized in text format
+
+ Parameters
+ ----------
+ prettify : Boolean
+ Whether to prettify the displayed text (defaults to True)
Returns
-------
TextBlob
- the DataContainer containing text data
+ The DataContainer containing text data
diff --git a/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/python_code.txt b/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/python_code.txt
index 16cd9891c1..7b3dc82392 100644
--- a/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/python_code.txt
+++ b/docs/nodes/VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/a1-[autogen]/python_code.txt
@@ -1,8 +1,14 @@
+import pprint
from flojoy import flojoy, TextBlob
@flojoy
-def TEXT_VIEW(default: TextBlob):
+def TEXT_VIEW(default: TextBlob, prettify: bool = False) -> TextBlob:
- return default
+ s = default.text_blob
+
+ if prettify:
+ s = pprint.pformat(default.text_blob)
+
+ return TextBlob(s)
diff --git a/nodeSidebar.json b/nodeSidebar.json
index 31033e3fb9..754a27cffa 100644
--- a/nodeSidebar.json
+++ b/nodeSidebar.json
@@ -191,7 +191,6 @@
"nodes/IO/INSTRUMENTS/OSCILLOSCOPES/TEKTRONIX/MDO3XXX/BASIC/TRIGGER_LEVEL_MDO3XXX/TRIGGER_LEVEL_MDO3XXX"
],
"I/O > Protocols": [
- "nodes/IO/PROTOCOLS/CAN/CAN",
"nodes/IO/PROTOCOLS/SCPI/IDN/IDN",
"nodes/IO/PROTOCOLS/SCPI/MEASURE_VOLTAGE/MEASURE_VOLTAGE",
"nodes/IO/PROTOCOLS/SERIAL/BASIC/OPEN_SERIAL/OPEN_SERIAL",