如何停止键盘输入的串行读取

所以我正在尝试制作一个程序来读取我的 Arduino 的串口。这一切正常,但问题是我无法在需要时阻止它。我的 arduino 不断发送数据(没关系)但我的脚本仅在 100 行读数后停止(按照我的设置)。在这 100 个读数之后,它会将列表保存到一个 csv 文件中。我怎样才能更早停止,例如在终端中输入“停止”或“退出”并仍然保存我的数据?ctrl+c 只是停止我的脚本而不保存。


我的代码:


import serial

import csv

import re

import pandas as pd

import time


portPath = "/dev/cu.usbmodem1411"       

baud = 9600                     

timeout = 5     # Seconds

filename = time.strftime("%Y%m%d") + "_shieldv1_water_data.csv"

max_num_readings = 100


def create_serial_obj(portPath, baud_rate, tout):

return serial.Serial(portPath, baud_rate, timeout = tout)


def read_serial_data(serial):

serial.flushInput()     # buffer flush


serial_data = []

readings_left = True

timeout_reached = False


while readings_left and not timeout_reached:

    serial_line = serial.readline()

    if  serial_line == '':

        timeout_reached = True

    else:  

        serial_data.append(serial_line.decode('utf-8'))

        if len(serial_data) == max_num_readings:

            readings_left = False


return serial_data


def save_to_csv(data, filename):

with open(filename, 'w') as csvfile:

    csvwrite = csv.writer(csvfile, delimiter = '\n')

    csvwrite.writerow(data)



serial_obj = create_serial_obj(portPath, baud, timeout)


print("Reading serial data...")

serial_data = read_serial_data(serial_obj)


print("Saving to csv...")

save_to_csv(serial_data, filename)


print("Saved.")


慕哥6287543
浏览 165回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python