Schrittmotor mit millis() pausieren


hallo,

ich lasse einen schrittmotor mit den werten eines mpu6050-sensors eine ausgangslage "mitte" anfahren. danach werden wiederkehrend drei positionen angefahren. wenn eine positionen erreicht wird,   soll der motor eine pause von 20 sekunden einlegen.

mit meinem code beginnt allerdings die zählung für die erste pause schon mit der anfahrt in die ausgangslage "mitte". danach  fährt der motor alle positionen wiederkehrend ohne pause an.

ich hoffe jemand kann mir helfen.


code: [select]
void loop()
{
  unsigned long aktuellezeit = millis();
  unsigned long vergangenezeit=0;               
  unsigned long interval = 20000;

// fährt in die ausgangslage "mitte"
// funktioniert

  if (e0_achse_foto_links == false && e0_achse_foto_mitte == false && e0_achse_foto_rechts == false)     
    {
      if (gyy_filtered > -25000&& gyy_filtered < -100)
       {
        e0_achse.move(-30);
       }         
      else if (gyy_filtered < 25000&& gyy_filtered > 100)
       {
        e0_achse.move(30);
        }
      else
       {         
        e0_achse_foto_mitte = true;
        e0_achse.setcurrentposition(0);
       }         
    }

// fährt von der mitte nach links.
// allerdings wird die zeit, die der motor für die anfahrt
// in die ausgangslage "mitte" (siehe oben) benötigt in die pausenzeit (interval)
// eingerechnet.

   
  if (e0_achse_foto_mitte == true)
    {
      if (aktuellezeit - vergangenezeit >=interval)
        {           
          e0_achse.runtonewposition(500);                      // von der mitte nach links
          e0_achse_foto_links = true;
          e0_achse_foto_mitte = false;
          vergangenezeit = aktuellezeit;
        }   
      }

//fährt von links nach rechts
//leider keine pause
   
  if (e0_achse_foto_links == true)             
    {
      if (aktuellezeit - vergangenezeit>=interval)
        {                 
          e0_achse.runtonewposition(-500);                       // von links nach rechts
          e0_achse_foto_rechts = true;
          e0_achse_foto_links = false;
          vergangenezeit = aktuellezeit;
        }
      }     


//fährt von rechts zur mitte
//leider keine pause

  if (e0_achse_foto_rechts == true)             
    {
      if (aktuellezeit - vergangenezeit >=interval)
      {
          vergangenezeit = aktuellezeit;     
          e0_achse.runtonewposition(0);                       // von rechts zur mitte
          e0_achse_foto_mitte = true;
          e0_achse_foto_rechts = false;
    }
}
e0_achse.run();
}

hallo,

naja, du setzt mit jedem loop durchlauf deine "vergangene zeit" immer wieder auf 0.

vorschlag, initialisiere diese beiden variablen als globale variablen.

code: [select]
unsigned long vergangenezeit = 0;               
unsigned long interval = 20000;




Arduino Forum > International > Deutsch (Moderator: uwefed) > Schrittmotor mit millis() pausieren


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor