使用argparse使用python从Arduino读取数据时出错

时间:2018-02-21 16:54:45

标签: python-2.7 interface arduino

我正在使用Windows 10,我正在使用Arduino micro从A1引脚读取ECG数据。我没有任何问题地使用了串行绘图仪。 Arduino连接到COM4

但是,我想用python读取心电图数据并将其绘制在那里(界面)。我找到了一个名为deque的有用课程。链接:http://electronut.in/plotting-real-time-data-from-arduino-using-python/

我从另一个python文件调用该函数,我收到此错误:

usage: mac1.py [-h] --port PORT
mac1.py: error: argument --port is required

代码:

import serial
from Arduino import Arduino
import time
import Idr

import matplotlib.pyplot as plt
import matplotlib.animation as animation

if __name__ == '__main__':
  Idr.main()

Idr.py功能:

import sys, serial, argparse

import numpy as np

from time import sleep

from collections import deque

import matplotlib.pyplot as plt

import matplotlib.animation as animation


# plot class

class AnalogPlot:

    # constr

    def __init__(self, strPort, maxLen):

        # open serial port

        self.ser = serial.Serial(strPort, 9600)

        self.ax = deque([0.0] * maxLen)

        self.ay = deque([0.0] * maxLen)

        self.maxLen = maxLen

    # add to buffer

    def addToBuf(self, buf, val):

        if len(buf) < self.maxLen:

            buf.append(val)

        else:

            buf.pop()

            buf.appendleft(val)

    # add data

    def add(self, data):

        assert (len(data) == 2)

        self.addToBuf(self.ax, data[0])

        self.addToBuf(self.ay, data[1])

    # update plot

    def update(self, frameNum, a1):

        try:

            line = self.ser.readline()

            data = [float(val) for val in line.split()]

            # print data

            if (len(data) == 2):
                self.add(data)



                a1.set_data(range(self.maxLen), self.ay)

        except KeyboardInterrupt:

            print('exiting')

        return a1,

        # clean up

    def close(self):

        # close serial

        self.ser.flush()

        self.ser.close()

    # main() function


def main():
    # create parser

    parser = argparse.ArgumentParser(description="LDR serial")

    # add expected arguments

    parser.add_argument('--port', dest='port', required=True)

    # parse args

    args = parser.parse_args()

    # strPort = '/dev/tty.usbserial-A7006Yqh'

    strPort = args.port

    print('reading from serial port %s...' % strPort)

    # plot parameters

    analogPlot = AnalogPlot(strPort, 100)

    print('plotting data...')

    # set up animation

    fig = plt.figure()

    ax = plt.axes(xlim=(0, 100), ylim=(0, 1023))



    a1, = ax.plot([], [])

    anim = animation.FuncAnimation(fig, analogPlot.update,

                                   fargs=(a1),

                                   interval=50)

    # show plot

    plt.show()

    # clean up

    analogPlot.close()

    print('exiting.')

0 个答案:

没有答案