Я очень новичок в мире Arduino, но у меня есть некоторый опыт программирования на другом языке.
Я пытаюсь сделать свой первый автомобиль-робот, у меня есть 2 двигателя постоянного тока, подключенные к модулю L298N, все подключены к батарее 9 В и Arduino Uno.
Двигатели постоянного тока подключены к портам 5,6,7 для двигателя 1 и портам 8,9,10 для двигателя 2.
Код работает нормально, чтобы идти вперед и назад.
На этом этапе я хочу подключить сервопривод постоянного тока, который я подключил к порту 13, к 5 вольтам и к земле, и вот проблема:
Со следующим кодом движутся только один двигатель постоянного тока и сервопривод, но второй двигатель постоянного тока застрял!
Я заметил, что если я уберу из void setup()
команду servo_motor.attach(13);
, оба двигателя постоянного тока будут работать.
Он должен двигать сервопривод и оба двигателя постоянного тока...
Любая причина, почему?
Спасибо за помощь.
#include <Arduino.h>
#include <Servo.h>
const int mot2 = 10;
const int ava2 = 9;
const int ind2 = 8;
const int mot1 = 5;
const int ava1 = 6;
const int ind1 = 7;
Servo servo_motor; // create servo object to control a servo
int pos = 0;
void moveForward() {
Serial.print("Going Forward\n");
// turn on motor A
digitalWrite(ava1, HIGH);
digitalWrite(ind1, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(mot1, 100);
// turn on motor B
digitalWrite(ava2, LOW);
digitalWrite(ind2, HIGH);
// set speed to 200 out of possible range 0~255
analogWrite(mot2, 100);
delay(2000);
}
void moveBack() {
Serial.print("Going BACK\n");
// turn on motor A
digitalWrite(ava1, LOW);
digitalWrite(ind1, HIGH);
// set speed to 200 out of possible range 0~255
analogWrite(mot1, 250);
// turn on motor B
digitalWrite(ava2, HIGH);
digitalWrite(ind2, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(mot2, 250);
delay(2000);
}
void moveServo() {
for (pos = 0; pos <= 180; pos += 1) {
servo_motor.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) {
servo_motor.write(pos);
delay(15);
}
}
void setup() {
Serial.begin(9600);
servo_motor.attach(13); // why if i remove this both DC motor work and if i put only one DC motor work??
pinMode(mot2, OUTPUT);
pinMode(ava2, OUTPUT);
pinMode(ind2, OUTPUT);
pinMode(mot1, OUTPUT);
pinMode(ava1, OUTPUT);
pinMode(ind1, OUTPUT);
}
void loop() {
moveServo();
delay(2000);
moveForward();
delay(2000);
moveBack();
}
Вы пытались использовать другой контакт вместо контакта 13 для управления сервоприводом? Контакт 13 не рекомендуется для управления сервоприводом, потому что к контакту 13 подключен светодиод. Попробуйте контакт 3, потому что он имеет ШИМ и к нему не подключен подтягивающий резистор.
я обнаружил, что проблема связана с библиотекой servo.h, когда она используется на Arduino Uno, она деактивирует контакт 9/10 .. именно там, где у меня подключен двигатель.