stappenmotor met big easy shield en accelstepper

Ik heb een stappenmotor welke ik 4 keer 90 graden wil laten draaien, en na elke rotatie mijn fototoestel een foto wil laten maken. Ik heb een programma geschreven wat werkt zonder gebruik te maken van de accelstepper bibliotheek. Nu wil ik het zelfde voor elkaar krijgen m et de accelstepper, om acceleratie en deacceleratie te kunnen gebruiken.
Hieronder de code zonder accelstepper en met. Zonder werkt het, met niet. Kunnen jullie me in de goede richting sturen?

#define SHUTTER_PIN 7
#define DIRECTION_PIN 8
#define STEPPER_PIN 9
int TotalShots = 4;
long StepsPerShot = 85924 / TotalShots; // 85924 is the total amound of steps te complete a rotation

void setup() {                

  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);

}

void loop()  { 

for(int shot = 0; shot < TotalShots; shot++)
{
    for(int steps = 0; steps < StepsPerShot; steps++)
    {
      digitalWrite(STEPPER_PIN, HIGH);
      delayMicroseconds(60); // speed of the stepper         
      digitalWrite(STEPPER_PIN, LOW); 
      delayMicroseconds(60);
    }
    delay(1000);  
    digitalWrite(SHUTTER_PIN, LOW);
    delay(2000);  // take shot
    digitalWrite(SHUTTER_PIN, HIGH); 
  }


while(true) {} // execution does not proceed past this point  

}

Met accelstepper:

#define SHUTTER_PIN 7
#include <AccelStepper.h>
int TotalShots = 4;
long pos = 85924 / TotalShots; // 85924 is the total amound of steps te complete a rotation
AccelStepper stepper(1, 9, 8); // Define a stepper and the pins it will use

void setup() {                

  stepper.setMaxSpeed(6000);
  stepper.setAcceleration(1000);
  pinMode(SHUTTER_PIN, OUTPUT);

}

void loop()  
{ 
 for(int shot = 0; shot < TotalShots; shot++)
    {  
       {
         stepper.setCurrentPosition(0); 
         stepper.moveTo(pos);   
         stepper.run();
       }                    
    delay(1000);  
    digitalWrite(SHUTTER_PIN, LOW);
    delay(2000);  // take shot
    digitalWrite(SHUTTER_PIN, HIGH);
   } 

while(true) {} // execution does not proceed past this point  

}

Iemand een idee? Het lukt me niet het probleem te doorgronden..

hanskes
Ik ken die accelstepper bibliotheek niet dus daar kan ik niks over zeggen.
Maar wat werkt er niet? Wat doet het en wat wil je dat het doet?
Waarom wil je de andere bibliotheek gebruiken als het met de gewone lukt?
Zitten er voorbeeld programma's bij de bibliotheek ? En zo ja kan je die doen werken zoals het hoort?

Met vriendelijke groet
Jantje

Dag Jantje,

Ik wilde de bibliotheek gebruiken omdat deze de motor kan versnellen en vertragen. Omdat de camera vrij zwaar moet deze in beweging gebracht worden en op het eind rustig afremmen.
Ik heb de code al wat aangepast en het lukt me om de rotatie van 90 graden gevolgd door het nemen van een foto continue te laten herhalen. Ik wil graag dat deze na vier keer stopt.

Dit is de code die ik nu heb:

#define SHUTTER_PIN 7
#include <AccelStepper.h>
int TotalShots = 4;
long pos = 85924 / TotalShots; // 85924 is the total amound of steps te complete a rotation
AccelStepper stepper(1, 9, 8); // Define a stepper and the pins it will use

void setup() {                

  stepper.setMaxSpeed(4000);
  stepper.setAcceleration(4000);
  pinMode(SHUTTER_PIN, OUTPUT);
  Serial.begin(9600);
  Serial.println("start of the program");

}

void loop()  
{ 

//for (int shot=0 ; shot < TotalShots ; shot++)

    { 
       stepper.moveTo(pos);   
       stepper.run();
      
         if (stepper.distanceToGo() == 0)        
         {
            delay(1000);  
            Serial.println("number of shots"); 
   //       digitalWrite(SHUTTER_PIN, LOW);
   //       delay(2000);  // take shot
   //       digitalWrite(SHUTTER_PIN, HIGH);
            stepper.setCurrentPosition(0);
         } 
      
  }
//while(true) {} // execution does not proceed past this point
}

Als ik de haakjes voor de regels "for (int shot=0 ; shot < TotalShots ; shot++)" en "while(true) {}" weghaal gebeurd er niets meer met de er tussenliggende code.

Groeten Hans

Ik ben er voorlopig weer uit.

Deze code doet wat ik wil dat het doet:

#define SHUTTER_PIN 7
#include <AccelStepper.h>
int TotalShots = 4;
long pos = 85924 / TotalShots; // 85924 is the total amound of steps te complete a rotation
AccelStepper stepper(1, 9, 8); // Define a stepper and the pins it will use

void setup() {                

  stepper.setMaxSpeed(4000);
  stepper.setAcceleration(4000);
  pinMode(SHUTTER_PIN, OUTPUT);
  Serial.begin(9600);
  Serial.println("start of the program");

}

void loop()  
{ 

for (int shot=0 ; shot < TotalShots ; shot++)

    { 
       stepper.moveTo(pos);   
      
         while (stepper.distanceToGo() != 0) 
             {
               stepper.run();
             }
             
         delay(2000);  
         Serial.println("number of shots"); 
         digitalWrite(SHUTTER_PIN, LOW);
         delay(2000);  // take shot
         digitalWrite(SHUTTER_PIN, HIGH);
         delay(2000);
         stepper.setCurrentPosition(0);
          
      
  }
while(true) {} // execution does not proceed past this point
}

hanskes
Je kan die

while(true) {}

vermijden door al je code in setup te steken. Dan is het ook duidelijk dat je alles maar 1 keer doet.
Om energie te sparen kan je dan je arduino in sleep mode zetten.
Waarschijnlijk gebruik je reset om te herstarten. Dat werkt dan ook nog :slight_smile:
Met vriendelijke groet
Jantje