Stap 3: Code
/ * Proberen 1 voor camera mount
gebruik 2 servo's,
2 buttens die 2 functies hebben voor vergroten/verkleinen van tijd
2 knoppen met enkele functies voor het aanpassen van de verticale hoeken
LCD tijd en hoek weergeven
*/
de code van de bibliotheek omvatten:
#include
#include
#include
#include "RTClib.h"
#include
Servo myservoV; maken van servo-object om te bepalen van een servo
Servo myservoH; maken van servo-object om te bepalen van een servo
initialiseren van de bibliotheek met de nummers van de pennen van de interface
LiquidCrystal lcd (7, 2, 0, 4, 1, 6);
#define ledRed 3 / / ingang pin voor led achtergrondverlichting
#define ledGreen 5 / / ingang pin voor led achtergrondverlichting
Definiëren van de knop pinnen
#define UpBtnbuttonPin A1 / / analog input pin te gebruiken als een digitale input
#define DnBtnbuttonPin A2 / / analog input pin te gebruiken als een digitale input
#define VerbuttonPin A3 / / analog input pin te gebruiken als een digitale input
#define DnVerbuttonPin A4 / / analog input pin te gebruiken als een digitale input
#define StartbuttonPin A4 / / analog input pin te gebruiken als een digitale input
#define trigger 12 //trigger van de camera lijkt autofocus
#define focus 9 / / cammera focus, houdt het wakker tussen afbeeldingen en richt zich
Teller tijdvariabelen
unsigned long buttonPushCounter = 0; teller voor het aantal knooppersen
int buttonPushDisplayHr = 0;
int buttonPushDisplayMin = 0;
int buttonPushCounterMin = 0;
UpBtn varables
int UpBtnbuttonState = 0; huidige toestand van de knop
int UpBtnlastButtonState = 0; vorige status van de knop
DnBtn varables
int DnBtnbuttonState = 0; huidige toestand van de knop
int DnBtnlastButtonState = 0; vorige status van de knop
Start knop variabelen
int StartbuttonPushCounter = 0; teller voor het aantal knooppersen
int StartbuttonState = 0; huidige toestand van de knop
int StartlastButtonState = 0; vorige status van de knop
unsigned long Starttime = 0;
int buttonPushCounterStop = 0;
int startVal = 0;
UpVer varables
int VerbuttonState = 0; huidige toestand van de knop
int VerlastButtonState = 0; vorige status van de knop
int VerbuttonPushCounter = 0;
int DispAngV = 0;
zweven DispAngVa = 0;
zweven AngFloat = 0;
zweven valV = 0;
Servo variabelen
int valH = 0; Servo positie 1 tot en met 180
zweven valV = 0; Servo positie 1 tot en met 180
lange del unsigned = 0; pauze tussen posities
int angV = 0; hoek voor verticale servo
//========================================================
VOID Setup {}
de LCD's aantal kolommen en rijen instellen:
LCD.begin(16,2);
Serial.begin(9600);
lcd.setCursor (0, 0);
LCD.Print("time"); weergave temperaturen op het LCD-scherm
lcd.setCursor (0, 1);
LCD.Print ("00:00 00");
Set-knop invoer pin
pinMode (UpBtnbuttonPin, INPUT);
pinMode (DnBtnbuttonPin, INPUT);
pinMode (StartbuttonPin, INPUT);
pinMode (ledRed, INPUT);
pinMode (ledGreen, INPUT);
digitalWrite (UpBtnbuttonPin, hoge);
digitalWrite (DnBtnbuttonPin, hoge);
digitalWrite (StartbuttonPin, hoge);
Start servo 's
myservoV.attach(11); de servo op pin 9 hecht aan de servo-object
myservoH.attach(10); de servo op pin 9 hecht aan de servo-object
nul servo's om te beginnen
myservoV.write(95);
myservoH.write(90);
StartbuttonPushCounter = 0;
spullen van de camera is gekoppeld
pinMode (trigger, uitvoer); de trger pincode instellen om te beginnen hij estafette
digitalWrite (trigger, laag); instellen van het doorsturen van de trigger aan van
pinMode (focus, uitvoer); de trger pincode instellen om te beginnen hij estafette
digitalWrite (focus, laag); instellen van het doorsturen van de trigger aan van
}
//========================================================================== LOOP
void loop {}
digitalWrite (ledGreen, 255);
controleren van de startknop---knop START
voor de volgende keer door de lus
StartlastButtonState = StartbuttonState;
Lees de drukknop invoer pin:
StartbuttonState = digitalRead(StartbuttonPin);
Vergelijk de buttonState om de vorige versie
Als (StartbuttonState! = StartlastButtonState) {}
Als de status is veranderd, de teller ophogen
//
Als (StartbuttonState == HIGH) {}
Als de huidige status hoog en de knop vervolgens is
wend van korting aan op:
Als (StartbuttonPushCounter < 2) {}
StartbuttonPushCounter ++;
StartTime = millis(); te ingewikkeld maar werkt beter
}
}
}
Lees de drukknop invoer pin:
UpBtnbuttonState = digitalRead(UpBtnbuttonPin);
Vergelijk de buttonState in de vorige staat---UP knop
Als (UpBtnbuttonState! = UpBtnlastButtonState) {}
Als de status is veranderd, de teller ophogen
Als (UpBtnbuttonState == HIGH) {}
Als (buttonPushCounter < = 40)
Als (startVal > 2)
Als (StartbuttonPushCounter! = 2) {}
buttonPushCounter = buttonPushCounter + 2;
}
}
}
Controleer knop---DOWN knop ingedrukt
voor de volgende keer door de lus
DnBtnlastButtonState = DnBtnbuttonState;
Lees de drukknop invoer pin:
DnBtnbuttonState = digitalRead(DnBtnbuttonPin);
Vergelijk de buttonState om de vorige versie
Als (DnBtnbuttonState! = DnBtnlastButtonState) {}
Als de status is veranderd, de teller ophogen
Als (DnBtnbuttonState == HIGH) {}
Als de huidige status hoog en de knop vervolgens is
wend van korting aan op:
Als (buttonPushCounter > = 1) {}
Als (startVal = 0)
Als (StartbuttonPushCounter! = 2) {}
buttonPushCounter = buttonPushCounter - 2;
}
}
}
}
BUTTENS VOOR VERTICALE HOEK---VER ANG KNOP
Lees de drukknop invoer pin:
VerbuttonState = digitalRead(VerbuttonPin);
Vergelijk de buttonState in de vorige staat---SERVO UP
Als (VerbuttonState! = VerlastButtonState) {}
Als de status is veranderd, de teller ophogen
Als (VerbuttonState == HIGH) {}
Als (buttonPushCounter < = 40)
Als (startVal > 2)
Als (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);
}
}
}
startknop beginnen bij vlue van 1------start bnt acties bevestigen
Als (StartbuttonPushCounter! = 2) {}
(StartbuttonPushCounter = StartbuttonPushCounter);
}
else {}
(StartbuttonPushCounter = 5)
berekenen van vertragingen voor horzontal servo lus
del = 200;
del = buttonPushCounter * 1500;
Bereken hoek per pix voor verticale servo
angV = 1; Start op 60 graden gaan op 0
Start servo lus
Servo();
startVal ++;
StartbuttonPushCounter = 2;
}
//---------------------------------------------------------
knopstatussen opslaan
UpBtnlastButtonState = UpBtnbuttonState;
DnBtnlastButtonState = DnBtnbuttonState;
StartlastButtonState = StartbuttonState;
VerlastButtonState = VerbuttonState;
weergeven van de tijd---TIJDWEERGAVE
buttonPushDisplayHr = (buttonPushCounter) / 4;
buttonPushCounterMin = buttonPushCounter - (buttonPushDisplayHr * 4);
buttonPushDisplayMin = buttonPushCounterMin * 15;
Bereken hoek voor verticale---
DispAngVa = VerbuttonPushCounter -1;
AngFloat = DispAngVa / 2;
truble schieten === problemen schieten
Serial.println(StartTime);
lcd.setCursor (13, 1);
LCD.Print (StartbuttonPushCounter);
lcd.setCursor (9, 1);
LCD.Print (Starttime);
--Ga naar servo na start btn---Ga naar servo
Als (StartbuttonPushCounter! = 1) {}
lcd.setCursor (0, 0);
LCD.Print ("uitgevoerd");
Servo();
}
else {}
Hoeveel minuten weergeven
lcd.setCursor (3, 1);
LCD.Print (buttonPushDisplayMin);
Hoeveel uren weergeven
Als (buttonPushDisplayHr < 10) {}
lcd.setCursor (1, 1);
LCD.Print (buttonPushDisplayHr);
lcd.setCursor (0, 1);
LCD.Print ("0");
}
else {}
lcd.setCursor (0, 1);
LCD.Print (buttonPushCounter);
}
Toon seperator
lcd.setCursor (2, 1);
LCD.Print (":");
Toon graven
lcd.setCursor (11, 0);
LCD.Print ("hoek");
}
}
einde van de lus === lus eindigt
Servo lus---SERVO lus
VOID servo() / / servo bewegingen
{
servo verplaatsen naar volgende positie
Als (valH > = 174) {}
lcd.setCursor (0, 1);
LCD.Print ("All DONE");}
else {}
Als (valH < 3) {}
valV = 90 - DispAngV;
}
valH = valH + 3;
valV = valV + AngFloat;
Val = kaart (val, 300, 0, 50, 179); schaal om het te gebruiken met de servo (waarde tussen 0 en 180)
myservoH.write(valH); stelt u de positie van de servo volgens de geschaalde waarde
myservoV.write(valV); stelt u de positie van de servo volgens de geschaalde waarde
camera trigger---CAMMERA STUFF
digitalWrite (focus, hoge);
vertraging (1000);
digitalWrite (focus, laag);
digitalWrite (trigger, hoge);
vertraging (1000);
digitalWrite (trigger, laag);
vertraging totdat het is tijd voor de volgende positie, met behulp van klok keer zou beter zijn
10 dels nodig omdat arduino is messing up van de grote aantallen zelfs met een unsinged long-variabele
delay(del);
lcd.setCursor (6, 1);
LCD.Print (valV);
}
}