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秒然后另一步.....有人可以帮帮我吗?
谢谢
答案 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?)来缩短超时时间 - 只是为了看看是否有助于这种情况。 (不要将其用作解决方案。)
我会考虑将命令处理与电机步进分开。
祝你好运!