PCからシリアル通信で送った文字列を認識させて、Arduino側認識させて、サーボモータを動かすコードを書きました。
回路自体も問題ないのですが、Arduinoがシリアル通信で送ったバイト文字列をうまく認識できてないようです。
動作の順序
1.スイッチを押すとシリアル通信で'1'
が送信される
2.スイッチを押すとser.write(b'o')
が実行される
3.Arduino側でa = Serial.read()
が'o'
のときサーボモータを動作させる
3のところでうまく認識されていません。ボタンを押すところに同様の動作コードを書くとサーボモータが動きますが、シリアル通信を認識する部分でうまく動作できないです。
エラーは出ないため、バイト文字列がうまく認識されていないと思うのですがうまく認識させるやうまくいかない原因を教えていただけないでしょうか?
Arudino側コード
c#include
1Servo myservo;//Servoオブジェクトの宣言 2 3void setup() { 4 Serial.begin(9600); 5 myservo.attach(9);//9番ピンでサーボモータを動かす 6 pinMode(2, INPUT_PULLUP); // Inputモードでプルアップ抵抗を有効に 7 pinMode(LED_BUILTIN, OUTPUT); 8 myservo.write(10); 9 digitalWrite(LED_BUILTIN, HIGH); 10} 11 12void loop(){ 13 static int flag=0; 14 if(digitalRead(2)==LOW){ //スイッチをおす 15 flag=1; 16 // myservo.write(10); サーボモータ動作 17 // digitalWrite(LED_BUILTIN, HIGH); サーボモータ動作 18 } 19 else{ 20 if(flag==1){ 21 flag=0; 22 Serial.write('1'); 23 delay(500); 24 } 25 } 26 if(Serial.available()>0){ 27 char a = Serial.read(); 28 if(a=='o'){ 29 myservo.write(10); // ここの動作が認識されない 30 digitalWrite(LED_BUILTIN, HIGH); 31 } 32 else if(a=='c'){ 33 myservo.write(100); // ここの動作が認識されない 34 digitalWrite(LED_BUILTIN, LOW); 35 } 36 } 37}
PC側Pythonコード(base.py)
python
1import serial 2 3with serial.Serial('/dev/cu.usbmodem14301', timeout=0.1) as ser: 4 while True: 5 a = ser.read() 6 print(a) 7 if a == b'1': 8 ser.write(b'o') 9 print('write') 10 else: 11 ser.write(b'c')
実行
sh
1python3 base.py 2>>> 3b'' 4b'' 5b'' 6b'1' 7write 8b'' 9〜
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。