**
**
代码:
from multiprocessing import Process, Queue
import keyboard, csv, serial, os
import numpy as np
def deal_with_csv_file(file_path='save_csv.csv', csv_head=[], mode='new'):
'''
csv文件预处理
file_path:文件保存的路径
mode两种模式:
'new'删除原同名文件(如果有)并新建文件
'add'在原文件后续写
csv_head是以列表形式给出的csv文件每列标题,只有在'new'模式才有用
'''
def create_csv(csv_head=[], path='save_csv.csv'):
'''
新建csv文件
'''
with open(path, 'w', newline='') as f:
csv_write = csv.writer(f)
if csv_head!=[]:
csv_write.writerow(csv_head)
if mode=='new': #新建模式
if os.path.isfile(file_path):
os.remove(file_path)
create_csv(csv_head, file_path)
elif mode=='add': #续写模式
if os.path.isfile(file_path)==False:
print('源文件缺失,自动新建')
create_csv(csv_head, file_path)
def serial_to_csv(q):
'''
第一进程,从串口保存数据到csv文件
'''
#初始设置
file_path = 'data_save/12.8_1.csv' #保存文件名称
csv_head = ['x','y'] #数据含义
mode = 'new' #新建文件还是在原有文件上续写
# mode = 'add'
ser = serial.Serial('COM8', baudrate=115200) #串口信息(名称,波特率)
ser_msg = ['\r\n$', '#', ','] #串口符号规定,若有换行则需在原有开始符前加\r\n
show = True #是否实时展示数据
#csv文件预处理
deal_with_csv_file(file_path, csv_head, mode)
#开始读数并保存
with open(file_path,'a+', newline='') as f: #'+': 表示文件可以同时进行读取和写入。在追加模式下a,可以通过 'a+' 同时进行文件的读取和追加写入。
csv_write = csv.writer(f)
n = 0
while q.empty():
num_list=[1,2]
csv_write.writerow(num_list)
if show:
print('\r', num_list, end='')
n = n+1
print('\n总共保存了', n-1, '个数据')
def key_board_listen(q):
'''
第二进程,键盘监听充当中断函数
'''
keyboard.wait('esc')
q.put(1)
if __name__ == "__main__":
'''
从串口保存数据到csv文件,具体参数设置在serial_to_csv中。
按下esc停止保存,程序退出
'''
q = Queue()
p1 = Process(target=serial_to_csv, args=(q,))
p2 = Process(target=key_board_listen, args=(q,))
p1.start()
p2.start()
p1.join()
p2.join()