用arduino uno控制两台直流电机

用arduino uno控制两台直流电机,arduino,motordriver,Arduino,Motordriver,所以我用这个示例代码来运行我的两个电机…但是这个代码只对一个电机起作用…我如何修改这个代码使另一个电机起作用?我试着用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; con

所以我用这个示例代码来运行我的两个电机…但是这个代码只对一个电机起作用…我如何修改这个代码使另一个电机起作用?我试着用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 );
}

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

下面是一个片段,展示了如何打开两个电机:

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”。我将编辑我的答案,向您展示一种可能的解决方案。嗨,菲尔,我可能键入的代码错误了…我不确定您所说的子程序是什么意思…:看起来您对编写软件还不熟悉,在开始为嵌入式系统编写代码之前,您需要掌握一些基础知识-尽管Arduino很简单,编程方法需要一定程度的软件编写知识。我建议在C或C++上找到一些教程,ARDUNO编程语言看起来是C++的精简版本,我不知道C++,但是我的C知识已经足够了。