我的马达在Arduino上真的很慢

时间:2016-05-27 09:49:44

标签: unity3d arduino

int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 2;
char myCol[20];

void setup() {
  Serial.begin (9600);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}


void loop() {
  int lf = 1;
  Serial.readBytesUntil(lf, myCol, 1);
  if (strcmp(myCol, "p") == 0)
  {
    Play();
  }
  if (strcmp(myCol, "s") == 0)
  {
    Stop();
  }
}



void Play()
{
  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);
}

void Stop()
{
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
}

/////////////////////////////////////////////// /////

    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 play(){
        sp.Write("p");
    }


    public static void stop(){
        sp.Write("s");
    }
}

//////////////////////////////////////////

    using UnityEngine;
    using System.Collections;

    public class Play : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    void OnMouseDown() {
        Sending.play();
     }

}

/////////////////////////////////////////////// ///////

    using UnityEngine;
    using System.Collections;

    public class Stop : MonoBehaviour {


    void OnMouseDown()
    {
        Sending.stop();
    }

}

/////////////////////////////////////////////// //

嗨,我在我的arduino和团结中有这个代码,我用一个播放和停止按钮统一命令它,但是当我按下我的播放按钮时,电机运行但是真的慢慢地像一步,1/2秒然后另一步.....有人可以帮帮我吗?

谢谢

2 个答案:

答案 0 :(得分:1)

延迟功能以毫秒为单位获取参数,因此您一次运行电机2毫秒。试试2000吧。下面是对delay()函数的引用。

https://www.arduino.cc/en/Reference/Delay

如果仍然无效,请考虑以下事项:

Arduino的数字引脚通常仅输出大约20mA(Arduino Uno R3)。对于电动机来说,这通常是不够的,你需要一个外部由电池或直流电供电的电机屏蔽,如下所示;

https://www.arduino.cc/en/Main/ArduinoMotorShieldR3

但是,如果您直接为Arduino运行电机,特别是几台电机,您可以预期它们运行缓慢或几乎不运行。

答案 1 :(得分:1)

我在这里猜猜......

loop()做的第一件事就是调用“Serial.readBytesUntil(...)”,然后才有机会调用你的Play()例程让电机迈出一步。如果没有要从串行连接中读取的字符,它将超时...最终。

也许尝试使用Serial.setTimeout(1)(或者甚至尝试0?)来缩短超时时间 - 只是为了看看是否有助于这种情况。 (不要将其用作解决方案。)

我会考虑将命令处理与电机步进分开。

祝你好运!