Как я могу добавить две разные программы bldc motor и servo motor в одну, чтобы они работали параллельно?

Это для серводвигателя:

#include <Servo.h> //Библиотека сервоприводов

Servo servo_test;
//инициализировать объект сервопривода для подключенного сервопривода
int angle = 0;

void setup() {
  servo_test.attach(9);
}

void loop() {
  for(angle = 0; angle < 180; angle += 1) {
    servo_test.write(angle);
    delay(15);
  }
  delay(1000);
  for(angle = 180; angle>=1; angle-=5) {
    servo_test.write(angle);
    delay(5);
  }
  delay(1000);
}

Это для двигателя bldc с esc:

#include <Servo.h>

Servo esc_signal;

void setup() {
  esc_signal.attach(12);
  esc_signal.write(30);
  delay(3000);
}

void loop() {
  esc_signal.write(55);
  delay(15);
}

, 👍1

Обсуждение

Первым делом прочтите [Мигание без промедления]. (https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay) Учебник по Arduino, а затем удалите все вызовы функции delay () из ваших программ., @Edgar Bonet

На самом деле, такая задача не является несовместимой с использованием задержек блокировки, но они должны использоваться с большей координацией и осторожностью., @Chris Stratton


2 ответа


-1

В зависимости от того, как управляется код. Самым простым было бы просто запустить loop1 и loop2 в новом цикле.

,

Но это заставило бы код выполняться последовательно, а не параллельно, как просил ОП. Вы не можете выполнять параллель на Arduino., @Code Gorilla


-1

Попробуйте этот код. Это может быть полезно.

#include <Servo.h> //Библиотека сервоприводов

Servo servo_test;  //Инициализировать объект сервопривода для подключенного сервопривода
int angle = 0;

Servo esc_signal;

void setup()
{
  servo_test.attach(9);

  esc_signal.attach(12);
  esc_signal.write(30);
  delay(3000);
}

void loop()
{
  servoFun();
  bldcFun();
}

void servoFun()
{
  for(angle = 0; angle < 180; angle += 1)
  {
      servo_test.write(angle);
      delay(15);
  }
  delay(1000);

  for(angle = 180; angle>=1; angle-=5)
  {
      servo_test.write(angle);
      delay(5);
  }
  delay(1000);
}

void bldcFun()
{
  esc_signal.write(55);
  delay(15); 
}
,

Нет. Это совсем не будет делать то, что требуется*., @Chris Stratton