首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino伺服和直流电机不能正常工作

Arduino伺服和直流电机不能正常工作
EN

Stack Overflow用户
提问于 2020-12-14 23:01:50
回答 1查看 174关注 0票数 0

我是Arduino世界的新手,但我有一些用其他语言编程的经验。

我正在尝试制造我的第一辆机器人汽车,我有两个直流马达连接到一个L298N模块,都连接到一个9V电池和一个Arduino Uno。

直流电机连接到电机1的端口5、6、7和电机2的端口8、9、10。

代码可以很好地向前和向后移动。

在这个阶段,我想要连接一个直流伺服,我连接到端口13,到5伏和接地,这是问题:

使用下面的代码,只有一个直流电机和伺服在移动,但是第二个直流电机卡住了!

我注意到,如果我从void setup()中删除命令servo_motor.attach(13);,两个直流电机都在运行。

它应该移动伺服和两个直流马达。

有什么原因吗?

谢谢你的帮助。

代码语言:javascript
复制
#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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-14 23:36:44

你有没有试过用另一个引脚代替13号引脚来控制伺服?不建议使用13号针脚来控制伺服,因为13号针脚上连接了LED。请尝试3号针脚,因为它有PWM,并且没有连接上拉电阻。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65291278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档