Управление двумя двигателями постоянного тока с помощью Arduino Uno

Поэтому я использую этот пример кода для запуска моих двух двигателей... но код работает только для одного двигателя... как мне изменить этот код для работы другого двигателя? Я попытался заменить канал a на канал b, но это не сработало по какой-то причине?

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 );
}

1 ответ

Ваш демо-код ссылается только на канал "а", за исключением настройки.

Вот фрагмент, показывающий, как вы можете включить оба мотора:

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();

Отказ от ответственности: я пишу это во время обеденного перерыва, а не в IDE Arduino, поэтому могут быть незначительные ошибки.

Другие вопросы по тегам