2016-10-05 48 views
0

シリアルポートを使用してArduinoに接続するPythonプログラムがあります。実行を遅くすることなくリアルタイムでデータをプロットしたいので、私はマルチプロセッシングを試みます。しかし、私はエラーが発生しましたシリアルポートWindowsError(5、 'アクセスが拒否されました。')マルチプロセスで

serial.serialutil.SerialException: could not open port 'COM6': WindowsError(5, 'Access is denied.') # COM6 is the port connected to Arduino 

驚いたことに、Arduino間の接続は、マルチプロセッシングの機能が動作していない間はまだ生きています。私のコードは次のようになります。

class ArduinoThread(threading.Thread): 
    def __init__(self, portnum): 
     threading.Thread.__init__(self) 
     self.setName("Arduino") 
     self.Arduino = serial.Serial(port="COM"+str(portnum), baudrate=19200) 
    def run(self): 
     # some function 


def MyPlot_realtime(DATA): 
    while True: 
     data = DATA.get(False) 
     plt.plot(data) 


UNO = ArduinoThread(6) 
UNO.start() 

plt.ion() 
pltQ = multiprocessing.Queue() 
pltP = multiprocessing.Process(target=MyPlot_realtime, args=(pltQ,)) 
pltP.start() 

while True: 
    # some calculation on data 
    UNO.update(data) 

    if pltQ.empty(): 
     pltQ.put(data) 

簡単に言えば、コードはうまく動作します。 MyPlt_realtimeがまったく動作していないのに、マルチプロセッシングがあるのに、エラーが出ていますが、UNO.update(data)はまだ動作しています。

(私のコードはかなりので、私は、私は別のデバイスを接続するために別のシリアルポートを使用しています。それを簡素化。私もTkinterのを使用しています複雑になる。問題は、これらの部分から来なかったホープ)

答えて

0

あなたを入れてもし条件での主なコードは次のよう:

if __name__ == '__main__': 

私がなぜわからないが、それは私のために問題を解決し、ほとんどの例は、同様にそのようにそれを行うように見えます。

関連する問題