Serial.print-Zeilen reduzieren Steppermotorgeschwindigkeit


hallo,

ich habe eine fräse, mit der ich macroaufnahmen von kleinen objekten machen möchte. die kamera ist der z-achse befestigt. der abstand der kamera zum objekt soll immer gleich sein. dafür habe ich einen sharp ir gp2d120 (4-30 cm) neben der kamera montiert und zum aufnahmebereich ausgerichtet.
der code der z-achse alleine funktioniert. der code um allgemein die achsen ohne delay zu bewegen funktioniert nun auch. ich bin aber nicht sicher wie ich die beiden zusammenfüge.

die bewegung der x- und y-achse verläuft unabhängig von z. wenn ich mit switch case arbeite, werden bestimmte wege abgefahren und jede bewegungsänderung bekommt ein eigenes case. die z-achse muß aber case-Übergreifend bewegt werden.
so wie der code nun aussieht, bewegen sich die x- und y- achsen und auch die z-achse. die z-achse reagiert zufriedenstellend auf die messwerte. aber x- und y-achsen laufen extrem reduziert. die bewegung ist mit dem auge fast nicht wahr zu nehmen. ich habe zum spass den unteren codebereich, der sensordaten und umsetzung in z-achsenbewegung beinhaltet, zeile für zeile einkopiert und die fräse jedesmal angefahren. die serial.print-zeilen sind das problem. je mehr serial.print-zeilen um langsamer laufen x- und z-achse. :o
hat jemand eine idee?

 

code: [select]

#include <arduino.h>

int dirpin_x = 5;
int stepperpin_x = 2;

int dirpin_y = 6;
int stepperpin_y = 3;

int dirpin_z = 7;
int stepperpin_z = 4;

unsigned long move_x =1000;
unsigned long move_y =1000;
unsigned long move_z =200;
unsigned long interval;

//sensor
int sensorpin = a5;
int distance = 0;
int sollabstand = 104; //abstand des sensors zum objekt; kameraabstand dann 90mmm zum objekt


void setup()
{
  serial.begin (9600);
  pinmode(dirpin_x, output);
  pinmode(stepperpin_x, output);
  pinmode(dirpin_y, output);
  pinmode(stepperpin_y, output);
  pinmode(dirpin_z, output);
  pinmode(stepperpin_z, output);
  }

  void step_1(boolean dir, int steps) // einstellungen für die z-achse
  {
  digitalwrite(dirpin_z,dir);
  delay(50);
    for(int i=0;i<steps;i++)
    {
    digitalwrite(stepperpin_z, high);
    delaymicroseconds(600);
    digitalwrite(stepperpin_z, low);
    delaymicroseconds (600);
    }
}
void loop()
{
  static unsigned long lastmillis = 0;
  unsigned long currentmillis = millis();
  static byte step = 1;

  if(currentmillis - lastmillis >= interval)
    {
    lastmillis = currentmillis;
      if (++step ==3) step =1;
    }
 
    switch (step)
    {
      case 1:
      digitalwrite(dirpin_x, 1);
      digitalwrite(stepperpin_x, 1);
      delaymicroseconds(500);
      digitalwrite(stepperpin_x, 0);
      delaymicroseconds(500);
      interval = move_x;
      break; 
     
      case 2:
      digitalwrite(dirpin_y, 1);
      digitalwrite(stepperpin_y, 1);
      delaymicroseconds(2000);
      digitalwrite(stepperpin_y, 0);
      delaymicroseconds(2000);
      interval = move_y;     
      break;
    }
--------------------//////////////-------------------
    // der untere bereich umfasst die messdaten
    //des sharpsensors und die Übergabe die z-achse
    // die serial.print zeilen haben einfluß auf die geschwindigkeit der x- und y-achse
    // je mehr zeilen um langamer die x- und y-achse
   
    distance = analogread(sensorpin);
    serial.print("messwert: "); serial.print(distance); serial.print(" ");
    int distanceconverted = (207600 / (distance-11))/10;

    distanceconverted = constrain(distanceconverted, 50, 150);
    serial.print("abs. abstand: "); serial.print(distanceconverted); serial.print("mm ");
    serial.print("rel. abstand: "); serial.print(distanceconverted - sollabstand); serial.println(" mm");
   
    if (distanceconverted == 50)
    {
      step_1(true,0);
    }
    else if (distanceconverted == 150)
    {
      step_1(true,0);
    } 
    else if (distanceconverted > 104)
    {
      step_1(true,300);
    } 
    else if (distanceconverted < 104)
    {
      step_1(false,300);
    }

 }

     

hat jemand eine idee?
mit 9600 baud kannst du nicht mehr als 960 zeichen pro zekunde ausgeben, dann ist schicht im serial-schacht.

versuch's mal mit:
code: [select]
serial.begin (115200);
oder:
code: [select]
serial.begin (500000);

bei 500000 baud kannst du allerdings dann nicht mehr den seriellen monitor der arduino-ide verwenden, der diese baudrate nicht unterstützt, sondern du müßtest ein "serielles terminalprogramm" starten, bei dem du diese baudrate auch einstellen kannst.


Arduino Forum > International > Deutsch (Moderator: uwefed) > Serial.print-Zeilen reduzieren Steppermotorgeschwindigkeit


arduino

Comments