Stap 7: programmeren
Alle bestanden staan in de sketchbook.zip.
Hier is eerst de code om uw servo's gecentreerd. Het probleem dat u geconfronteerd wordt steeds de positie van de servo juiste. Houd in gedachten die deze servo's gaan van 0 tot 180 graden.
Dus kortom we willen de servo's ingesteld op 90 en 90 dus zijn in het midden van de servo's "range of motion". Dan kunnen we het instellen van de horizontale (x-as) en verticaal (y-as) beperkt. Daarvoor kunt u de eyes_servo_single_test wijzigen van horServo.write(); en vertServo.write();
[CODE eyes_servo_single_test]
#include < Servo.h >Servo horServo;
Servo vertServo;
VOID Setup {}
horServo.attach(8);
vertServo.attach(9);
}
void loop {}
horServo.write(80);
vertServo.write(40);
}
[EINDE CODE]
Vervolgens zou ik eyes_full_servo_test opnieuw inpluggen in uw hoge en lage waarden voor de servo's op die manier kunt u zien als u bindende gebruiken. Ik gebouwd in een knipperende sleutel, zodat u wat stap visualiseren kunt uw op. U kunt altijd langskomen het midway trekken van de USB-kabel.
[CODE eyes_full_servo_test]
//==================Dit is een snelle servo positie test die ik deed voor mijn oog-Project
De servo's verplaatsen uit de set banen voor de X- en Y-as
Test sets die de LED hoge 20 seconden lang knipperen.
Test twee stelt de servo's op positie 40,0 voor 6,5 seconden, twee knippert.
Test drie stelt de servo's op positie 80,0 7,5 seconden, drie knippert.
Test vier stelt de servo's op positie 0,70 voor 8,5 seconden, vier knippert.
Test vijf sets de servo's op positie 0,110 9,5 seconden, vijf knippert.
NOODZAAK OM DRUK OP RESET NADAT DE TEST IS VOLTOOID
#include < Servo.h > //servo bibliotheek
Servo horServo; x-as servo
Servo vertServo; y-asxis servo
int geleid = 13;
VOID Setup {}
horServo.attach(8); x-as servo pin 8
vertServo.attach(9); y-as servo pin 9
pinMode led (, uitvoer);
}
void loop {}
//==================TEST ONE=============//
Servo's in rust of center positie.
horServo.write(80);
vertServo.write(40);
Eenmaal knipperen
digitalWrite (led, hoog);
delay(20000);
digitalWrite (led, laag);
//============Test Two=================//
testen van de twee knippert twee keer
horServo.write(20); x links limiet
vertServo.write(40);
twee keer knipperen
digitalWrite (led, hoog);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(5000);
//=================Test Three==================//
test drie knippert driemaal
horServo.write(80); x rechts grenswaarde
vertServo.write(40);
drie keer knipperen
digitalWrite (led, hoog);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(5000);
//==================Test four==================//
Testen van vier knippert viermaal
horServo.write(80);
vertServo.write(0); y bovengrens
vier keer knipperen
digitalWrite (led, hoog);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(5000);
//=================Test Five===================//
Test vijf knippert vijfmaal
horServo.write(80);
vertServo.write(110); y ondergrens
vijf keer knippert
digitalWrite (led, hoog);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(500);
digitalWrite(led,HIGH);
delay(500);
digitalWrite (led, laag);
delay(5000);
//=====================END======================//
Servo's terug naar rust of centrum. Testen eindigde hit RESET of wait FOREVER
horServo.write(80);
vertServo.write(40);
digitalWrite (led, hoog);
while(1) {}
}
[EINDE CODE]
De code maakt gebruik van PI te bewegen de ogen in een straal. U moet ervoor zorgen u uw servo's op pin 8 en 9 hebben of wijzigingen in de code. Zodra u zeker weet dat u alles goed ingesteld hebt, kunt u de EZ-connectors instellen in plaats.
[CODE eyes_sketch]
#include < math.h >
#define pi 3.14159265358979323846
#define twopi (2 * pi)
zweven circleradius = 50; 50 elk zijde - maakt geen meer niet van uw max grenswaarden
zweven stepnumber = 360;
float stepangle;
#include < Servo.h > //include servo bibliotheek voor servo control
Servo horServo; Servo voor links/rechts beweging
Servo vertServo; Servo voor op/neer beweging
byte randomhor; willekeurige horizontale positie variabele definiëren
byte randomvert; willekeurige verticale positie variabele definiëren
int randomdelay; willekeurige vertraging variabele definiëren
#define HLEFTLIMIT 40 //define linker grens op de horizontale (links/rechts) servo
#define HRIGHTLIMIT 80 //define juiste limiet op de horizontale (links/rechts) servo
#define VTOPLIMIT 70 / / top limiet op verticaal (omhoog/omlaag) servo definiëren
#define VBOTLIMIT 110 //define ondergrens op horizontale (omhoog/omlaag) servo
VOID Setup
{
horServo.attach(8); horizontale servo op pin 8
vertServo.attach(9); verticale servo op pin 9
randomSeed(analogRead(0)); Enkele willekeurige waarden met behulp van een onsamenhangende analoge pin maken
stepangle = twopi/stepnumber;
for (int i = 0; ik < stepnumber; i ++) {}
float hoek = i * stepangle;
float x = zonde (hoek) * circleradius;
float y = cos (hoek) * circleradius;
x = kaart (x, 1-circleradius, circleradius, 0, 2 * circleradius);
y = kaart (y, 1-circleradius, circleradius, 0, 2 * circleradius);
horServo.write(x); schrijven naar de horizontale servo
vertServo.write(y); schrijven naar de horizontale servo
delay(10);
}
}
void loop
{
randomhor = willekeurige (HLEFTLIMIT, HRIGHTLIMIT); limieten instellen
randomvert = willekeurige (VTOPLIMIT, VBOTLIMIT); limieten instellen
randomdelay = random(1000, 4000); beweegt elke 1 tot en met 4 seconden
horServo.write(randomhor); schrijven naar de horizontale servo
vertServo.write(randomvert); schrijven naar de verticale servo
delay(randomdelay); vertraging van een willekeurige hoeveelheid tijd (binnen de waarden zoals hierboven)
}
[Einde CODE]