Étape 3: Code
/ * Essayez 1 de monture de la caméra
utiliser 2 servos,
2 Butts disposant de 2 fonctions pour augmentation/réduction de temps
2 boutons avec des fonctions simples pour ajuster les angles verticaux
Écran LCD pour afficher et l’angle
*/
inclure le code de bibliothèque :
#include
#include
#include
#include « RTClib.h »
#include
Servo myservoV ; Créez l’objet servo pour contrôler un servo
Servo myservoH ; Créez l’objet servo pour contrôler un servo
initialiser la bibliothèque avec les numéros des broches interface
Innovente lcd (7, 2, 0, 4, 1, 6) ;
#define ledRed 3 / / entrée de broche pour le rétro-éclairage led
#define ledGreen 5 / / entrée de broche pour le rétro-éclairage led
Définir les broches de bouton
#define UpBtnbuttonPin A1 / / analogique pin d’entrée à utiliser comme une entrée numérique
#define DnBtnbuttonPin A2 / / analogique pin d’entrée à utiliser comme une entrée numérique
#define VerbuttonPin A3 / / analogique pin d’entrée à utiliser comme une entrée numérique
#define DnVerbuttonPin A4 / / analogique pin d’entrée à utiliser comme une entrée numérique
#define StartbuttonPin A4 / / analogique pin d’entrée à utiliser comme une entrée numérique
#define déclencheur 12 //trigger de caméra semble de mise au point automatique
#define focus 9 / / cammera mise au point, il empêche de dormir entre les images et met l’accent
Variables de compteur de temps
unsigned long buttonPushCounter = 0 ; compteur pour le nombre de touches
int buttonPushDisplayHr = 0 ;
int buttonPushDisplayMin = 0 ;
int buttonPushCounterMin = 0 ;
UpBtn varables
int UpBtnbuttonState = 0 ; état actuel de la touche
int UpBtnlastButtonState = 0 ; état antérieur du bouton
DnBtn varables
int DnBtnbuttonState = 0 ; état actuel de la touche
int DnBtnlastButtonState = 0 ; état antérieur du bouton
variables de bouton de démarrage
int StartbuttonPushCounter = 0 ; compteur pour le nombre de touches
int StartbuttonState = 0 ; état actuel de la touche
int StartlastButtonState = 0 ; état antérieur du bouton
unsigned long Starttime = 0 ;
int buttonPushCounterStop = 0 ;
int startVal = 0 ;
UpVer varables
int VerbuttonState = 0 ; état actuel de la touche
int VerlastButtonState = 0 ; état antérieur du bouton
int VerbuttonPushCounter = 0 ;
int DispAngV = 0 ;
float DispAngVa = 0 ;
float AngFloat = 0 ;
flotteur valV = 0 ;
variables de servo
valH int = 0 ; position du servo 1 à 180
flotteur valV = 0 ; position du servo 1 à 180
unsigned long del = 0 ; faire une pause entre les positions
angV int = 0 ; angle vertical servo
//========================================================
void setup() {}
mis en place nombre de l’écran LCD de colonnes et de lignes :
LCD.Begin(16,2) ;
Serial.Begin(9600) ;
lcd.setCursor (0, 0) ;
LCD.Print("Time") ; temp d’affichage sur l’écran lcd
lcd.setCursor (0, 1) ;
LCD.Print ("00:00 00") ;
Broche d’entrée bouton Set
pinMode (entrée, UpBtnbuttonPin) ;
pinMode (entrée, DnBtnbuttonPin) ;
pinMode (entrée, StartbuttonPin) ;
pinMode (ledRed, entrée) ;
pinMode (ledGreen, entrée) ;
digitalWrite (UpBtnbuttonPin, élevé) ;
digitalWrite (DnBtnbuttonPin, élevé) ;
digitalWrite (StartbuttonPin, élevé) ;
Début servos
myservoV.attach(11) ; attache le servo sur la broche 9 à l’objet de servo
myservoH.attach(10) ; attache le servo sur la broche 9 à l’objet de servo
zéro servos pour commencer
myservoV.write(95) ;
myservoH.write(90) ;
StartbuttonPushCounter = 0 ;
trucs de caméra attachée
pinMode (déclencheur, sortie) ; définir la broche trger pour commencer il a relais
digitalWrite (détente, faible) ; le relais de déclenchement pour de la valeur
pinMode (focus, sortie) ; définir la broche trger pour commencer il a relais
digitalWrite (focus, faible) ; le relais de déclenchement pour de la valeur
}
//========================================================================== LOOP
void loop() {}
digitalWrite (ledGreen, 255) ;
vérifier le bouton Démarrer---bouton Démarrer
pour la prochaine fois dans la boucle
StartlastButtonState = StartbuttonState ;
lire la broche d’entrée bouton poussoir :
StartbuttonState = digitalRead(StartbuttonPin) ;
comparer le buttonState à son état antérieur
Si (StartbuttonState! = StartlastButtonState) {}
Si l’État a changé, incrémenter le compteur
//
Si (StartbuttonState == HIGH) {}
Si l’état actuel est haut puis sur le bouton
Wend d’off à on :
Si (StartbuttonPushCounter < 2) {}
StartbuttonPushCounter ++ ;
StartTime = millis() ; compliqué mais fonctionne mieux
}
}
}
lire la broche d’entrée bouton poussoir :
UpBtnbuttonState = digitalRead(UpBtnbuttonPin) ;
comparer le buttonState à son état précédent---touche UP
Si (UpBtnbuttonState! = UpBtnlastButtonState) {}
Si l’État a changé, incrémenter le compteur
Si (UpBtnbuttonState == HIGH) {}
Si (buttonPushCounter < = 40)
Si (startVal > 2)
Si (StartbuttonPushCounter! = 2) {}
buttonPushCounter = buttonPushCounter + 2 ;
}
}
}
vérifier le bouton---bouton vers le bas
pour la prochaine fois dans la boucle
DnBtnlastButtonState = DnBtnbuttonState ;
lire la broche d’entrée bouton poussoir :
DnBtnbuttonState = digitalRead(DnBtnbuttonPin) ;
comparer le buttonState à son état antérieur
Si (DnBtnbuttonState! = DnBtnlastButtonState) {}
Si l’État a changé, incrémenter le compteur
Si (DnBtnbuttonState == HIGH) {}
Si l’état actuel est haut puis sur le bouton
Wend d’off à on :
Si (buttonPushCounter > = 1) {}
Si (startVal = 0)
Si (StartbuttonPushCounter! = 2) {}
buttonPushCounter = buttonPushCounter - 2 ;
}
}
}
}
BUTTS POUR ANGLE VERTICAL---VER ANG BOUTON
lire la broche d’entrée bouton poussoir :
VerbuttonState = digitalRead(VerbuttonPin) ;
comparer le buttonState à son état précédent---SERVO vers le haut
Si (VerbuttonState! = VerlastButtonState) {}
Si l’État a changé, incrémenter le compteur
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) ;
}
}
}
Difficulté à démarrer à partir de vlue de 1------début bnt actions
Si (StartbuttonPushCounter! = 2) {}
(StartbuttonPushCounter = StartbuttonPushCounter) ;
}
else {}
(StartbuttonPushCounter = 5)
calculer les délais pour boucle horzontal
del = 200 ;
del = buttonPushCounter * 1500 ;
calculer l’angle par pix pour servo vertical
angV = 1 ; départ à 60 degrés aller à 0
commencer à boucle
servo() ;
startVal ++ ;
StartbuttonPushCounter = 2 ;
}
//---------------------------------------------------------
enregistrer les États du bouton
UpBtnlastButtonState = UpBtnbuttonState ;
DnBtnlastButtonState = DnBtnbuttonState ;
StartlastButtonState = StartbuttonState ;
VerlastButtonState = VerbuttonState ;
afficher l’heure---affichage de l’heure
buttonPushDisplayHr = (buttonPushCounter) / 4 ;
buttonPushCounterMin = buttonPushCounter - (buttonPushDisplayHr * 4) ;
buttonPushDisplayMin = buttonPushCounterMin * 15 ;
calculer l’angle vertical---
DispAngVa = VerbuttonPushCounter -1 ;
AngFloat = DispAngVa / 2 ;
truble shoot === pousse mal
Serial.println(StartTime) ;
lcd.setCursor (13, 1) ;
LCD.Print (StartbuttonPushCounter) ;
lcd.setCursor (9, 1) ;
LCD.Print (Starttime) ;
--aller à servo après démarrage btn---aller à servo
Si (StartbuttonPushCounter! = 1) {}
lcd.setCursor (0, 0) ;
LCD.Print ("RUNNING") ;
servo() ;
}
else {}
Montrer combien de minutes
lcd.setCursor (3, 1) ;
LCD.Print (buttonPushDisplayMin) ;
Afficher le nombre d’heures
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) ;
}
Séparateur de spectacle
lcd.setCursor (2, 1) ;
LCD.Print (":") ;
montrer les chefs d’accusation
lcd.setCursor (11, 0) ;
LCD.Print (« ANGLE ») ;
}
}
fin de boucle === boucle se termine
BOUCLE boucle---
void servo() / / mouvements du servo
{
déplacer le servo à la position suivante
Si (valH > = 174) {}
lcd.setCursor (0, 1) ;
LCD.Print ("tout fait");}
else {}
Si {(valH < 3)
valV = 90 - DispAngV ;
}
valH = valH + 3 ;
valV = valV + AngFloat ;
Val = carte (val, 50, 300, 0, 179) ; redimensionnez-la pour l’utiliser avec le servo (valeur comprise entre 0 et 180)
myservoH.write(valH) ; définit la position du servo selon la valeur à l’échelle
myservoV.write(valV) ; définit la position du servo selon la valeur à l’échelle
déclencheur de l’appareil photo---CAMMERA STUFF
digitalWrite (focus, HIGH) ;
retarder (1000) ;
digitalWrite (focus, faible) ;
digitalWrite (détente, haute) ;
retarder (1000) ;
digitalWrite (détente, faible) ;
délai jusqu'à ce qu’il est temps pour la position suivante, en utilisant des temps de l’horloge serait mieux
besoin de 10 dels car arduino est gâcher le grand nombre même avec une variable long unsinged
Delay(del) ;
lcd.setCursor (6, 1) ;
LCD.Print (valV) ;
}
}