Hallo Forum
ich bin neu hier und möchte euch um Hilfe bitten.
Ich bin als Hobby-Fotograf gerade dabei mir einen Time Lapse Slider zu bauen... Die Mechanik ist voll funktionsfähig und ich denke auch das ich die Elektronik ohne Probleme zum laufen bringe... nur die Programmierung des Arduino Nano macht mir zu schaffen.
Zum Problem:
Ich habe mir von Johannes Benkert ( www.Glohbe.de ) gegen eine kleine Spende den Sketch seines Sliders besorgt. Leider ist sein Programm nicht so wie ich es für meine Zwecke brauche. Daher habe ich mich dran gemacht den Sketch umzuschreiben. Vieles (wohl eher 90%) konnte ich weiterverwenden. Nur benötige ich als absoluter Arduino-Anfänger eine kleine Hilfestellung.
Im Grunde ist das Programm recht einfach. Es läuft im Loop ein Menü welches aus zwei Unterpunkten besteht ("Setup" für Timelapse und "Manuell" für naja Manuell bedienen halt). Innerhalb der Funktion "Setup" werden dann die einzelnen Aufgaben bzw. Eingaben abgearbeitet (Anzahl Bilder, Intervall, etc.) bis man an die Funktion "dotimelapse()" kommt welche dann als While()Schleife die eigentliche Arbeit vollbringt und danach wieder ins Hauptmenü springt.
Erst an dieser Stelle weicht meine Programmierung von der Vorlage ab (oder besser sollte davon abweichen)
Ich habe es mir so vorgestellt:
void doTimelapse(){
steps = (1828 * Strecke); //Anzahl Schritte für gewünschte Fahrstrecke
pictureCounter = 0;
setRes(16);
lcd.clear();
digitalWrite(motorEnable,LOW);
digitalWrite(motorDir,motorDirection);
speed = 800;
while(pictureCounter < maxPics){
shutter();
lcd.setCursor(0,0); lcd.print("Timelapse...");
myTxt = String("Bilder: ") + pictureCounter + (" / ") + maxPics;
lcd.setCursor(0,1); lcd.print(myTxt);
Move(steps);
}
}
Innerhalb der While() Schleife werden die Funktionen shutter() und Move() aufgerufen
void shutter(){
digitalWrite(shutterPin, HIGH);
delay(50); //geht sicher auch schneller
digitalWrite(shutterPin, LOW);
pictureCounter++;
}
void Move(int steps){
delay((Beli*1000) + 450); //Belichtungszeit + Puffer abwarten bevor losgefahren wird
for(int i = 0;i<steps;i++){
digitalWrite(motorStep,HIGH); // Output high
delayMicroseconds(speed);
digitalWrite(motorStep,LOW); // Output low
delayMicroseconds(speed);
}
}
Nun möchte ich aber das shutter() und move() "parallel" beginnen, da das ganze ja "Zeitkritisch" ist.
Wie kann man das lösen?
Google spuckt millis() und FSM und so was aus aber dazu stecke ich zu wenig in der Materie um es von selbst zu verstehen und für mein Problem zu nutzen.
Vielleicht könnt ihr mir ja helfen.
Gruß
Simon