Schritt 6: Software
Also, beginnt wenn man den Schalter in eine Richtung auf der anderen drehen und wenn die Kamera nicht den entsprechenden ausgelöst hat Reed-Schalter der Kamera bewegen und fotografieren. Wenn Sie die Taste beim bewegen, beginnt die Kamera bewegt sich schnell, für debugging-Zwecke. Auch wenn Sie die Taste während der 3-State-Kippschalter in middle(-off) ist gibt es eine Panoramafunktion. Die Möglichkeiten der Bewegungen, die Kombination von Servo und dc Motor sind keine Grenzen gesetzt.
#include < AFMotor.h >
#include < Servo.h >
#include < SoftwareSerial.h >SoftwareSerial MySerial (A3, A2); RX, TX
AF_DCMotor motor(4); Motor #4, 64KHz Pwm zu erstellen
Servo Servo;Int SwDirFor = 2; Schaltfläche "vorwärts"
Int SwDirBack = 3; Schaltfläche "rückwärts"
Int SwStopBeg = 10; Stop1 Taste
Int SwStopEnd = A1; Schaltfläche "STOP2"
Int SwPhoto = 11; SW-Relais für Foto
Int ServoPin = 9; servopin
Int Schritte = 100; Schritt Dauer 1200 fotos
Int ServoPos = 96; Mittelstellung des servo
Int ServoStart = 20; Startposition des Servos
Int ServoStop = 155; Endposition der servo
Int ServoPot = A0; PIN des Servo-Topf
Int NoOfSteps = 0; Anzahl der Schritte
Int SwFast = A5; SW für schnelle Bewegungen
Int ich = 0; //for Schleifevoid setup() {}
mySerial.begin(9600);
Serial.Begin(9600); Serielle Bibliothek auf 9600 Bit/s einrichten
Servo.Attach(servoPin); servopin
motor.setSpeed(200); Stellen Sie die Geschwindigkeit auf 200/255
pinMode(swDirFor,INPUT);
pinMode(swDirBack,INPUT);
pinMode(swStopBeg,INPUT);
pinMode(swStopEnd,INPUT);
pinMode(servoPin,OUTPUT);
pinMode(swPhoto,OUTPUT);
pinMode(servoPot,INPUT);
pinMode(swFast,INPUT);
digitalWrite(swPhoto,LOW);
servoMove(servoPos);
}
///////////////////////////////////////////////////////////////
void loop() {}
Wenn (mySerial.available()) {}
mySerial.write('a');
mySerial.print ("Taste Stop Ende:");
mySerial.println(digitalRead(swStopEnd));
}
Serial.Print ("Schaltfläche Status für:");
Serial.println(digitalRead(swDirFor));
Serial.Print ("Schaltfläche" Zustand zurück: ");
Serial.println(digitalRead(swDirBack));
Serial.Print ("Taste Stopp Beg:");
Serial.println(digitalRead(swStopBeg));
Serial.Print ("Taste Stop Ende:");
Serial.println(digitalRead(swStopEnd));
Serial.Print ("Servo-Topf:");
Serial.println(analogRead(servoPot));
Serial.Print ("schneller Wechsel:");
Serial.println(digitalRead(swFast));
servoPos=map(analogRead(servoPot), 0,1024,1,180);
servoMove(servoPos);
Vorwärtsbewegung
während ((digitalRead(swDirFor)==1)) {}
Wenn (digitalRead(swStopEnd)==0) {}
Serial.println ("BREAK-StopEnd");
zu brechen;
} //if schließen
während (digitalRead(swFast)==1) {}
Serial.println("FF");
runMotor(0,1000);
} //while SwFast schließen
NoOfSteps ++;
runMotor(0,steps);
Verzögerung (750); //final delay(2k-1hour)
takeFoto();
} //while SwDirFor) == 1 schließen
Rückwärtsbewegung
während ((digitalRead(swDirBack)==1)) {}
Wenn (digitalRead(swStopBeg)==0) {}
Serial.println ("BREAK-StopBeg");
zu brechen;
} //if schließen
während (digitalRead(swFast)==1) {}
Serial.println("FB");
runMotor(1,1000);
} //while SwFast schließen
runMotor(1,steps);
NoOfSteps ++;
servoMove(160);
Verzögerung (1000); //final Verzögerung
takeFoto();
} //while SwDirBack) == 1 schließen
Servo-Bewegung
Wenn ((digitalRead(swFast)==1)) {}
Serial.println ("Mesa Sto wenn");
servoMove(20);
Verzögerung (2000), //time, Servo zu bewegen, zum Start pos
für (ich = 20; ich < = 155; (i = i + 27)) {
Serial.println ("Mesa Sto für");
servoMove(i);
Delay(2000);
takeFoto();
Delay(100);
NoOfSteps ++;
} //for schließen
} //if schließen
Delay(500);
Serial.Print ("Schritte:");
Serial.println(noOfSteps);
} //loop schließen
Routine für die Bewegung / / /
void RunMotor (Int Dir, Int Schritte) {}
Schalter (Dir) {}
Fall 0:
Serial.println ("vorwärts");
Motor.Run(Forward); Schalten Sie ihn in Zukunft
Delay(Steps);
Motor.Run(Release); gestoppt
Serial.println ("Stop nach vorn");
zu brechen;
Fall 1:
Serial.println("Backward");
Motor.Run(Backward);
Delay(Steps);
Motor.Run(Release);
Serial.println ("Stop rückwärts");
zu brechen;
} //switch schließen
Verzögerung (100);
} //runMotor schließen
//Routine foto//////////////////////////////////////////////////
void takeFoto() {}
Verzögerung (500);
Serial.Print ("CLICK!");
digitalWrite(swPhoto,HIGH);
Delay(1500);
digitalWrite(swPhoto,LOW);
} //takeFoto schließen
//Routine servo//////////////////////////////////////////////////
void ServoMove (Int pos) {}
Servo.Write(POS); Servo zu gehen, um die position in der Variable "pos" zu sagen
Serial.Print ("Servo-Umzug nach:");
Serial.println(POS);
Delay(150); wartet 15ms für das Servo in die Position zu erreichen
} //servo schließen