Joystick styrda robotarm med en Arduino (4 / 6 steg)
Steg 4: Arduino kod
#include < Servo.h >
Skapa objekt som servo
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Skapa namn till analog ingång stift
int pin0 = A0;
int pin1 = A1;
int pin2 = A2;
int pin3 = A3;
Inställning av vinkel variabler vi måste använda längre ner i programmet
int angle1;
int angle2;
int angle3;
int angle4;
Inställning av värde variabler vi måste använda längre ner i programmet
int värde1;
int värde2;
int value3;
int value4;
Inställning av gränsvärden
långa int forservo1 = 20000;
långa int forservo2 = 20000;
långa int forservo3 = 20000;
långa int forservo4 = 20000;
void setup()
{
pinMode (3, ingång); / * Använda knappen på thumbstick ange pin 3 som indata * /
pinMode (4, OUTPUT); / * Ställ in pinkodsskydd 4 som utgång till magneten * /
Tillmäter objekt som servo servo på stift
servo1.attach(5);
servo2.attach(6);
servo3.attach(9);
servo4.attach(10);
}
void loop()
{
Läs analoga värden från joysticks
värde1 = analogRead(pin0);
value2 = analogRead(pin1);
value3 = analogRead(pin2);
value4 = analogRead(pin3);
10 bitars värde är för stor, så vi ändrar skalan från 0 - 1023 proportion till 1-29
värde1 = karta (värde1; 0, 1023, 1, 29);
value2 = karta (värde2; 0, 1023, 1, 29);
value3 = karta (value3, 0, 1023, 1, 29);
value4 = karta (value4, 0, 1023, 1, 29);
Det behöver korrigering av ståndpunkter, eftersom joysticks inte är mycket exakta bo exakt i mitten
om (värde1 < = 17 & & värde1 > = 13) / / om värde1 om mellan 13-17, då det är lika med 15 * /
värde1 = 15.
om (värde2 < = 17 & & värde2 > = 13)
value2 = 15.
om (value3 < = 17 & & value3 > = 13)
value3 = 15.
om (value4 < = 17 & & value4 > = 13)
value4 = 15.
Ändra första värdet "forservo" som används för att aktivera servo långsammare. Detta värde har fått mycket stor skala.
Vi lägga till eller dra ifrån (beror på att vrida riktning) skillnaden mellan analoga värde och center från "forservo"
forservo1 = forservo1 - (värde1 - 15);
forservo2 = forservo2 - (värde2 - 15);
forservo3 = forservo3 + (value3 - 15);
forservo4 = forservo4 + (value4 - 15);
denna del låt inte variabler "forservo" gå ur gränserna
IF(forservo1 < 1) / / om forservo1 är mindre än 1, är det lika med 1
forservo1 = 1;
IF(forservo1 > 20000) / / om forservo1 är större än 20000, är det lika med 20000
forservo1 = 20000;
IF(forservo2 < 1)
forservo2 = 1;
IF(forservo2 > 20000)
forservo2 = 20000;
IF(forservo3 < 1)
forservo3 = 1;
IF(forservo3 > 20000)
forservo3 = 20000;
IF(forservo4 < 1)
forservo4 = 1;
IF(forservo4 > 20000)
forservo4 = 20000;
ändra värdet till vinkel på servo. Vinklar justeras under provningen
angle1 = karta (forservo1, 1, 10, 20000 180);
angle2 = karta (forservo2, 1, 10, 20000 180);
angle3 = karta (forservo3, 1, 10, 20000 180);
angle4 = karta (forservo4, 1, 10, 20000 180);
Skicka vinklar till servon
servo1.write(angle1);
servo2.write(angle2);
servo3.write(angle3);
servo4.write(angle4);
aktiveras magneten
medan (digitalRead(3) == hög) {/ * Läs pin 3 från med styrspak * /
digitalWrite (4, hög). / * Skriva till stift 4 (magnet) * /
}
}