Hur man styr motorer med Arduino och RC mottagare i 10 minuter (3 / 4 steg)
Steg 3: kod
Här är koden behaga avseende den tid det tog för detta:
RC PulseIn följetong läsa av: Nick Poole
utökad av Jason Mclaughlin
2015
#include < Servo.h > / / för servo i exempel
Servo myservo; //servo enhet
int pos = 0; position för servo
int ch1; Här är där vi ska hålla vår kanal värden //servo 2
int ch2; motorer
int ch3; servo
CONST int channel_a_enable = 6;
CONST int channel_a_input_1 = 4;
CONST int channel_a_input_2 = 7.
CONST int channel_b_enable = 5;
CONST int channel_b_input_3 = 3;
CONST int channel_b_input_4 = 2;
void setup() {
pinMode (channel_a_enable, produktionen); Kanal A aktiverar
pinMode (channel_a_input_1, produktionen); Kanalisera en ingång 1
pinMode (channel_a_input_2, produktionen); Kanalisera en ingång 2
pinMode (channel_b_enable, produktionen); Kanal B aktiverar
pinMode (channel_b_input_3, produktionen); Kanal B ingång 3
pinMode (channel_b_input_4, produktionen); Kanal B ingång 4
myservo.attach(11);
pinMode (10, ingång); Ställa in vår ingång pins som sådan
pinMode (9, ingång);
pinMode (8, ingående);
Serial.BEGIN(9600); Häll en skål med följetong
}
void loop() {
CH1 = pulseIn (10, hög, 25000); Läs puls bredd
CH2 = pulseIn (9, hög, 25000); varje kanal
CH3 = pulseIn (8, hög, 25000);
Serial.Print ("kanal 1:"); Skriva ut värdet av
Serial.println(CH1); varje kanal
Serial.Print ("kanal 2:");
Serial.println(CH2);
Serial.Print ("kanal 3:");
Serial.println(CH3);
om ((ch3 > = 1500) & & (ch3 < = 1600)) {/ / den center position för controller
Serial.println("between");
POS = 90. //set servo till mitten
myservo.write(POS); inställd på pos som är 90
}
annars om ((ch3 > = 1100) & & (ch3 < = 1490)) {
Serial.println("Right");
POS = 180;
myservo.write(POS); går från 180 grader till 0 grader
Waits 15 MS för servo att nå ställning
}
annat {
Serial.println("left");
(pos = 0); går från 0 grader till 180 grader
i steg om 1 grad
myservo.write(POS);
berätta servo gå för att placera i variabel "pos"
}
motor
om ((ch1 > = 1000) & & (ch1 < = 1060)) {
Serial.println ("motorer off").
analogWrite (channel_a_enable, 125.5);
digitalWrite (channel_a_input_1, låg);
digitalWrite (channel_a_input_2, låg);
analogWrite (channel_b_enable, 125.5);
digitalWrite (channel_b_input_3, låg);
digitalWrite (channel_b_input_4, låg);
Delay(50);
}
annars om ((ch1 > = 1060) & & (ch1 < = 1500)) {
Serial.println ("Motors Medium");
analogWrite (channel_a_enable, 50);
digitalWrite (channel_a_input_1, hög);
digitalWrite (channel_a_input_2, låg);
analogWrite (channel_b_enable, 50);
digitalWrite (channel_b_input_3, hög);
digitalWrite (channel_b_input_4, låg);
Delay(50);
}
annat {
Serial.println ("motorer högt");
analogWrite (channel_a_enable, 255);
digitalWrite (channel_a_input_1, hög);
digitalWrite (channel_a_input_2, låg);
analogWrite (channel_b_enable, 255);
digitalWrite (channel_b_input_3, hög);
digitalWrite (channel_b_input_4, låg);
Delay(50);
}
Delay(100); Jag satte det här bara för att göra terminalen
fönstret lyckligare
}