Paso 6: Software
Así, cuando le da la vuelta el interruptor en una dirección en el otro y si la cámara no ha desencadenado el correspondiente interruptor de láminas la cámara comienza moverse y tomar fotos. Si usted presiona el botón mientras se mueve, la cámara comienza rápido, para propósitos de depuración. También si usted presiona el botón mientras el interruptor de palanca 3-Estado está en middle(-off) es una función de panorama. Las posibilidades de movimientos combinando el servo y dc motor son infinitas.
#include < AFMotor.h >
#include < Servo.h >
#include < SoftwareSerial.h >MySerial SoftwareSerial (A3, A2); RX, TX
Motor(4) de AF_DCMotor; crear motor #4, pwm de 64KHz
Servo servo;int swDirFor = 2; botón de avance
int swDirBack = 3; Botón atrás
int swStopBeg = 10; stop1 botón
int swStopEnd = A1; stop2 botón
int swPhoto = 11; relé de SW para la foto
int servoPin = 9; servopin
pasos de int = 100; paso duración 1200 fotos
int servoPos = 96; posición media de servo
int servoStart = 20; posición del servo de arranque
servoStop int = 155; posición final del servo
int servoPot = A0; PIN de pote de servo
int noOfSteps = 0; número de cuenta de los pasos
int swFast = A5; SW para movimiento rápido
int i = 0; //for lazovoid setup() {}
mySerial.begin(9600);
Serial.Begin(9600); Biblioteca Serial a 9600 bps
servo.Attach(servoPin); servopin
motor.setSpeed(200); ajustar la velocidad a 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() {}
Si (mySerial.available()) {}
mySerial.write('a');
mySerial.print ("tope de tecla:");
mySerial.println(digitalRead(swStopEnd));
}
Serial.Print ("estado para el botón:");
Serial.println(digitalRead(swDirFor));
Serial.Print ("espalda de estado botón:");
Serial.println(digitalRead(swDirBack));
Serial.Print ("botón stop Beg:");
Serial.println(digitalRead(swStopBeg));
Serial.Print ("tope de tecla:");
Serial.println(digitalRead(swStopEnd));
Serial.Print ("pote del servo:");
Serial.println(analogRead(servoPot));
Serial.Print ("Fast switch:");
Serial.println(digitalRead(swFast));
servoPos=map(analogRead(servoPot), 0,1024,1,180);
servoMove(servoPos);
movimiento hacia adelante
mientras que ((digitalRead(swDirFor)==1)) {}
Si (digitalRead(swStopEnd)==0) {}
Serial.println ("rotura de sistema de tabicas");
rotura;
} //if cerrar
mientras (digitalRead(swFast)==1) {}
Serial.println("FF");
runMotor(0,1000);
} swFast //while cierre
noOfSteps ++;
runMotor(0,steps);
retardo (750); //final delay(2k-1hour)
takeFoto();
} swDirFor //while) == 1 cierre
movimiento hacia atrás
mientras que ((digitalRead(swDirBack)==1)) {}
Si (digitalRead(swStopBeg)==0) {}
Serial.println ("vacaciones stopBeg");
rotura;
} //if cerrar
mientras (digitalRead(swFast)==1) {}
Serial.println("FB");
runMotor(1,1000);
} swFast //while cierre
runMotor(1,steps);
noOfSteps ++;
servoMove(160);
Delay (1000); retraso //final
takeFoto();
} swDirBack //while) == 1 cierre
movimiento de servo
Si ((digitalRead(swFast)==1)) {}
Serial.println ("mesa sto si");
servoMove(20);
retardo (2000); //time para mover el servo a partir pos
para (i = 20; i < = 155; (i = i + 27)) {
Serial.println ("sto mesa para");
servoMove(i);
Delay(2000);
takeFoto();
Delay(100);
noOfSteps ++;
} //for cerrar
} //if cerrar
Delay(500);
Serial.Print ("pasos:");
Serial.println(noOfSteps);
} //loop cerrar
Rutina de movimiento / / /
{} void runMotor (int dir, int pasos)
interruptor (dir) {}
caso 0:
Serial.println ("hacia delante");
motor.Run(Forward); convertirlo en el futuro
Delay(STEPS);
motor.Run(release); dejó de
Serial.println ("parada adelante");
rotura;
caso 1:
Serial.println("Backward");
motor.Run(backward);
Delay(STEPS);
motor.Run(release);
Serial.println ("parada hacia atrás");
rotura;
} //switch cerrar
Delay (100);
} //runMotor cerrar
//Routine foto//////////////////////////////////////////////////
void takeFoto() {}
Delay (500);
Serial.Print ("CLICK!!!");
digitalWrite(swPhoto,HIGH);
Delay(1500);
digitalWrite(swPhoto,LOW);
} //takeFoto cerrar
//Routine servo//////////////////////////////////////////////////
void servoMove (int pos) {}
servo.Write(POS); Dile el servo a la posición en la variable 'pos'
Serial.Print ("movimiento de servo:");
Serial.println(POS);
Delay(150); espera 15ms para el servo a la posición
} //servo cerrar