やりたいこと
Python>Arduino>Pythonの相互に文字列のやり取りがしたいです。
試しにPythonで作ったランダムな数字をArduinoで2分の1して、結果をPythonに返すプログラムを書いていますがうまくいきません。
送信する文字列は、
Python:"Pyランダム数字" > Arduino:"Ardランダム数字/2" > Python
です。
※このあと複雑なやり取りに応用したいので、どうしても"Py ** "、 "Ard ** "の文字列で送受信したいです。
訳あってtkinterに結果を出力しています。
宜しくお願いします。
追記
追記:かなり編集したので最初にupしてたプログラムを削除しました。
簡易的なものを作ってみましたがうまくいきませんでした。
Python>Arduino>Pythonで文字列をシリアル通信でオウム返しするプログラムです。
受信側では1文字ずつ受け取るように変更し、
終端文字を改行コードにしたり、 . にしたりいろいろ試しました。
実行はできますが、ずっとループしているようで先に進めません。
Arduino側で if (i > 10 || input[i] == '.') { に引っかからない、
またはPython側で if (line[-1] == '.') : break に引っかからないのがネックなようです。
これでもダメなら何か他の方法を使ってみようと思います。
Python3
1import serial 2import time 3 4i = 1 5 6ser = serial.Serial('COMポート',9600,timeout=None) 7 8while True: 9 #送信 10 data = str(i) + '.' 11 flag=bytes(data,'utf-8') 12 ser.write(flag) #シリアル通信:送信 13 14 time.sleep(0.3) #必要か? 15 line = 'null' #whileとifで判定するための初期化 16 17 #受信 18 while line is 'null' : 19 if (line[-1] == '.') : break 20 line += ser.read() 21 print(line) 22 line = line.decode('utf-8') 23 line = line.replace('null', '') 24 line = line.replace('\r\n', '') 25 print(line) 26 i += 1 27ser.close()
Arduino
1#include <stdio.h> 2 3char input[10]; // 文字列格納用 4int i = 0; // 文字数のカウンタ 5 6void setup() { 7 Serial.begin(9600); 8} 9 10void loop() { 11 // データ受信したとき 12 if (Serial.available()) { 13 input[i] = Serial.read(); 14 // 文字数が10以上 or 末尾文字'.' 15 if (i > 10 || input[i] == '.') { 16 // 末尾に終端文字の挿入 17 input[i] = '\0'; 18 Serial.write(input); // 受信文字列を送信 19 // カウンタの初期化 20 i = 0; 21 } else { i++; } 22 }

回答4件
あなたの回答
tips
プレビュー