ich bastle mir gerade einen Drehteller für Timelapseaufnahmen, welcher von einem Schrittmotor angetrieben wird. Der Teller soll sich immer um einen bestimmten Winkel drehen (16 Schritte), dann wird eine Aufnahme gemacht (mit Fokus und Auslöser), der Teller wieder weitergedreht usw.. Nach 25 Bewegungen ist das ganze fertig und stoppt. Soweit funktioniert momentan auch alles. Jetzt habe ich nur das Problem, dass ich das ganze über einen Tastendruck starten möchte (Taster an Arduino-Pin 2), allerdings startet das ganze Programm schon, wenn ich die Schaltung mit Strom versorge. Ich habe den Pullup an Pin 2 aktiviert, wenn Pin 2 auf Gnd gezogen wird, sollte dieser eigentlich den state-Zustand togglen. Aber irgendwie funktioniert das nicht. Was mache ich da falsch? Danke schon mal für eure Hilfe!
Gruß,
Martin
//Foto-Drehteller
#define step_pin 4 // Step Pin DRV8825
#define trigger_pin A0 //Pin für Auslöser
#define focus_pin A1 //Pin für Autofocus
#define dir_pin 3 // Direction Pin DRV8825
#define enable_pin 5 // Enable Pin DRV8825
#define sleep_pin 11 // Pin 11 Verbunden mit SLEEP pin
#define start_switch 2 // Pin 2 verbunden mit Start/Stop-Schalter
const int trigger_time = 100; //Zeit, die der Auslöser gedrückt wird
int delay_time = 3000; // Gesamtzeit für eine Aufnahme
int focus_time = 1500; //Zeit zum fokusieren
volatile boolean state = false;
int steps; //Stepperschritte
int scancount; //Zähler für Scanschritte
void setup() {
Serial.begin(9600);
pinMode(dir_pin, OUTPUT);
pinMode(step_pin, OUTPUT);
pinMode(enable_pin, OUTPUT);
pinMode(trigger_pin, OUTPUT);
pinMode(focus_pin, OUTPUT);
pinMode(sleep_pin, OUTPUT);
pinMode(start_switch, INPUT_PULLUP);
digitalWrite(trigger_pin, LOW);
digitalWrite(focus_pin, LOW);
digitalWrite(enable_pin, HIGH);
digitalWrite(sleep_pin, HIGH);
delay(5);
scancount = 0;
steps = 0;
}
void loop() {
//state = false;
if (digitalRead(start_switch)== LOW); {
delay(20);
state = !state;
}
while ((scancount<25) && (state = true) && steps < 16) {
digitalWrite(enable_pin, LOW);
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, HIGH);
delay(10);
digitalWrite(step_pin, LOW);
delay(10);
steps++; // Stepperschritte hochzählen
}
if (scancount<25) {
delay(delay_time/2);
digitalWrite(focus_pin, HIGH);
delay(focus_time);
digitalWrite(trigger_pin, HIGH);
delay(trigger_time);
digitalWrite(trigger_pin, LOW);
digitalWrite(focus_pin, LOW);
delay((delay_time/2) - trigger_time);
scancount++; //Scandurchgang hochzählen
steps = 0; //Stepperschritte zurücksetzen
Serial.print(scancount);
}
else {
digitalWrite(focus_pin, LOW);
digitalWrite(trigger_pin, LOW);
}
}
Hallo,
ich hab das noch nicht ganz verstanden. Mit dem Starttaster soll der Vorgang starten, und sollen dann automatisch alle 25 Bewegungen durchlaufen. Oder soll es so sein das nach jeder Bewegung der Starttaster erneut gedrückt werden muss.?
Er macht 25 Bilder.
Für jedes Bild dreht der Teller 16 Steps.
Den Vorgang will er mit einem Taster starten.
Dann alles einmal im Umlauf - und Schluß, bis sich wieder ein Tastendruck meldet....
Hallo,
dann kann ich mich ja entspannt auf die Couch begeben. Ich wollte da gerade auch mal dran , mir war der Ablauf aber noch nicht ganz klar.
Gruß Heinz
Hallo,
ändere mal den Abschnitt, ist zwar murx geht aber
while (digitalRead(start_switch)== HIGH) { // hier einen doofe schleife
delay(20);
}
Serial.println("es geht los");
while (scancount<25 && steps < 16) { // das state raus sonnst alles wie gehabt