From 73755ae35ac2c128d907c96a954d4576e8a4efee Mon Sep 17 00:00:00 2001
From: ym13n22 <ym13n22@soton.ac.uk>
Date: Sun, 14 Jul 2024 17:24:55 +0100
Subject: [PATCH] add

---
 .../communications.cpython-312.pyc            | Bin 2970 -> 2959 bytes
 Windows/__pycache__/storedata.cpython-312.pyc | Bin 1694 -> 1683 bytes
 integration/readEMG.py                        |  95 ++++++++++++++++++
 3 files changed, 95 insertions(+)
 create mode 100644 integration/readEMG.py

diff --git a/Windows/__pycache__/communications.cpython-312.pyc b/Windows/__pycache__/communications.cpython-312.pyc
index 662c689f117dabd56997902d2a083f083078e34c..1d7ea3f2a082120136ad7f065f08f9d0192590f1 100644
GIT binary patch
delta 67
zcmbOw-Y?E~nwOW0fq{YH|IA5gk{lcPN*UGcovmU*i&Kk=V|*jMd?RCAQj4=o@(W^$
XOLKEmi(*`T-D6U7(>HHne8vd?yZ{!-

delta 78
zcmeAdpC!(BnwOW0fq{Wx$;6)tH`q7wl`<N7Ia|eq7N-^!$M{Bi`9{XLq!wqF<QK#g
im*(cC7R9(_<|XDR1Qg|`7bWJ#IOnINZeGdwj1vI;>Koet

diff --git a/Windows/__pycache__/storedata.cpython-312.pyc b/Windows/__pycache__/storedata.cpython-312.pyc
index d4a0b0b715b242fb317453cc7073c3aa75bf369a..f046f6a5ba94073761a8aa551c16130f4198166c 100644
GIT binary patch
delta 39
scmbQoJDHdFG%qg~0|?BTlomCS_Y<SlBt|)QS6}y-)ZFyV28?;E0LV}Zd;kCd

delta 50
zcmbQtJCB$5G%qg~0|NuY_K80eTqp8=VsxFvC@18WnU|QO5Kxq#UX+*{<D8$8x>=Pm
Gj}-ueDi6#6

diff --git a/integration/readEMG.py b/integration/readEMG.py
new file mode 100644
index 0000000..d1a0dd1
--- /dev/null
+++ b/integration/readEMG.py
@@ -0,0 +1,95 @@
+import serial
+import time
+
+
+class EMGSensor:
+    def __init__(self, port='COM5', baudrate=9600):
+        self.port = port
+        self.baudrate = baudrate
+        self.ser = None
+        self._open_serial()
+
+    def _open_serial(self):
+        """
+        打开串口连接。
+        """
+        try:
+            self.ser = serial.Serial(self.port, self.baudrate, timeout=1)
+            print(f"Serial port {self.port} opened with baudrate {self.baudrate}.")
+        except Exception as e:
+            print(f"Error opening serial port: {e}")
+
+    def _decode(self, serial_data):
+        """
+        解码串口数据,返回两个ADC值。
+
+        :param serial_data: 从串口读取的原始数据
+        :return: 两个ADC值的列表
+        """
+        serial_string = serial_data.decode(errors="ignore")
+        adc_string_1 = ""
+        adc_string_2 = ""
+        adc_values = [0, 0]
+        if '\n' in serial_string:
+            # remove new line character
+            serial_string = serial_string.replace("\n", "")
+            if serial_string != '':
+                # Convert number to binary, placing 0s in empty spots
+                serial_string = format(int(serial_string, 10), "024b")
+
+                # Separate the input number from the data
+                adc_string_1 = serial_string[0:12]
+                adc_string_2 = serial_string[12:24]
+
+                adc_values[0] = int(adc_string_1, base=2)
+                adc_values[1] = int(adc_string_2, base=2)
+
+                return adc_values
+        return None
+
+    def read_emg_data(self):
+        """
+        从EMG传感器读取数据并返回两个输出值。
+
+        :return: 包含两个ADC值的列表,如果读取失败则返回 None
+        """
+        try:
+            # 读取一行数据
+            line = self.ser.readline()
+            emg_values = self._decode(line)
+            if emg_values:
+                return emg_values
+        except Exception as e:
+            print(f"Error reading data: {e}")
+        return None
+
+    def start_data_collection(self):
+        print("Starting EMG data collection...")
+        try:
+            while True:
+                emg_values = self.read_emg_data()
+                if emg_values is not None:
+                    print(f"EMG Value 1: {emg_values[0]}, EMG Value 2: {emg_values[1]}")
+                    # 在这里添加数据分析代码
+                    # 例如,计算平均值,滤波等
+                else:
+                    print("Failed to read EMG data")
+                time.sleep(0.1)  # 控制读取频率
+        except KeyboardInterrupt:
+            print("Stopping EMG data collection.")
+        finally:
+            self.close()
+
+    def close(self):
+        """
+        关闭串口连接。
+        """
+        if self.ser and self.ser.is_open:
+            self.ser.close()
+            print("Serial port closed.")
+
+
+if __name__ == "__main__":
+    sensor = EMGSensor(port='COM5', baudrate=9600)
+    sensor.start_data_collection()
+
-- 
GitLab