управление ШД

Тема в разделе "Arduino & Shields", создана пользователем vivilolo, 6 июн 2015.

  1. vivilolo

    vivilolo Нуб

    добрый день, вот такая у меня проблемка,хочу управлять двумя ШД,задавая через монитор порта ардуино число оборотов каждому шд. Но столкнулся с такой проблемой ,если задавать их как
    void loop()
    {
    int Sx=4;
    int Sy=6;
    то работает,но если
    void loop()
    {
    if(Serial.available())
    {
    if(OneOrTwo==0)
    {

    Sx = Serial.parseInt();
    Serial.print("Sx=");
    Serial.println(Sx);
    while(Serial.available())Serial.read();
    OneOrTwo=1;
    return;
    }


    if(OneOrTwo==1)
    {
    Sy = Serial.parseInt();
    Serial.print("Sy=");
    Serial.println(Sy);
    while(Serial.available())Serial.read();
    OneOrTwo=0;
    return;
    }
    то ШД молчат! хотя когда отработывал на светодиодах,все работало
     
  2. vivilolo

    vivilolo Нуб

    Код (Text):
    #include <AccelStepper.h>

      int Sx;
      int Sy;

    // Define a stepper and the pins it will use
    AccelStepper stepper1(1, 5, 4);
    AccelStepper stepper2(1, 7, 6);
    byte OneOrTwo = 0;
    void setup()
    {
      Serial.begin(9600);
      // Change these to suit your stepper if you want
      stepper1.setMaxSpeed(600);
      stepper2.setMaxSpeed(600);

    }
    void loop()
    {
      if(Serial.available())
      {
        if(OneOrTwo==0)
        {

          Sx = Serial.parseInt();
          Serial.print("Sx=");
          Serial.println(Sx);
          while(Serial.available())Serial.read();
          OneOrTwo=1;
          return;
        }
       
        if(OneOrTwo==1)
        {
          Sy = Serial.parseInt();
          Serial.print("Sy=");
          Serial.println(Sy);
          while(Serial.available())Serial.read();
          OneOrTwo=0;
        }

     
      if (Sx!=0 && Sy!=0)
      {
          if(Sx>Sy)
          {
            float Vw=Sy/Sx;
            if (Vw<0)
              {
                Vw==Vw*(-1);}
            stepper1.moveTo(1024*Sx);
            stepper2.moveTo(1024*Sy);
            stepper1.setSpeed(600);
            stepper2.setSpeed(600*Vw);
            stepper1.runSpeedToPosition();
            stepper2.runSpeedToPosition();
          }
         
          else if(Sx<Sy)
          {
            float Vw=Sx/Sy;
            if (Vw<0)
                {
                  Vw==Vw*(-1);}
            stepper1.moveTo(1024*Sx);
            stepper2.moveTo(1024*Sy);
            stepper1.setSpeed(600*Vw);
            stepper2.setSpeed(600);
            stepper1.runSpeedToPosition();
            stepper2.runSpeedToPosition();
            }
     
          else
          {
            stepper1.moveTo(1024*Sx);
            stepper2.moveTo(1024*Sy);
            stepper1.setSpeed(600);
            stepper2.setSpeed(600);
            stepper1.runSpeedToPosition();
            stepper2.runSpeedToPosition();
            }
      }
      else if (Sx==0 && Sy!=0)
      {
        stepper2.moveTo(1024*Sy);
        stepper2.setSpeed(600);
        stepper2.runSpeedToPosition();
      }
      else if (Sx!=0 && Sy==0)
      {
        stepper1.moveTo(1024*Sx);
        stepper1.setSpeed(600);
        stepper1.runSpeedToPosition();
      } }}