Show Posts
Pages: [1] 2 3
1  Using Arduino / Programming Questions / Non blocking library for Wii Classic Controller on: August 12, 2013, 11:46:34 am
Hi,

I want to use a Wii Classic Controller to control a pan/tilt-head for my camera. I am currently using following library: http://playground.arduino.cc/Main/WiiClassicController10

But my problem is following part:
Code:
delay(100); // 1ms is enough to not overload the wii Classic, 100ms seems to ease the serial terminal a little

Due to my use of my pan/tilt-head, there should be no delays in the code.

Is there any other non-blocking library for the Wii classic controller or any possibility to change the WiiClassicController10-library?
2  Using Arduino / Displays / 16x2 LCD 5V running on Arduino Due with 3,3V? on: June 05, 2013, 12:10:10 am
Hi,
I wonder if I can use a usual 16x2 LCD-display with 5V on a Arduino Due which is using 3,3V for the inputs/outputs?
3  Using Arduino / Programming Questions / Re: Moving 3 steppers simultaneously with splines - keyframing on: June 04, 2013, 03:30:38 pm
Quote
It think those calculations might take some time...

Code:
      unsigned long start = micros();
      float tempY = tempCurveY.value(nPosition);
      float tempX = tempCurveX.value(nPosition);
      float tempZ = tempCurveZ.value(nPosition);
      unsigned long end = micros();
      unsigned long duration = end - start;
      Serial.print("Time to calculate one position: ");
      Serial.print(duration);
      Serial.println(" microseconds.");
And I KNOW whether, or not, the calculations take a long time, and, therefore, whether it matters.

If it takes 4 microseconds to compute a value and 40 milliseconds to use the value, the computation time is irrelevant.
Using your code, I´ve got about 5000 microseconds... Which would result in about 200 calculations per second (1/0,005)

And about 180 microseconds using the chipKIT u32. (5555 calculations per second(1/0,00018))

Is there any possibility to improve my code?
4  Using Arduino / Programming Questions / Re: Moving 3 steppers simultaneously with splines - keyframing on: June 02, 2013, 03:24:12 am
Code:
   float tempY = tempCurveY.value(nPosition);
      float tempX = tempCurveX.value(nPosition);
      float tempZ = tempCurveZ.value(nPosition);

It think those calculations might take some time...

Quote
What happened to setAcceleration()?
I have removed the acceleration and using constant speed instead.
5  Using Arduino / Programming Questions / Re: Moving 3 steppers simultaneously with splines - keyframing on: June 01, 2013, 03:48:31 pm
Quote
Telling the stepper to move again before it gets to the last position is wrong.

It will go a lot faster if you let it actually get up to speed (and to a position) before changing the target.

I think I´ve fixed now the issue with the change of the target, have I done it right?

All 3 steppers are moving now as desired. But if I set the resolution(n) higher, they are moving slowly. I think the MEGA with 16MHz is to slow for realtime-calculation of the values.

Is there a possibility to calculate the values in advance, save them somehow and later just read them and run the accelstepper-code?

Code:
#include <AccelStepper.h>
#include <spline.h>

Spline tempCurveX;
Spline tempCurveY;
Spline tempCurveZ;


AccelStepper stepperX(1, 33, 35);
AccelStepper stepperY(1, 51, 53);
AccelStepper stepperZ(1, 24, 22);

const int panM0 = 23;
const int panM1 = 25;
const int panM2 = 27;

const int tiltM0 = 41;
const int tiltM1 = 43;
const int tiltM2 = 45;

const int sliderMS1 = 34;
const int sliderMS2 = 32;
const int sliderMS3 = 30;

const int stepper4M0 = 52;
const int stepper4M1 = 50;
const int stepper4M2 = 48;

long nPosition = 0;

float n[7] = {
  -800,0,1000,2000,3000,4000,4800      };
float x[7] = {
  0,0,9000,11000,9000,0,0      };
float y[7] = {
  0,0,5000,0,5000,0,0      };
float z[7] = {
  0,0,90000,100000,90000,0,0      };


void setup()

  //  Serial.begin(9600);
  digitalWrite (tiltM0, LOW);
  digitalWrite (tiltM1, LOW);
  digitalWrite (tiltM2, HIGH);

  digitalWrite (panM0, LOW);
  digitalWrite (panM1, LOW);
  digitalWrite (panM2, HIGH);

  digitalWrite (sliderMS1, HIGH);
  digitalWrite (sliderMS2, HIGH);
  digitalWrite (sliderMS3, LOW);

  stepperX.setMaxSpeed(4000);
  stepperY.setMaxSpeed(4000);
  stepperZ.setMaxSpeed(4000);

}

void loop()
{

  tempCurveX.setPoints(n,x,7);
  tempCurveX.setDegree(Catmull);

  tempCurveY.setPoints(n,y,7);
  tempCurveY.setDegree(Catmull);

  tempCurveZ.setPoints(n,z,7);
  tempCurveZ.setDegree(Catmull);

  if(nPosition <=4000){
    if (stepperX.distanceToGo() == 0 && stepperY.distanceToGo() == 0 && stepperZ.distanceToGo() == 0){
      float tempY = tempCurveY.value(nPosition);
      float tempX = tempCurveX.value(nPosition);
      float tempZ = tempCurveZ.value(nPosition);

      long tempGerundetX = long(tempX+0.5);
      long tempGerundetY = long(tempY+0.5);
      long tempGerundetZ = long(tempZ+0.5);

      stepperX.moveTo(tempGerundetX);
      stepperY.moveTo(tempGerundetY);
      stepperZ.moveTo(tempGerundetZ);

      //  Serial.println(tempGerundetX);
      nPosition++;
    }
    stepperX.setSpeed(4000);
    stepperX.runSpeedToPosition();

    stepperY.setSpeed(4000);
    stepperY.runSpeedToPosition();

    stepperZ.setSpeed(3000);
    stepperZ.runSpeedToPosition();
  }

}
6  International / Deutsch / Re: 3 Schrittmotoren gleichzeitig ansteuern und Splines abfahren on: June 01, 2013, 03:42:47 pm
Hab jetzt mal ein wenig rumgespielt und Accelstepper zusammen mit den Splines und allen 3 Motoren hinbekommen:

Code:

#include <AccelStepper.h>
#include <spline.h>

Spline tempCurveX;
Spline tempCurveY;
Spline tempCurveZ;


AccelStepper stepperX(1, 33, 35);
AccelStepper stepperY(1, 51, 53);
AccelStepper stepperZ(1, 24, 22);

const int panM0 = 23;
const int panM1 = 25;
const int panM2 = 27;

const int tiltM0 = 41;
const int tiltM1 = 43;
const int tiltM2 = 45;

const int sliderMS1 = 34;
const int sliderMS2 = 32;
const int sliderMS3 = 30;

const int stepper4M0 = 52;
const int stepper4M1 = 50;
const int stepper4M2 = 48;

long nPosition = 0;

float n[7] = {
  -800,0,1000,2000,3000,4000,4800      };
float x[7] = {
  0,0,9000,11000,9000,0,0      };
float y[7] = {
  0,0,5000,0,5000,0,0      };
float z[7] = {
  0,0,90000,100000,90000,0,0      };


void setup()

  //  Serial.begin(9600);
  digitalWrite (tiltM0, LOW);
  digitalWrite (tiltM1, LOW);
  digitalWrite (tiltM2, HIGH);

  digitalWrite (panM0, LOW);
  digitalWrite (panM1, LOW);
  digitalWrite (panM2, HIGH);

  digitalWrite (sliderMS1, HIGH);
  digitalWrite (sliderMS2, HIGH);
  digitalWrite (sliderMS3, LOW);

  stepperX.setMaxSpeed(4000);
  stepperY.setMaxSpeed(4000);
  stepperZ.setMaxSpeed(4000);

}

void loop()
{

  tempCurveX.setPoints(n,x,7);
  tempCurveX.setDegree(Catmull);

  tempCurveY.setPoints(n,y,7);
  tempCurveY.setDegree(Catmull);

  tempCurveZ.setPoints(n,z,7);
  tempCurveZ.setDegree(Catmull);

  if(nPosition <=4000){
    if (stepperX.distanceToGo() == 0 && stepperY.distanceToGo() == 0 && stepperZ.distanceToGo() == 0){
      float tempY = tempCurveY.value(nPosition);
      float tempX = tempCurveX.value(nPosition);
      float tempZ = tempCurveZ.value(nPosition);

      long tempGerundetX = long(tempX+0.5);
      long tempGerundetY = long(tempY+0.5);
      long tempGerundetZ = long(tempZ+0.5);

      stepperX.moveTo(tempGerundetX);
      stepperY.moveTo(tempGerundetY);
      stepperZ.moveTo(tempGerundetZ);

      //  Serial.println(tempGerundetX);
      nPosition++;
    }
    stepperX.setSpeed(4000);
    stepperX.runSpeedToPosition();

    stepperY.setSpeed(4000);
    stepperY.runSpeedToPosition();

    stepperZ.setSpeed(3000);
    stepperZ.runSpeedToPosition();
  }

}


Wenn ich die Auflösung (n) erhöhe, wird es spürbar langsam. Ich habe es auch mit dem chipKIT u32(80MHz) probiert, jedoch gibt es da Komplikationen mit der Accelstepper und der Splines-Library, sodass ich es nicht zum Laufen bekommen habe. Ich werde mir demnächst einen Due anschaffen und es damit probieren.
7  International / Deutsch / Re: 3 Schrittmotoren gleichzeitig ansteuern und Splines abfahren on: June 01, 2013, 12:00:20 pm
Danke für die Antwort.

Also zunächst einmal:

Das Diagramm ist jetzt für den Intervallmodus, d.h. ich mache 1000 Bilder(X-Achse). Die komplette Bewegung wird also auf 1000 Zwischenbewegungen aufgeteilt. Also Bild machen-->Motoren bewegen sich ein Stückchen-->Pause-->Bild machen-->...

Die Schrittmotoren laufen mit 1/16 Schritten, zusammen mit dem 1:50 Getriebe brauche ich also 160.000 Schritte für eine komplette 360°-Drehung um die horizontale Achse. Mit meinem aktuellen Programme brauche ich für die komplette Umdrehung etwa 15 Min., was deutlich zu lange ist. Auf 1/8 oder 1/4-Schritte möchte ich nicht gehen, da es sonst zu sehr vibriert.

Beim Videomodus siehst du evtl., dass ich die X-Zeit nicht über die Zeit fahren lassen, sondern über die Bewegung der Drehachse(X). P1, P2,P3 und P4 sind also die absoluten Positionen (in Schritten) der horizontalen Drehachse.

Der Worst-Case wäre eine komplette 360°-Drehung, also 160.000 Schritte, dafür peile ich etwa 30 Sekunden an, was also ca. 5300 Schrittberechnungen pro Sekunde pro Achse entspricht, und da ist der Arduino deutlich überfordert. Daher habe ich auch an die Möglichkeit gedacht, die ganzen Werte nicht in Echtzeit zu berechnen, sondern im Voraus und dann später einfach abzufahren. Ein Array kommt nicht in Frage, da die Speicherkapazität des Arduino viel zu klein ist. Des Weiteren hatte ich überlegt die Werte evtl. in eine txt-Datei auf einer MicroSD-Karte zu speichern, jedoch weiß ich nicht, wie schnell der Arduino bei  Auslesen ist.
8  International / Deutsch / 3 Schrittmotoren gleichzeitig ansteuern und Splines abfahren on: May 31, 2013, 02:23:16 pm
Hallo,

für mein Kamera-Motion-Control-System suche ich eine Möglichkeit 3 oder mehr Schrittmotoren gleichzeitig laufen zu lassen.

Es sind zwei verschiedene Modi geplant: Kontinuierliche Bewegung und intervallweise Bewegung.

Zum Programm:

Ich will zunächst Anfangsposition, 3 Zwischenpunkte und die Endposition manuell anfahren und die entsprechenden Schritte speichern. (Funktioniert bereits).

Dann sollen die Punkte mit Splines verbunden werden und die Strecke abgefahren werden, was soweit auch funktioniert.

Benutzt habe ich dafür Arduino-Splines:
https://github.com/kerinin/arduino-splines

und AH-Pololu für die Schrittmotorenansteuerung:
http://arduino.alhin.de/index.php?n=48

Hier mal der Ausschnitt aus dem Programmcode
Code:
            float x[7] = {
    P4x*0.2,P0x,-P1x,-P2x,-P3x,-P4x,-P4x*1.2      };
  float y[7] = {
    0,P0y,P1y,P2y,P3y,P4y,0      };
  tempCurve.setPoints(x,y,7);
  tempCurve.setDegree( Catmull );

  for( long i = 0; i <= -P4x; i+= 1 ) {
    float temp = tempCurve.value(i);
    float tempPREV = tempCurve.value(i-1);
    long tempGerundet = long(temp+0.5);
    long tempPREVGerundet = long(tempPREV+0.5);
    // Serial.println(temp);
    // Serial.println(tempGerundet);
    // Serial.println((tempGerundet-tempPREVGerundet)*1);
    stepperY.move((tempGerundet-tempPREVGerundet)*1);
    stepperX.move(-1);
  }

Die AH-Pololu-Library kann jedoch nur einen Schrittmotor gleichzeitig ansteuern. Bei 3 Schrittmotoren ist es nicht mehr hinnehmbar, dass die Motoren die Schritte immer hintereinander ausführen. Des Weiteren glaub ich, dass die Arduino-Splines-Library ziemlich rechenintensiv ist und dadurch eine schnelle Bewegung nicht möglich ist.

Ich hatte auch die Accelstepper-Library ausprobiert:
void setup()
Code:
{  
  //Serial.begin(115200);
  digitalWrite (panM0, LOW);
  digitalWrite (panM1, LOW);
  digitalWrite (panM2, HIGH);

  stepper.setMaxSpeed(4000);
  stepper.setAcceleration(20000);

}

void loop()
{
  float x[7] = {
    -1000,0,2500,5000,7500,10000,15000  };
  float y[7] = {
    0,0,8000,2000,8000,1000,0  };
  tempCurve.setPoints(x,y,7);
  tempCurve.setDegree( Catmull );

  for( long i = 0; i <= 10000; i+= 1 ) {
    stepper.moveTo(tempCurve.value(i));
    stepper.run();
  }
}

Jedoch weiß ich dort überhaupt nicht, wie ich die zwei weiteren Motoren mit einbinden kann...

Ich suche also nun eine Möglichkeit mehrere Schrittmotoren gleichzeitig verfahren zu lassen und dabei bestimmte Positionen abzufahren.(siehe Bild im Anhang).


 
9  Using Arduino / Programming Questions / Moving 3 steppers simultaneously with splines - keyframing on: May 31, 2013, 01:09:05 pm
Hi,

I am building a motion-control-system for videography.

I am using a slider and a pan/tilt-unit, which are working with steppers.

My goal is to set up 5 points (start, 3 intermediate points and the endposition) manually for each axis.

Later on, the program should run all 3 steppers  simultaneously and connect the points via splines, to achieve a smooth motion.

What is the best way to realise something like this?

I have already tried a mix of Arduino-Splines and Accelstepper. But I´ve the problem, that the stepper is moving really slow. Furthermore I´ve not figured out, how to use multiply steppers  simultaneously.

Code:
void setup()
{  
  //Serial.begin(115200);
  digitalWrite (panM0, LOW);
  digitalWrite (panM1, LOW);
  digitalWrite (panM2, HIGH);

  stepper.setMaxSpeed(4000);
  stepper.setAcceleration(20000);

}

void loop()
{
  float x[7] = {
    -1000,0,2500,5000,7500,10000,15000  };
  float y[7] = {
    0,0,8000,2000,8000,1000,0  };
  tempCurve.setPoints(x,y,7);
  tempCurve.setDegree( Catmull );

  for( long i = 0; i <= 10000; i+= 1 ) {
    stepper.moveTo(tempCurve.value(i));
    stepper.run();
  }
}
10  International / Deutsch / Re: Schrittmotoren laufen langsam, sobald zusätzlicher Code hingezufügt wird on: April 14, 2013, 08:51:35 am
Hab grad bemerkt, dass es evtl. an der LiquidCrytal-Library liegen könnte.

Sobald ich folgende Zeilen einfüge, laufen die Schrittmotoren deutlich langsamer:

Code:
  lcd.setCursor(1,0);
  lcd.print("VIDEO");
  lcd.setCursor(1,1);
  lcd.print("TIMELAPSE");
  lcd.setCursor(12,0);
  lcd.print("PANO");

Innerhalb der Library sind auch mehrere delayMicroseconds enthalten.

Gibt es andere LCD-Libraries ohne delay-Funktionen?
11  International / Deutsch / Re: Schrittmotoren laufen langsam, sobald zusätzlicher Code hingezufügt wird on: April 13, 2013, 12:24:25 pm
Alle Delays, die ich benutze, werden nur aufgerufen, wenn ich den JoyStick bewege, oder den Taster drücke. Deshalb habe ich den Aufruf für den Stepper (AccelStepperX.run()smiley-wink zum Testen auch gleich zu Beginn des loop-voids geschrieben.

Da das Problem auch auftritt, wenn ich keine Eingaben mache, also auch kein Delay aufrufe, liegt es nicht an den delays.
12  International / Deutsch / Schrittmotoren laufen langsam, sobald zusätzlicher Code hingezufügt wird on: April 13, 2013, 11:26:30 am
Hallo,

ich baue mir grad einen Controller, mit dem ich 2 Schrittmotoren ansteuern kann. Beide Schrittmotoren sind über Pololu-Controller mit dem Arduino verbunden. Zusätzlich habe ich ein 16x2-LCD-Display und einen Joystick und Taster zur Steuerung.

Als Library für die Schrittmotoren nutze ich den AccelStepper.

Mein Problem ist nun, dass die Schrittmotoren extrem langsam werden, sobald zusätzliche Code dazugefügt wird. Ohne das analogRead und das Switch/Case laufen die Motoren normal/schnell. Mit dem analogRead langsamer und sobald das Switch/Case dazu kommt laufen die in Zeitlupe.

Wie müsste ich das Programm aufbauen, damit die Schrittmotoren nicht vom restlichen Code beeinflusst werden?

Zum Einsatz kommt ein Arduino MEGA 2560.

CODE IST NOCH NICHT VOLLSTÄNDIG:

Code:
#include <LiquidCrystal.h>
#include <AH_Pololu.h>
#include <AccelStepper.h>

LiquidCrystal lcd(29, 27, 22, 24, 26, 28);

//-------------Defintion for AH_Pololu-----------------
AH_Pololu stepperY(200,30,31,51,50,49,48); // Kippen
AH_Pololu stepperX(200,34,35,45,44,43,42); // Drehen

//-------------Defintion for AccelStepper-----------------
AccelStepper AccelStepperY(1, 31, 30); // Kippen
AccelStepper AccelStepperX(1, 35, 34); // Drehen

//-------------Defintion Analoge Eingänge-----------------
const int button0 =  A0;
const int joyX =  A1; // Nullwert = 525
const int joyY =  A2; // Nullwert = 537

//-------------Werte Analoge Eingänge-----------------
int button0_value = 0;
int joyX_value = 0;
int joyY_value = 0;

int progStep = 0; // 0 = Auswahl Modus -- 1 = Auswahl Motion -- 2 = Programmablauf
int modus       = 0; // 0=VIDEO   --  1=TIMELAPSE  --  2=PANO
int motionModus = 0; // 0=SLIDER  --  1=PANOHEAD   --  2=BOTH

int caseVIDEO = 0;
int caseTIMELAPSE = 0;
int casePANO = 0;

int hzX;
int schrittX =0;

int hzY;
int schrittY =0;
void setup()
{
    pinMode (button0, INPUT);
    pinMode (joyX, INPUT);
    pinMode (joyY, INPUT);
  //Serial.begin(115200);
  lcd.begin(16, 2);              // start the library
  AccelStepperX.setMaxSpeed(2000);
  AccelStepperX.setAcceleration(1000);
  AccelStepperX.moveTo(-8000);
}

void loop()
{
    AccelStepperX.run();
   

  //-------------Einlesen der Eingaben-----------------
  joyX_value = analogRead(joyX);
  joyY_value = analogRead(joyY);
  button0_value = analogRead(button0);

  switch(progStep){

    //------Auswahl Modus-------
  case 0:
    AuswahlModus();
    break;
    //------Auswahl Motion-------
  case 1:
    AuswahlMotion();
    break;
    //------Auswahl Programmablauf-------
  case 2:
    switch (modus){
    case 0:
      video();
      break;

    case 1:
      timelapse();
      break;

    case 2:
      pano();
      break;
    }
    break;

  } // switch (progStep)
} // void loop()

Code:
//---------------------------------------------------------------
//-----------------------Auswahl Modus---------------------------
//---------------------------------------------------------------

void AuswahlModus(){
  //-------Auswahl Modus - Anzeige---------
  lcd.setCursor(1,0);
  lcd.print("VIDEO");
  lcd.setCursor(1,1);
  lcd.print("TIMELAPSE");
  lcd.setCursor(12,0);
  lcd.print("PANO");   
  //------Auswahl Modus - Control-Display-----------
  if (modus==0){
    lcd.setCursor(0,0);
    lcd.print(">");
  }
  else if(modus==1){
    lcd.setCursor(0,1);
    lcd.print(">");
  }
  else{
    lcd.setCursor(11,0);
    lcd.print(">");
  }

  //-------Auswahl Modus - Control-Funktion---------------------------------
  if(joyX_value>1000){
    delay(400);

    if(modus==0){
      modus=1;
    }
    else if(modus==1){
      modus=2;
    }
    else{
      modus=0;
    }
    lcd.clear();
  }
  if(button0_value>1000){
    delay(400);
    progStep+=1;
    lcd.clear();
  }
}
//---------------------------------------------------------------
//----------------------Auswahl Motion---------------------------
//---------------------------------------------------------------

void AuswahlMotion(){

  //-------Auswahl Motion - Anzeige---------------------------
  lcd.setCursor(1,0);
  lcd.print("PAN/TILT");
  lcd.setCursor(1,1);
  lcd.print("SLIDER");
  lcd.setCursor(12,0);
  lcd.print("BOTH");   
  //------Auswahl Motion - Control-Display--------------------------------
  if (motionModus==0){
    lcd.setCursor(0,0);
    lcd.print(">");
  }
  else if(motionModus==1){
    lcd.setCursor(0,1);
    lcd.print(">");
  }
  else{
    lcd.setCursor(11,0);
    lcd.print(">");
  }

  //------Auswahl Motion - Control-Funktion--------------
  if(joyX_value==1023){
    delay(400);

    if(motionModus==0){
      motionModus=1;
    }
    else if(motionModus==1){
      motionModus=2;
    }
    else{
      motionModus=0;
    }
    lcd.clear();
  }

  if(button0_value>1000){
    delay(400);
    progStep+=1;
    lcd.clear();
  }
}

Code:
//---------------------------------------------------------------
//---------------------------VIDEO-------------------------------
//---------------------------------------------------------------
void video(){
 
  //-----------Caseweiterschaltung durch Button----------
  if(button0_value>1000){
    delay(400);
    caseVIDEO+=1;
    lcd.clear();
  }
 
  int HzX =4000;

  switch (caseVIDEO){

  case 0:
    lcd.setCursor(6,0);
    lcd.print("MOVE");
    lcd.setCursor(0,1);
    lcd.print("TO STARTPOSITION");
   
stepperX.setSpeedHz(1000);
stepperX.move(-10);
delay(100);
   // stepperX.setSpeedHz(HzX);
   // stepperX.move(16);



 /*      //-----------X----------------------
   if (joyX_value >550 && joyX_value<700)
   {
   schrittX-=8;
   hzX =300;
   }
   if (joyX_value >700 && joyX_value <1020)
   {
   schrittX-=8;
   hzX =1000;
   }
   if (joyX_value >1020)
   {
   schrittX-=8;
   hzX =5000;
   }
   
   if (joyX_value <520 && joyX_value>300)
   {
   schrittX+=8;
   hzX =300;
   }
   if (joyX_value <300 && joyX_value >20)
   {
   schrittX+=8;
   hzX =1000;
   }
   if (joyX_value <20)
   {
   schrittX+=8;
   hzX =5000;
   }
  //-----------------Y----------------------
  if (joyY_value >540 && joyY_value<700)
  {
    schrittY+=8;
    hzY =300;
  }
  if (joyY_value >700 && joyY_value <1020)
  {
    schrittY+=8;
    hzY =1000;
  }
  if (joyY_value >=1020)
  {
    schrittY+=8;
    hzY =5000;
  }

  if (joyY_value <510 && joyY_value>300)
  {
    schrittY-=8;
    hzY =300;
  }
  if (joyY_value <300 && joyY_value >5)
  {
    schrittY-=8;
    hzY =1000;
  }
  if (joyY_value <=5)
  {
    schrittY-=8;
    hzY =5000;
  }
 
  stepperX.setSpeedHz(hzX);   
  stepperX.move(schrittX);
   
  stepperY.setSpeedHz(hzY);
  stepperY.move(schrittY);*/
    break;

  case 1:
    break;

  case 2:
    break;

  case 3:
    break;

  case 4:
    break;
  }
}


//---------------------------------------------------------------
//-------------------------TIMELAPSE-----------------------------
//---------------------------------------------------------------
void timelapse(){
  lcd.setCursor(0,1);
  lcd.print("TIMELAPSE");

}

//---------------------------------------------------------------
//----------------------------PANO-------------------------------
//---------------------------------------------------------------
void pano(){
  lcd.setCursor(0,1);
  lcd.print("PANO");

}

13  International / Deutsch / Saubere und übersichtliche Programmierweise gesucht on: March 31, 2013, 03:19:04 am
Hallo,

momentan bin ich an einem Projekt dran und es wird wohl auf >1000 Zeilen Code hinauslaufen. Bisher habe ich einfach alles in eine Datei und ins void loop() reingeschrieben. Das ist natürlich alles andere als übersichtlich.

Kennt einer von euch eine Seite, die eine saubere und übersichtliche Programmierweise für Arduino-Programme vorschlägt?
14  International / Deutsch / Re: [Schrittmotor] Schritte mit AccelStepper zählen on: March 25, 2013, 05:31:44 am
http://www.airspayce.com/mikem/arduino/AccelStepper/

Und hier der Code, mit dem ich momentan die Stepper per Joystick bewege:

Code:
#include <AccelStepper.h>

AccelStepper Xaxis(1, 5, 4); // pin 2 = step, pin 5 = direction
AccelStepper stepper(1, 9, 8); // pin 2 = step, pin 5 = direction

int schritte = 0;

void setup()

   Xaxis.setMaxSpeed(1000);
   Yaxis.setMaxSpeed(1000);
}

void loop()
{   
  int joyX_value = analogRead(A0);
  int joyY_value = analogRead(A1);
 
  //-------X-Achse--------
  if(joyX_value <100){
  Xaxis.setSpeed(-(1023-joyX_value)*2);
  Xaxis.runSpeed();
  } 
  if(joyX_value <500){
  Xaxis.setSpeed(-(1023-joyX_value)*0.2);
  Xaxis.runSpeed();
  }
  if(joyX_value >520){
  Xaxis.setSpeed(joyX_value*0.2);
  Xaxis.runSpeed();
  }
  if(joyX_value >1000){
  Xaxis.setSpeed(joyX_value*2);
  Xaxis.runSpeed();
  }
 
  //------Y-Achse----------
    if(joyY_value <100){
  Yaxis.setSpeed(-(1023-joyY_value)*2);
  Yaxis.runSpeed();
  } 
  if(joyY_value <500){
  Yaxis.setSpeed(-(1023-joyY_value)*0.2);
  Yaxis.runSpeed();
  }
  if(joyY_value >520){
  Yaxis.setSpeed(joyY_value*0.2);
  Yaxis.runSpeed();
  }
  if(joyY_value >1000){
  Yaxis.setSpeed(joyY_value*2);
  Yaxis.runSpeed();
  }
}
15  International / Deutsch / [Schrittmotor] Schritte mit AccelStepper zählen on: March 24, 2013, 01:31:42 pm
Hallo,

ich plane grad einen Panoramakopf für meine Kamera.

Es müssen zwei Schrittmotoren mit Pololu-Treiber angesteuert werden.

Geplante Funktion:
1. manuelles Anfahren der Startposition per Joystick (funktioniert bereits).
2. Speichern der Startposition bzw. Setzen der Zähler auf 0.
3. manuelles Anfahren der Endposition per Joystick
4. Speichern der Endposition.

Ich finde die Accelstepper-Library sehr schlecht beschrieben bzw. finde mich überhaupt nicht zurecht.

Was mir nun fehlt, ist die Funktion für Schritt 3, also das Zählen der Schritte. Gibt es da schon was fertiges oder wie kann ich das am besten lösen? Ich möchte also mit dem Joystick die Schrittmotoren bewegen und dabei sollen die Schritte gezählt werden, die zurückgelegt wurden.

Pages: [1] 2 3