Unity操控Arduino板接舵机旋转

跟上篇文章差不多 也是串口通讯 只是这次在arduino端加了一个舵机,pc端向arduino传输一个角度

pc端代码(打开端口以及new一个接收数据的线程)ps:接收数据可以不要 因为我们这里不用接收返回数据

//设置串口,波特率
        sp = new SerialPort("COM4", 9600);
        sp.Encoding = Encoding.ASCII;
        sp.ReadTimeout = 2000;
        sp.WriteTimeout = 2000;
        //sp.Encoding = ASCIIEncoding.ASCII;
        try
        {
            if (!sp.IsOpen)
            {
                sp.Open();
            }
        }
        catch (Exception err)
        {

            Debug.Log(err);
        }
        print("端口打开");
        wenben.text="端口打开";
        //tPort = new Thread(DealData);
        //tPort.Start();
        tPortDeal = new Thread(ReceiveData);
        tPortDeal.IsBackground = true;

pc端(发送数据)

	/// <summary>
    /// 向陀机发送旋转数据
    /// </summary>
    void SendRotaData() {
        if (sp.IsOpen) {
            Thread.Sleep(200);
            
            string data="";
            //RotaY是我在unity里建的cube的旋转值Y轴(我的舵机最大只能转180度)
            if (RotaY > 0 && RotaY < 180)
                 data= RotaY.ToString();
            print(data);
            byte[] buffer = ascii2.GetBytes(data);
            //角度转字符串,然后发送
            sp.WriteLine(data);
            // sp.Write(buffer, 0, buffer.Length);
            print("发送数据:"+data);
        }
    }

然后是Arduino端代码吗,这里用到了舵机的Servo库

#include <Servo.h>


String serialString="";
//boolean readCompleted=false;
//char buf[4];
Servo myservo;// 创建一个舵机对象
int pos=0;
void setup() {
  
  // put your setup code here, to run once:
  Serial.begin(9600);
  myservo.attach(9);// 将引脚9上的舵机与声明的舵机对象连接起来
  while(Serial.read()>=0){}
serialString.reserve(200);

}
void serialEvent()//当串口有数据时,调用此函数
{
  serialString="";
  while(Serial.available())//检测数据,如果没有数据返回
  {
    char inChar = (char)Serial.read();
    //Serial.println(inChar);
    serialString += inChar;
    delay(100);
  } 
  Serial.println(serialString);
  pos=serialString.toInt();
  myservo.write(pos);
  delay(20);
}

这样我通过移动unity里的cube角度,就可以实时改变舵机的角度
这里推荐一篇博客,里边有各种Serial函数的介绍和示例,比较详细,大家可以去看看
串口Serial函数介绍