前提・実現したいこと
arduino側より電圧値を送信し、cvsファイルに書き込むプログラムを書いています。
[開始]ボタンで測定値読み見込みはじめ[終了]ボタンで測定を終了させます。
[終了]ボタンを押すとdialogは消えて、再度起動すれば測定可能ですが、[終了]ボタンで以下エラーメッセージが出力されます。
発生している問題・エラーメッセージ
[終了]させると、下記エラーメッセージが出力されます。
動作そのものは、問題なく動いているようです。
これを解消させるためにはどのようにすればよろしいでしょうか?
エラーメッセージ
Exception in thread Thread-7:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "C:\ProgramData\Anaconda3\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "D:/Python/STAIC-SK1000/STAIC-SK1000_04.py", line 39, in serial_data_recv
fl_line = float(w_line)
ValueError: could not convert string to float:
該当のソースコード
python3.7
1 2import tkinter as tk 3import datetime 4import serial 5import time 6import threading 7 8ser = serial.Serial("COM6",9600) 9 10def serial_data_recv(): 11 global stop_flag 12 stop_flag = True 13 14 15 # 通信最初の50要素から読み(通信のゴミを読み飛ばす) 16 print("通信バッファクリア中……") 17 for i in range(50): 18 ser.readline().rstrip() #\r\n削除 19 20 print("測定開始") 21 22 f_now = datetime.datetime.now() #現在時刻取得 23 # ファイル名を時刻.csvに設定 24 recv_data = f_now.strftime('%Y%m%d_%H%M') + ".csv" 25 with open(recv_data,'w') as f: #ファイルオープン 26 while True: 27 if stop_flag == False: 28 break 29 else: 30 line = ser.readline().rstrip() #\r\n削除 31 s_line = str(line) #文字列化 32 w_line = s_line.strip("b'") #受信文字から"b、'"を削除 33 34 fl_line = float(w_line) 35 SEN_OUT = (fl_line * 5.0)/1023 # 0-5vに変換 36 SEN_OUT2 = round(SEN_OUT,2) 37 now = datetime.datetime.now() #現在時刻取得 38 39 #ファイルフォーマットを整えて書き込み 40 file_time0 = now.strftime('%H') 41 f.write(str(file_time0)) 42 f.write(":") 43 file_time1 = now.strftime('%M') 44 f.write(str(file_time1)) 45 file_time2 = now.strftime('%S') 46 f.write(":") 47 f.write(str(file_time2)) 48 f.write(",") 49 f.write(str(SEN_OUT2)) #受信データ書き込み 50 f.write(",") 51 f.write("V") 52 f.write(",\n") #","と改行挿入 53 54 print(" " + (str(SEN_OUT2)) + " V") 55 56 f.close() 57 ser.close() 58 print("測定終了") 59 time.sleep(5) 60 root.destroy() 61 62def start(): 63 global stop_flag 64 global thread 65 66 # スレッドが無いなら生成してstart()する 67 if not thread: 68 thread = threading.Thread(target = serial_data_recv) 69 stop_flag = False 70 thread.start() 71 72def stop(): 73 global stop_flag 74 global thread 75 76 ser.close() 77 root.destroy() 78 79 # スレッドがある場合停止してjoin()する 80 if thread: 81 stop_flag = True 82 thread.join() 83 thread = None 84 85 86thread = None 87 88root = tk.Tk() 89root.title("検査 電圧計") 90root.geometry("250x220+1000+10") 91 92#thread_1 = threading.Thread(target = start) 93#thread_2 = threading.Thread(target = stop) 94 95button1 = tk.Button(root, text = "測定開始", font=("MSゴシック", 14), 96 command = start) 97button1.place(x = 80, y = 30) 98 99button2 = tk.Button(root, text = "測定終了", font=("MSゴシック", 14), 100 command = stop) 101button2.place(x = 80, y = 70) 102 103root.mainloop()
試したこと
ネットで調べましたが、わからないでいます。
補足情報(FW/ツールのバージョンなど)
開発ツールは、Windows10でspyder3を使用しています。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/20 01:09
2020/01/20 01:16 編集
2020/01/20 02:19
2020/01/20 02:24
2020/01/20 02:32