using UnityEngine;
using System.Collections;
using System.IO.Ports;
using System.Threading;
public class Sending : MonoBehaviour {
//public static SerialPort sp = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
public static SerialPort sp = new SerialPort("COM3", 9600);
void Start() {
OpenConnection();
}
public void OpenConnection()
{
if (sp != null)
{
if (sp.IsOpen)
{
sp.Close();
}
else
{
sp.Open();
}
}
}
void OnApplicationQuit()
{
sp.Close();
}
public static void Contact(int pos)
{
string PosStr = pos.ToString();
Debug.Log(PosStr);
sp.Write(PosStr);
}
}
////////////////// ////////////////////Arduino和电机控制统一
using UnityEngine;
using System.Collections;
public class GetPosition : MonoBehaviour
{
Vector3 dragStartPosition;
float dragStartDistance;
float[] Xfloat;
void OnMouseDown()
{
dragStartPosition = transform.position;
dragStartDistance = (Camera.main.transform.position - transform.position).magnitude;
}
void Update()
{
}
int OnMouseDrag()
{
Vector3 worldDragTo = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, dragStartDistance));
transform.position = new Vector3 (worldDragTo.x, dragStartPosition.y, dragStartPosition.z);
new Vector3 (worldDragTo.x, dragStartPosition.y, dragStartPosition.z);
int Newpos = (int)worldDragTo.x;
return (Newpos);
}
void OnMouseUp()
{
int NewPos = OnMouseDrag();
Sending.Contact (NewPos);
}
}
/////////////////////// //////////////////////
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 2;
int i = 0;
char myCol[5];
void setup() {
Serial.begin (9600);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
int lf = 5;
Serial.readBytesUntil(lf, myCol, 5);
Serial.setTimeout(0);
int Angle = atoi(myCol);
int Tick = ((Angle * 51.2)/36.0);
Serial.println(Tick);
if (i < Tick)
{
Play();
i++;
}
if (i > Tick)
{
Reverse();
i--;
}
}
void Play()
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}
void Reverse()
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
嗨! ,我的统一控制电机有问题,我有一个Unity场景,其中包含一个立方体,我可以在x轴上滑动这个立方体,我通过COM3发送x值,在Arduino中获得Value并将其转换为角为我的电机。
我的问题是: 当我在Unity中移动立方体时,我的电机旋转,但是当我将立方体滑动几次后,整体冻结为15/20秒,然后我的电机移动,但没有以正确的角度移动。
谁能告诉我我的问题在哪里?
昨天我看到了同样的问题。我只是觉得你是以错误的方式做整件事情,但是当我明白你到底在做什么时,我会提供答案。在Arduino方面,有什么期待?你说了一些关于电机旋转的东西它何时开始旋转,旋转多久?它什么时候停止旋转?你有一个真实世界的例子,你在做什么?在Unity方面,你什么时候发送给Arduino?它看起来像你正在发送x值。你为什么要发送x值,它用于什么?你什么时候停止发送给Arduino? – Programmer
这是一大堆问题,但它会让你的问题得到解答。你可以在这个评论部分分开Arduino和Unity的回应。 – Programmer
我有我的立方体充当滑块,我将它滑动到x轴上,他的x位置用作角度值,我在arduino中发送此值。 当我拖动立方体没有发生(这是正常的),当我释放它的值发送和我的电机在arduino旋转(例如:我移动我的立方体位置x 450和我的电机旋转450°)大约需要4秒完整旋转(360°) 该值仅在鼠标释放时发送一次。 如果我还没有回答你所有的问题请告诉我! – Sholyu