###前提・実現したいこと
閲覧ありがとうございます。当方、python初心者です。
今回、私はTkinterで作成したGUI上のボタンを押すと、それをフラグとしてArduino側からArduinoIDE上のシリアルモニタに文字を表示するというプログラムを作ろうとしました。
###発生している問題・エラーメッセージ
シリアルモニタに文字が表示されない。
###該当のソースコード
言語・・・Python3.5.2
#tkinter側のコード from tkinter import * import serial import time class Ser(Frame): def __init__(self,master=None): self.arduino = serial.Serial('/dev/cu.usbserial-A104AFCN', 9600, timeout=1) Frame.__init__(self,master) frame = Frame(master,bg='red',bd=10) frame.pack() transform_button = Button(frame, text="Transform!") transform_button.bind(self,"<Button-1>",self.transform) #イベントシーケンスでループに割り込み transform_button.pack() def transform(self): time.sleep(2) #Arduinoのブート時間の考慮 while True: flag = bytes('q','utf-8') self.arduino.write(flag) self.arduino.close() if __name__ == '__main__': ser = Ser() ser.mainloop() ######################################################################## #Arduino側のコード void setup(){ Serial.begin(9600);//シリアル通信のレートを9600に設定 } void loop(){ int inputchar; //入力状態の読み取りに使う inputchar = Serial.read(); //シリアル通信で送信された値を読み取る if(inputchar!=-1){ if(inputchar=='q'){ Serial.println("LOW"); } } }
###試したこと
前まではtransform_button = Button(frame,text="Transform!",command=self.transform)
としていたのですが、この状態だと無限にフラグを送り続けていたので、イベントシーケンスとのバインドを行いました。
どこがだめなのかがわかっていない状態です。ご教授お願いします!
###補足情報(言語/FW/ツール等のバージョンなど)
Pycharm上で実行
###追記
t_obaraさん
tkinterを使わずにArduinoにフラグを送った後にシリアルモニタにLOWと期待したとおりの表示がされたので、GUIのループと1回だけ送信したいという要望が上手く相容れてないと考えています。
ozwkさん
初めたばかりで(素子的に)環境が整っておらず確認できない状態です、
あなたの回答
tips
プレビュー