Python / Pyserial / Arduino将串行数据写入txt文件的问题

问题描述 投票:0回答:1

因此,我有一个代码,可从Arduino读取传入的串行数据,并在按下特定键时也写入串行数据,我也想将此传入的串行数据写入文本文件,并且我正在使用线程。这是代码:

from pynput import keyboard
import threading
import serial
import sys
import io




class SerialReaderThread(threading.Thread):

    ser = None
    def run(self):
        global ser

        ser = serial.Serial('COM4', baudrate = 9600, timeout = 20)

        while True:
            print(ser.readline().decode('utf-8'))


class FileWriting(threading.Thread):



   def run(self):

       global ser    

       while True:

            with io.open("output.txt", "a", encoding="utf-8") as f:
                f.write(ser.readline().decode('utf-8'))


class KeyboardThread(threading.Thread):

    def run(self):
        global ser
        def on_press(key):
            global ser
            try:
                format(key.char)


                if key.char == "1":
                    ser.write(b'1\r\n') #serial write - 1

                elif key.char == "2":
                    ser.write(b'2\r\n') #serial write - 2

                elif key.char == "3":
                    ser.write(b'3\r\n') #serial write - 3

                elif key.char == "4":
                    ser.write(b'4\r\n') #serial write - 4

                elif key.char == "5":
                    ser.write(b'5\r\n') #serial write - 5    

                elif key.char == "6":
                    ser.write(b'6\r\n') #serial write - 6

                elif key.char == "0":
                    ser.write(b'0\r\n') #serial write - 0      
            except AttributeError:
                print(''.format(key))





        with keyboard.Listener(on_press=on_press) as listener:
            listener.join()

        listener = keyboard.Listener(on_press=on_press)
        listener.start()

serial_thread = SerialReaderThread()
keyboard_thread = KeyboardThread()
file_thread = FileWriting()


serial_thread.start()
keyboard_thread.start()
file_thread.start()
serial_thread.join()
keyboard_thread.join()
file_thread.join()

现在,我的问题是我无法写入文件,读取串行数据可以正常工作,并且向Arduino的写入也可以正常工作,但是当我尝试额外写入文件时,会出现此错误。

    Exception in thread Thread-3:
Traceback (most recent call last):
  File "C:\Users\Tsotne\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "C:\Users\Tsotne\AppData\Local\Programs\Python\Python38-32\project\menucode.py", line 33, in run
    f.write(ser.readline().decode('utf-8'))
NameError: name 'ser' is not defined

非常感谢您的帮助,谢谢。

python file arduino serial-port pyserial
1个回答
0
投票
全局变量通常在最外层初始化,因此将ser = None移至第6行。(您在类中的使用使ser成为类变量,而不是全局变量。)您无需声明[ C0],但要更改其值的代码块除外。因此,请删除除global ser之前的所有字符以外的所有字符。
© www.soinside.com 2019 - 2024. All rights reserved.