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
}
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?
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.
#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
}
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
Met vriendelijke groet
Jantje