Paso 3: código
/ * Prueba 1 de montaje de cámara
utilizar 2 servos,
2 buttens que tienen 2 funciones para aumentar/disminuir el tiempo de
2 botones con funciones individuales para el ajuste de los ángulos verticales
LCD para la visualización de tiempo y ángulo
*/
incluir el código de biblioteca:
#include
#include
#include
#include "RTClib.h"
#include
Servo myservoV; crear objeto servo para controlar un servo
Servo myservoH; crear objeto servo para controlar un servo
inicializar la biblioteca con los números de los pines de interfaz
LiquidCrystal lcd (7, 2, 0, 4, 1, 6);
#define LEDPlataforma 3 / entrada de pin para retroiluminación led
#define LEDUFO 5 / entrada de pin para retroiluminación led
Definir los pines de botón
#define UpBtnbuttonPin A1 / / analógico entrada de pin como una entrada digital
#define DnBtnbuttonPin A2 / / analógico entrada de pin como una entrada digital
#define VerbuttonPin A3 / / analógico entrada de pin como una entrada digital
#define DnVerbuttonPin A4 / / analógico entrada de pin como una entrada digital
#define StartbuttonPin A4 / / analógico entrada de pin como una entrada digital
#define trigger 12 //trigger de cámara parece foco auto
#define foco 9 / enfoque de la camara, desvela entre imágenes y se centra
Variables del contador de tiempo
buttonPushCounter largo sin signo = 0; contador para el número de pulsar un botón
int buttonPushDisplayHr = 0;
int buttonPushDisplayMin = 0;
int buttonPushCounterMin = 0;
UpBtn varables
int UpBtnbuttonState = 0; estado actual del botón de
int UpBtnlastButtonState = 0; estado anterior del botón
DnBtn varables
int DnBtnbuttonState = 0; estado actual del botón de
int DnBtnlastButtonState = 0; estado anterior del botón
variables del botón de inicio
int StartbuttonPushCounter = 0; contador para el número de pulsar un botón
int StartbuttonState = 0; estado actual del botón de
int StartlastButtonState = 0; estado anterior del botón
sin firmar largo Starttime = 0;
int buttonPushCounterStop = 0;
startVal int = 0;
Varables UpVer
int VerbuttonState = 0; estado actual del botón de
int VerlastButtonState = 0; estado anterior del botón
int VerbuttonPushCounter = 0;
int DispAngV = 0;
Float DispAngVa = 0;
Float AngFloat = 0;
Válvula de flotador = 0;
variables de servo
valH int = 0; posición de servo 1 a 180
Válvula de flotador = 0; posición de servo 1 a 180
sin firmar del largo = 0; pausa entre las posiciones
angV int = 0; ángulo para servo vertical
//========================================================
void setup() {}
fijar número la pantalla del LCD de filas y columnas:
LCD.Begin(16,2);
Serial.Begin(9600);
lcd.setCursor (0, 0);
LCD.Print("Time"); Mostrar la temperatura en la pantalla lcd
lcd.setCursor (0, 1);
LCD.Print ("00:00 00");
Clavija de entrada de botón de ajuste
pinMode (UpBtnbuttonPin, entrada);
pinMode (DnBtnbuttonPin, entrada);
pinMode (StartbuttonPin, entrada);
pinMode (LEDPlataforma, entrada);
pinMode (LEDUFO, entrada);
digitalWrite (UpBtnbuttonPin, alto);
digitalWrite (DnBtnbuttonPin, alto);
digitalWrite (StartbuttonPin, alto);
Servos de inicio
myservoV.attach(11); se fija el servo en el pin 9 al objeto servo
myservoH.attach(10); se fija el servo en el pin 9 al objeto servo
cero servos para iniciar
myservoV.write(95);
myservoH.write(90);
StartbuttonPushCounter = 0;
cosas de la cámara
pinMode (trigger, salida); configurar el pin trger a relé de arranque
digitalWrite (gatillo, LOW); configurar el relé disparador de
pinMode (enfoque, salida); configurar el pin trger a relé de arranque
digitalWrite (focus, LOW); configurar el relé disparador de
}
//========================================================================== LOOP
void loop() {}
digitalWrite (LEDUFO, 255);
Compruebe el botón Inicio---botón Inicio
para la próxima vez a través del lazo
StartlastButtonState = StartbuttonState;
leer la entrada pulsador de pin:
StartbuttonState = digitalRead(StartbuttonPin);
Comparar la buttonState a su estado anterior
Si (StartbuttonState! = StartlastButtonState) {}
Si el estado ha cambiado, incrementar el contador
//
Si (StartbuttonState == HIGH) {}
Si el estado actual es alto y luego el botón
WEND de off a on:
Si (StartbuttonPushCounter < 2) {}
StartbuttonPushCounter ++;
StartTime = millis(); que complicado pero funciona mejor
}
}
}
leer la entrada pulsador de pin:
UpBtnbuttonState = digitalRead(UpBtnbuttonPin);
Comparar la buttonState a su estado anterior---botón
Si (UpBtnbuttonState! = UpBtnlastButtonState) {}
Si el estado ha cambiado, incrementar el contador
Si (UpBtnbuttonState == HIGH) {}
Si (buttonPushCounter < = 40)
Si (startVal > 2)
Si (StartbuttonPushCounter! = 2) {}
buttonPushCounter = buttonPushCounter + 2;
}
}
}
Compruebe abajo botón---botón de abajo
para la próxima vez a través del lazo
DnBtnlastButtonState = DnBtnbuttonState;
leer la entrada pulsador de pin:
DnBtnbuttonState = digitalRead(DnBtnbuttonPin);
Comparar la buttonState a su estado anterior
Si (DnBtnbuttonState! = DnBtnlastButtonState) {}
Si el estado ha cambiado, incrementar el contador
Si (DnBtnbuttonState == HIGH) {}
Si el estado actual es alto y luego el botón
WEND de off a on:
Si (buttonPushCounter > = 1) {}
Si (startVal = 0)
Si (StartbuttonPushCounter! = 2) {}
buttonPushCounter = buttonPushCounter - 2;
}
}
}
}
BUTTENS PARA EL ÁNGULO VERTICAL---VER ANG BOTÓN
leer la entrada pulsador de pin:
VerbuttonState = digitalRead(VerbuttonPin);
Comparar la buttonState a su estado anterior---SERVO hasta
Si (VerbuttonState! = VerlastButtonState) {}
Si el estado ha cambiado, incrementar el contador
Si (VerbuttonState == HIGH) {}
Si (buttonPushCounter < = 40)
Si (startVal > 2)
Si (VerbuttonPushCounter! = 4) {}
VerbuttonPushCounter = VerbuttonPushCounter + 1;
DispAngV = (VerbuttonPushCounter - 1) * 30;
lcd.setCursor (14, 1);
LCD.Print (DispAngV);
}
Else {}
VerbuttonPushCounter = 1;
DispAngV = (VerbuttonPushCounter - 1) * 30;
lcd.setCursor (14, 1);
LCD.Print (DispAngV);
}
}
}
Fije el botón de inicio a partir de valor de 1------Inicio acciones de bnt
Si (StartbuttonPushCounter! = 2) {}
(StartbuttonPushCounter = StartbuttonPushCounter);
}
Else {}
(StartbuttonPushCounter = 5)
calcular demoras para el lazo de servo horzontal
del = 200;
del = buttonPushCounter * 1500;
calcular ángulo por pix para servo vertical
angV = 1; comienzo a 60 grados ir a 0
iniciar bucle de servo
servo();
startVal ++;
StartbuttonPushCounter = 2;
}
//---------------------------------------------------------
guardar Estados de botón
UpBtnlastButtonState = UpBtnbuttonState;
DnBtnlastButtonState = DnBtnbuttonState;
StartlastButtonState = StartbuttonState;
VerlastButtonState = VerbuttonState;
Mostrar tiempo de visualización de la hora---
buttonPushDisplayHr = (buttonPushCounter) / 4;
buttonPushCounterMin = buttonPushCounter - (buttonPushDisplayHr * 4);
buttonPushDisplayMin = buttonPushCounterMin * 15;
calcular el ángulo vertical---
DispAngVa = VerbuttonPushCounter -1;
AngFloat = DispAngVa / 2;
sesión de truble === disparar problemas
Serial.println(startTime);
lcd.setCursor (13, 1);
LCD.Print (StartbuttonPushCounter);
lcd.setCursor (9, 1);
LCD.Print (Starttime);
--ir a servo después start btn---ir a servo
Si (StartbuttonPushCounter! = 1) {}
lcd.setCursor (0, 0);
LCD.Print ("corriendo");
servo();
}
Else {}
Mostrar cuántos minutos
lcd.setCursor (3, 1);
LCD.Print (buttonPushDisplayMin);
Mostrar cómo muchas horas
Si (buttonPushDisplayHr < 10) {}
lcd.setCursor (1, 1);
LCD.Print (buttonPushDisplayHr);
lcd.setCursor (0, 1);
LCD.Print ("0");
}
Else {}
lcd.setCursor (0, 1);
LCD.Print (buttonPushCounter);
}
Mostrar el separador
lcd.setCursor (2, 1);
LCD.Print (":");
Mostrar cuentas
lcd.setCursor (11, 0);
LCD.Print ("ángulo");
}
}
final del bucle === bucle termina
lazo de servo---lazo de SERVO
void servo() / / movimientos de servo
{
mover el servo a la posición siguiente
Si (valH > = 174) {}
lcd.setCursor (0, 1);
LCD.Print ("todo hecho");}
Else {}
Si (valH < 3) {}
valV = 90 - DispAngV;
}
valH valH = 3;
valV valV = AngFloat;
Val = mapa (val, 50, 300, 0, 179); la escala a utilizar con el servo (valor entre 0 y 180)
myservoH.write(valH); ajusta la posición del servo según el valor de escala
myservoV.write(valV); ajusta la posición del servo según el valor de escala
disparador de la cámara---cosas de la camara
digitalWrite (focus, HIGH);
retrasar (1000);
digitalWrite (focus, LOW);
digitalWrite (gatillo, HIGH);
retrasar (1000);
digitalWrite (gatillo, LOW);
demora hasta el momento para la siguiente posición, utilizando tiempos de reloj sería mejor
necesito 10 dels porque arduino es estropear los grandes números incluso con una variable larga unsinged
Delay(del);
lcd.setCursor (6, 1);
LCD.Print (válvula);
}
}