【问题标题】:Controlling two DC motors with arduino uno用 arduino uno 控制两个直流电机
【发布时间】:2014-05-12 10:22:24
【问题描述】:

所以我使用此示例代码来运行我的两个电机...但该代码仅适用于一个电机...如何修改此代码以使另一个电机工作?我尝试用频道 b 替换频道 a,但由于某种原因不起作用?

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, OUTPUT );  // Channel A enable
  pinMode( channel_a_input_1, OUTPUT ); // Channel A input 1
  pinMode( channel_a_input_2, OUTPUT ); // Channel A input 2

  pinMode( channel_b_enable, OUTPUT );  // Channel B enable
  pinMode( channel_b_input_3, OUTPUT ); // Channel B input 3
  pinMode( channel_b_input_4, OUTPUT ); // Channel B input 4

  Serial.begin( 38400 );
  Serial.println("Starting up");
}

void loop()
{
      Serial.println("Channel A forward");
      analogWrite( channel_a_enable, 255);
      digitalWrite( channel_a_input_1, HIGH);
      digitalWrite( channel_a_input_2, LOW);
      delay(5000);
      allInputsOff();

      Serial.println("Channel A reverse");
      analogWrite( channel_a_enable, 255);
      digitalWrite( channel_a_input_1, LOW);
      digitalWrite( channel_a_input_2, HIGH);
      delay(5000);
      allInputsOff();

      Serial.println("Channel A forward half speed");
      analogWrite( channel_a_enable, 127);
      digitalWrite( channel_a_input_1, HIGH);
      digitalWrite( channel_a_input_2, LOW);
      delay(5000);
      allInputsOff();
}

void allInputsOff()
{
  digitalWrite( 4, LOW );
  digitalWrite( 7, LOW );
  digitalWrite( 6, LOW );
  digitalWrite( 3, LOW );
  digitalWrite( 2, LOW );
  digitalWrite( 5, LOW );
}

【问题讨论】:

    标签: arduino motordriver


    【解决方案1】:

    您的演示代码仅引用通道“a”,设置除外。

    这是一个 sn-p,展示了如何打开两个电机:

    Serial.println("Channels A and B forward");
    analogWrite( channel_a_enable, 255);
    digitalWrite( channel_a_input_1, HIGH);
    digitalWrite( channel_a_input_2, LOW);
    analogWrite( channel_b_enable, 255);
    digitalWrite( channel_b_input_3, HIGH);
    digitalWrite( channel_b_input_4, LOW);
    delay(5000);
    allInputsOff();
    

    当然,每个电机的代码几乎相同,因此您可以创建一个子程序:

    void runMotor(int enablePin, int input1, int input2) {
        analogWrite( enablePin, 255);
        digitalWrite( input1, HIGH);
        digitalWrite( input2, LOW);
    }
    

    然后像这样使用它:

    Serial.println("Channels A and B forward");
    runMotor(channel_a_enable, channel_a_input_1, channel_a_input_2);
    runMotor(channel_b_enable, channel_b_input_3, channel_b_input_4);
    delay(5000);
    allInputsOff();
    

    免责声明:我是在午休时间写这篇文章,而不是在 Arduino IDE 中,所以可能会有一些小错误。

    【讨论】:

    • 嗨,Phil,我确实这样做了,但这次只有连接到通道 B 的电机工作,我如何更改它以便它们都运行?再次感谢
    • 您使用的代码设计为只运行一个电机。要运行两个,您需要两组代码。一个用于“A”,一个用于“B”。我将编辑我的答案,向您展示一种可能的解决方案。
    • 嗨,Phil,我可能打错了代码...我不确定您所说的子程序是什么意思...:
    • 看起来您是编写软件的新手,在开始为嵌入式系统编写代码之前,您需要掌握基础知识 - 尽管 Arduino 很简单,但编程方法需要一定程度的先验知识的编写软件。我建议找一些关于C或C++的教程,Arduino编程语言似乎是C++的精简版,我不懂C++但我的C知识已经足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多