Multiple Function calling-probleem in hardwareproject

Ik probeer een mechanische schuif te maken die horizontaal en verticaal kan bewegen. Ik heb de schuifregelaar nodig om naar 6 specifieke plaatsen te gaan. Voor horizontale beweging heb ik een Motor Encoder gebruikt om de stappen te tellen. Maar voor de verticale beweging gebruikte ik alleen vertraging.

enter image description here

Mijn probleem met de code is, dat wanneer ik de functie voor Box1 of 2 of 3 afzonderlijk aanroer, de code Perfect werkt. Maar wanneer ik meerdere functies aanroep met wat vertragingen daartussen, verliest de schuifregelaar gewoon zijn geest en gaat hij naar links helemaal zelfstandig verder. Ik begrijp niet wat het probleem is.

#include 
int StepSensor1 = 20;
int count1 = 0;
int turn = 0;
int new_val;
int old_val;
int iss = 1;
int iss2 = 1;


AF_DCMotor motorHor(2, MOTOR12_64KHZ);
AF_DCMotor motorVer(4, MOTOR34_64KHZ);

void setup() {
 //put your setup code here, to run once:
  pinMode(StepSensor1, INPUT);
  Serial.begin(9600);

  motorHor.setSpeed(255);
  motorHor.run(RELEASE);
  motorVer.setSpeed(255);
  motorVer.run(RELEASE);

  Up();
  delay(1000);
  backward();
  delay(1000);


}

void loop() {
  Box10();
  delay(1000);
  defaultPos();
  delay(1000);
  Box20();
  delay(1000);
  defaultPos();
  delay(1000);
  Box30();
  delay(1000);
  defaultPos();
  delay(1000);
  Box11();
  delay(1000);
  defaultPos();
  delay(1000);
  Box21();
  delay(1000);
  defaultPos();
  delay(1000);
  Box31();     
  delay(1000);
  defaultPos();
  delay(1000);
}

void Box10()
{
  StepSense(2); //goes 2 step from default position
}

void Box20()
{
  StepSense(6); //goes 6 step from default position
}

void Box30()
{
  StepSense(12); //goes 12 step from default position
}

void Box11()
{
  NextLevel(); //Goes Up
  StepSense(2); //goes 2 step from default position
}

void Box21()
{
  NextLevel();  //Goes Up
  StepSense(6); //goes 6 step from default position
}

void Box31()
{
  NextLevel();   //Goes Up
  StepSense(12); //goes 12 step from default position
}

void defaultPos()
{
  Down();
  delay(1000);
  backward();
  delay(1000);
}

void forward() 
{
  motorHor.run(FORWARD);
  delay(1000);
  motorHor.run(RELEASE);
}

void backward() 
{
  motorHor.run(BACKWARD);
  delay(2000);
  motorHor.run(RELEASE);
}    

void Up() 
{
  motorVer.run(FORWARD);
  delay(700);
  motorVer.run(RELEASE);
}

void Down() 
{
  motorVer.run(BACKWARD);
  delay(650);
  motorVer.run(RELEASE);
}

void NextLevel()
{
  if (iss2 < 2) {
    Down();
    iss2++;
  }
}



void StepSense(int step)
{
  if (turn != step) {
    motorHor.run(FORWARD);
    new_val = digitalRead(StepSensor1);


    if (new_val != old_val)
    {
      count1++;
      if (count1 == 10)
      {
        motorHor.run(RELEASE);
        turn++;
        count1 = 0;
        Serial.print("TURN ");
        Serial.print(turn);
        Serial.print(" Complete ");

      }
      else

        Serial.println(count1);
      old_val = new_val;

    }
  }

}
0
Uw StepSense-methode is moeilijk te volgen zonder opmerkingen. En er zijn, onder andere, niet-geïnitialiseerde waarden. Als je denkt dat de code werkt, zou ik overwegen om de motoren van een aparte voeding te voorzien. Het kan zijn dat u de processor opnieuw instelt wanneer u veel "verplaats" -opdrachten snel achter elkaar verzendt.
toegevoegd de auteur st2000, de bron

Geen antwoorden

0