前提
pythonからarduinoにシリアル通信で"a"と送るとLEDがひかり、”b"と送るとLEDが消えるシステムを作りたいのですが、うまくいきません。
発生している問題・エラーメッセージ
pythonから文字を送信してもif文が反応せず,LEDが光らない
該当のソースコード
python
1import serial 2import time 3with serial.Serial('COM3', 9600, timeout=1) as ser: # シリアルポートとボーレートを設定 4 time.sleep(1) 5 p=str('a') 6 flag = bytes(p, 'utf-8') 7 ser.write(flag) # 入力した文字を送信 8 time.sleep(1) 9 10 p=str('b') 11 print(p) 12 flag = bytes(p, 'utf-8') 13 ser.write(flag) # 入力した文字を送信 14 time.sleep(1) 15 ser.close() 16 17 18```arduino 19void setup() { 20 Serial.begin(9600); 21 pinMode(12, OUTPUT); 22} 23 24void loop() { 25 int data = Serial.read(); 26 if(data=='a') 27 { 28 digitalWrite(12,HIGH); 29 } 30 if(data=='b') 31 { 32 digitalWrite(12,LOW); 33 } 34}
試したこと
シリアル通信自体はできています
arduinoIDEのシリアルモニタからaやbを送信するとLEDが光ったり消えたりするのでarduino側のプログラムは問題がないと思います。
追記
input()を使うとうまくいったのですがなぜでしょうか・・・。input()は使わず何とかする方法はないでしょうか・・・。
python
1import serial 2import time 3with serial.Serial('COM3', 9600, timeout=1) as ser: # シリアルポートとボーレートを設定 4 time.sleep(1) 5 p = input() 6 print(p) 7 print(type(p)) 8 flag = bytes(p, 'utf-8') 9 ser.write(flag) # 入力した文字を送信 10 time.sleep(1) 11 12 p=str('b') 13 print(p) 14 flag = bytes(p, 'utf-8') 15 ser.write(flag) # 入力した文字を送信 16 time.sleep(1) 17 ser.close()
aの送信をinput()でおこなうと、なぜかbの送信もうまくいきます・・・。
arduino unoをつかっています。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。