すみません、解決してないのに解決済みにしてしまったので同じ質問をもう一度させていただきます。
開発環境
oculus quest,arduino
ALVRを用いてPCビルドしながら開発しています。
現在UnityからArduinoにserial.write()を用いて文字を送信しようとしているのですが、arduino側が受信してくれずに困っています。
とりあえず今は"r;"という文字列を送信したいと考えています。
シリアルポートのopenはしっかりできています。
write関数の"送信中"、"送信したよ"というデバックは意図した通りの文字列がコンソールに表示されています。
予定としては文字列が送信されたらモーターが動き出してくれれば成功です。
しかしarduino側が反応してくれません。
デバックのためにread関数も使おうとしていたのですが、コンソールには"受信中"しか表示してくれません。
よろしくおねがいします。
unity
1using UnityEngine; 2using System.Collections; 3using System.IO.Ports; 4using System.Threading; 5 6public class SerialHandler : MonoBehaviour 7{ 8 public delegate void SerialDataReceivedEventHandler(string message); 9 public event SerialDataReceivedEventHandler OnDataReceived = delegate { }; 10 11 public string portName = "COM8"; //各自のマイコンのCOMポート 12 public int baudRate = 9600; 13 14 private SerialPort serialPort_; 15 private Thread thread_; 16 private bool isRunning_ = false; 17 18 private string message_; 19 private bool isNewMessageReceived_ = false; 20 21 void Awake() 22 { 23 Open(); 24 } 25 26 void Update() 27 { 28 if (isNewMessageReceived_) 29 { 30 OnDataReceived(message_); 31 Debug.Log(message_); //受信したデータの確認表示用 32 } 33 } 34 35 void OnDestroy() 36 { 37 Close(); 38 } 39 40 private void Open() 41 { 42 serialPort_ = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One); 43 serialPort_.ReadTimeout = 20; 44 serialPort_.Open(); 45 46 isRunning_ = true; 47 48 thread_ = new Thread(Read); 49 thread_.Start(); 50 } 51 52 private void Close() 53 { 54 isRunning_ = false; 55 56 if (thread_ != null && thread_.IsAlive) 57 { 58 thread_.Join(); 59 } 60 61 if (serialPort_ != null && serialPort_.IsOpen) 62 { 63 serialPort_.Close(); 64 serialPort_.Dispose(); 65 } 66 } 67 68 private void Read() 69 { 70 while (isRunning_ && serialPort_ != null && serialPort_.IsOpen) 71 { 72 Debug.Log("受信中"); 73 try 74 { 75 message_ = serialPort_.ReadLine(); 76 isNewMessageReceived_ = true; 77 Debug.Log("受信したよ"); 78 } 79 catch (System.Exception e) 80 { 81 Debug.LogWarning(e.Message); 82 } 83 } 84 } 85 86 public void Write(string message) 87 { 88 try 89 { 90 Debug.Log(message + " を送信中"); 91 serialPort_.Write(message); 92 Debug.Log(message + " を送信したよ"); 93 } 94 catch (System.Exception e) 95 { 96 Debug.LogWarning(e.Message); 97 } 98 } 99} 100
arduino
1#include <Arduino.h> 2#include <Wire.h> 3#include <SoftwareSerial.h> 4 5#include <MeMCore.h> 6 7MeDCMotor motor_9(9); 8MeDCMotor motor_10(10); 9MeUltrasonicSensor ultrasonic_3(3); 10String order="",InByte_strings; 11int InByte = 10, timeC = 0; 12 13void move(int direction, int speed) 14{ 15 int leftSpeed = 0; 16 int rightSpeed = 0; 17 if(direction == 1){ 18 leftSpeed = speed; 19 rightSpeed = speed; 20 }else if(direction == 2){ 21 leftSpeed = -speed; 22 rightSpeed = -speed; 23 }else if(direction == 3){ 24 leftSpeed = -speed; 25 rightSpeed = speed; 26 }else if(direction == 4){ 27 leftSpeed = speed; 28 rightSpeed = -speed; 29 } 30 motor_9.run((9)==M1?-(leftSpeed):(leftSpeed)); 31 motor_10.run((10)==M1?-(rightSpeed):(rightSpeed)); 32} 33 34double angle_rad = PI/180.0; 35double angle_deg = 180.0/PI; 36 37 38void setup(){ 39 Serial.begin(9600); 40 move(1,100); 41 _delay(2); 42 move(1,0); 43} 44 45void loop(){ 46 47 48 Catch(); 49} 50 51void _delay(float seconds){ 52 long endTime = millis() + seconds * 1000; 53 while(millis() < endTime)_loop(); 54} 55 56void _loop(){ 57 58} 59 60void Catch(){ 61 if(Serial.available()>0){ 62 order=Serial.readStringUntil(';'); 63 Serial.print(order); 64 } 65 if(order == "r"){ 66 Serial.print(order); 67 if((ultrasonic_3.distanceCm()) > (50)){ 68 Serial.print(order); 69 move(1,100); 70 timeC += 1; 71 }else{ 72 order = ""; 73 timeC = 0; 74 move(1,0); 75 Serial.print("f"); 76 } 77 if(timeC >= InByte){ 78 order = ""; 79 InByte = 0; 80 timeC = 0; 81 move(1,0); 82 Serial.print("f"); 83 } 84 }else if(order == "t"){ 85 move(4,100); 86 _delay(3); 87 move(4,0); 88 order = ""; 89 Serial.print("f"); 90 }else if(order != ""){ 91 InByte = order.toInt(); 92 } 93} 94
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/01 06:27
2019/11/01 06:30
2019/11/01 06:43
2019/11/01 06:50
2019/11/01 06:59
2019/11/01 06:59
2019/11/01 07:01
2019/11/01 07:05
2019/11/01 07:12
2019/11/01 07:15
2019/11/01 07:48
2019/11/01 07:49