質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

0回答

4014閲覧

Tkinter・Arduino間でのシリアル通信について

tugu

総合スコア6

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2017/02/17 06:28

編集2022/01/12 10:55

###前提・実現したいこと
閲覧ありがとうございます。当方、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さん

初めたばかりで(素子的に)環境が整っておらず確認できない状態です、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/02/17 06:33

どこまでが期待通りに動作しているのか、怪しい部分の絞り込みをするすべはなのですか?ログファイルに書き込むとか
ozwk

2017/02/17 06:34

シリアルで"LOW"を返す代わりに、LED点灯はできますか?
ozwk

2017/02/17 06:41

LEDじゃなくても要するにシリアル以外でArduinoがコマンドを受け取れているか確認してください
t_obara

2017/02/17 06:51

手動で送信したデータがきちんとArduinoが処理できているところが確認できたということは、tkinterのプログラムに問題があることは明確ですよね。であれば、tkinterで所定のデータをきちんと生成しているのか、それがシリアルに送出されているのかなど、調べる点は色々ありそうですが、tkinterのプログラム内部の絞り込みはできないのでしょうか? という意図です。
ozwk

2017/02/17 06:55

「tkinterを使わずにArduinoにフラグを送った」←何を使ったんですか?
tugu

2017/02/17 07:04

>>ozwkさん  tkinterで生成したtransform_buttonを介さずにということです。
tugu

2017/02/17 07:10

>>t_oberaさん  ご指摘の意図を取り違えてしまってすみませんでした。transformが上手く行っていたら文字を出力するようにした所、出力されなかったのでここに問題がありそうです。もう少し確認してみます。
t_obara

2017/02/17 07:15

そのようにご自身で絞り込み、問題が解決できるのが一番です。がんばってくださいませ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問