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函数介绍