Procházet zdrojové kódy

add led in freegrasping

DESKTOP-4GKCI80\Neuracle před 10 měsíci
rodič
revize
51ff52e179
3 změnil soubory, kde provedl 47 přidání a 5 odebrání
  1. 17 5
      .vscode/launch.json
  2. 17 0
      backend/device/arduino.py
  3. 13 0
      backend/free_grasp.py

+ 17 - 5
.vscode/launch.json

@@ -15,7 +15,7 @@
             "args": ["--side","right",
             "--trial-num","15",  
             "--major-side-num", "10",  
-            "--trigger-port", "COM2"]
+            "--trigger-port", "COM6"]
         },
         {
             "name": "General training paradigm",
@@ -25,12 +25,12 @@
             "console": "integratedTerminal",
             "cwd": "${workspaceFolder}/backend",
             "justMyCode": true,
-            "args": ["--subj", "TT01", 
+            "args": ["--subj", "XW01", 
             "--side","left",
             "--n-trials", "15", 
             "--hand-feedback",
             "--hand-port", "COM3",
-            "--trigger-port", "COM2", 
+            "--trigger-port", "COM6", 
             "-fm", "flex", 
             "-vfr", "0", 
             "--difficulty", "easy",
@@ -44,14 +44,26 @@
             "console": "integratedTerminal",
             "cwd": "${workspaceFolder}/backend",
             "justMyCode": true,
-            "args": ["--subj", "TT01", 
+            "args": ["--subj", "XW01", 
             "--hand-port", "COM3", 
-            "--trigger-port", "COM2", 
+            "--trigger-port", "COM6", 
+            "--arduino-port","COM12",
             "-scth", "0.8",
             "-stp", "0.9",
             "--momentum", "0.7",
             "--model-filename", "riemann_rest+flex_01-12-2024-21-15-11.pkl"]
         },
+        // {
+        //     "name": "No peneumatic comparison",
+        //     "type": "debugpy",
+        //     "request": "launch",
+        //     "program": "no_pneumatic_hand.py",
+        //     "console": "integratedTerminal",
+        //     "cwd": "${workspaceFolder}/backend",
+        //     "justMyCode": true,
+        //     "args": ["--trigger-port", "COM6", 
+        //     "--arduino-port","COM12"]
+        // },
         {
             "name": "Band selection",
             "type": "debugpy",

+ 17 - 0
backend/device/arduino.py

@@ -0,0 +1,17 @@
+import serial
+import time
+
+def connect_to_arduino(serial_port, baud_rate):
+    try:
+        ser = serial.Serial(serial_port, baud_rate)
+        print(f"Connected to Arduino on {serial_port} at {baud_rate} baud.")
+        time.sleep(2)  # Wait for the serial connection to establish
+        return ser
+    except serial.SerialException as e:
+        print(f"Failed to connect to Arduino: {e}")
+        return None
+
+def send_toggle_command(ser):
+    ser.write(b't')
+
+

+ 13 - 0
backend/free_grasp.py

@@ -8,6 +8,7 @@ from psychopy import visual, core, event, logging
 from device.data_client import NeuracleDataClient
 from device.trigger_box import TriggerNeuracle
 from device.fubo_pneumatic_finger import FingerController
+from device.arduino import send_toggle_command,connect_to_arduino
 from settings.config import settings
 from bci_core.online import Controller, model_loader
 
@@ -40,6 +41,12 @@ def parse_args():
         type=str
     )
     parser.add_argument(
+        '--arduino-port',
+        dest='arduino_port',
+        help='Arduino serial port',
+        type=str
+    )
+    parser.add_argument(
         '--state-change-threshold',
         '-scth',
         dest='state_change_threshold',
@@ -108,6 +115,11 @@ if not args.debug:
     # connect to mechanical hand
     hand_device = FingerController(mode='step', init_params={'port': args.hand_port})
 
+    serial_port = args.arduino_port
+    baud_rate = 9600
+    # Connect to Arduino
+    ser = connect_to_arduino(serial_port, baud_rate)
+
 # setup window
 win = visual.Window(
         size=[1920, 1080], fullscr=True, screen=0,
@@ -167,6 +179,7 @@ while True:
         if not args.debug:
             trigger.send_trigger(int(decision))
             hand_device.move(action=fingermodel_ids_inverse[decision])
+            send_toggle_command(ser)
         if decision == 0:  # only when state changes to rest, give a freeze time
             core.wait(3)
     else: