极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1036|回复: 1

arduino驱动57步进电机问题

[复制链接]
发表于 2019-10-12 10:28:57 | 显示全部楼层 |阅读模式
就是我想通过串口收到的字符来控制电机的正反转和停止,请大神们看看程序该怎么改,哪里错了,收到1和2都可以转,但是只转动几秒就停了,发送3的时候也没有打印停止到串口,我想让它一直转,收到1就一直正转,收到2 就一直反转,收到3就停止
int PUL_1=7;
int DIR_1=6;
int val;
void setup()
{
    Serial.begin(9600);//设置波特率为9600
    pinMode(DIR_1,OUTPUT);
    pinMode(PUL_1,OUTPUT);
}

void loop()
{
  val=Serial.read();//读取串口收到的数据
  if (val>'0'&& val<'3')
  {
    if(val== '1')
    {   
           digitalWrite(DIR_1,HIGH); //电机正转
           Serial.println("正转");
           for(int a=0;a<1000;a++)
           {
           digitalWrite(PUL_1,HIGH);
           delayMicroseconds(400);
           digitalWrite(PUL_1,LOW);
           delayMicroseconds(400);
           }
     }
    else if(val=='2')
    {
          digitalWrite(DIR_1,LOW);     //电机反转
           Serial.println("反转");
           for(int a=0;a<1000;a++)
           {
           digitalWrite(PUL_1,HIGH);
           delayMicroseconds(400);
           digitalWrite(PUL_1,LOW);
           delayMicroseconds(400);
           }
     }
     else if(val== '3')
   {
           digitalWrite(PUL_1,LOW);
           Serial.println("停止");

     }
  }
}
回复

使用道具 举报

发表于 2019-10-12 14:53:18 | 显示全部楼层

  1. int PUL_1=7;
  2. int DIR_1=6;
  3. int inByte;

  4. // Variables will change:
  5. int ledState = LOW;            

  6. unsigned long previousMillis = 0;      

  7. // constants won't change:
  8. const long interval = 400;           

  9. void setup() {
  10.     Serial.begin(9600);
  11.     pinMode(DIR_1,OUTPUT);
  12.     pinMode(PUL_1,OUTPUT);
  13. }

  14. void loop() {
  15.   unsigned long currentMillis = millis();
  16.   
  17.   if(Serial.available())
  18.   {
  19.       inByte = Serial.read();
  20.       Serial.println(inByte);
  21.   }
  22.   
  23.    
  24.   if (currentMillis - previousMillis >= interval) {
  25.     previousMillis = currentMillis;

  26.     if(inByte != '3'){
  27.       if (ledState == LOW)
  28.         ledState = HIGH;
  29.       else
  30.         ledState = LOW;
  31.     }
  32.   }

  33.   if(inByte == '1')
  34.     digitalWrite(DIR_1,HIGH);

  35.   else if(inByte == '2')
  36.     digitalWrite(DIR_1,LOW);  

  37.   digitalWrite(PUL_1, ledState);
  38. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-12-16 21:57 , Processed in 0.043716 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表