前提・実現したいこと
arduinoからのシリアル通信した情報をpythonで読み取る。
ここに質問の内容を詳しく書いてください。
pythonのjupter notebookを利用してCOM3からの情報を受け取りたい。
しかし、次のようなメッセージがでてうまくいかない。
どこを変えればよいのでしょうか?
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-1-d6ee45546a66> in <module>() 62 63 if __name__ == '__main__': ---> 64 main() <ipython-input-1-d6ee45546a66> in main() 28 29 ---> 30 xdeg = float(xdeg) 31 ydeg = float(ydeg) 32 # 温度データのリスト更新 ValueError: could not convert string to float: "'55"
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3import pygame 4from pygame.locals import * 5import serial 6import sys 7 8def main(): 9 ser = serial.Serial("COM3") # COMポート(Arduino接続) 10 xdegs = [0]*100 # 温度格納 11 ydegs = [0]*100 # 温度格納 12 t = np.arange(0,100,1) 13 plt.ion() 14 # Pygameの設定 15 pygame.init() # 初期化 16 screen = pygame.display.set_mode((200, 200)) # 画面作成(100×100) 17 pygame.display.set_caption("傾斜角度") # タイトルバー 18 font = pygame.font.Font(None, 30) 19 20 while True: 21 22 data = ser.readline().rstrip() # \nまで読み込む(\nは削除 23 data = str(data).replace('"', '') 24 (xdeg, ydeg) =data.split(",") 25 26 xdeg = xdeg.replace('b','') 27 ydeg = ydeg.replace('b','') 28 29 30 xdeg = float(xdeg) 31 ydeg = float(ydeg) 32 # 温度データのリスト更新 33 xdegs.pop(99) 34 xdegs.insert(0,float(xdeg)) 35 ydegs.pop(99) 36 ydegs.insert(0,float(ydeg)) 37 # グラフ表示設定 38 line, = plt.plot(t, xdegs, 'r-',label="X-axis[deg]") # Y軸更新 39 line, = plt.plot(t, ydegs, 'b-',label="Y-axis[deg]") # Y軸更新 40 line.set_ydata(xdegs) 41 line.set_ydata(ydegs) 42 plt.title("Real-time inclination angle") 43 plt.xlabel("Time [s]") 44 plt.ylabel("Inclination angle [deg]") 45 plt.legend();plt.grid() 46 plt.xlim([1,100]); plt.ylim([-90,90]) 47 plt.draw(); plt.clf() 48 # Pygameの処理 49 screen.fill((0,0,0)) # 画面のクリア 50 text = font.render("(X, Y) = ("+xdeg+", "+ydeg+")", False, (255,255,255)) 51 screen.blit(text, (10, 10)) # レンダ,表示位置 52 pygame.display.flip() # 画面を更新して、変更を反映 53 # Pygameのイベント処理 54 for event in pygame.event.get(): 55 # 終了ボタンが押されたら終了処理 56 if event.type == QUIT: 57 pygame.quit() 58 ser.close() 59 plt.close() 60 sys.exit() 61 62 63if __name__ == '__main__': 64 main()
試したこと
python3だとbという文字が入ってします?そのbという文字をreplace関数で取り除いたところ、'という記号が残ってしまう。
この'55という数字はarudinoからシリアル通信して送られた情報だと思います。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/02 02:44