ESP32 (C++) 同时使用 AccelStepper.runSpeed() 和 Audio.loop() (阻塞)

问题描述 投票:0回答:1

在我的 ESP32 C++ 项目中,我使用

Audio.h
AccelStepper.h
。 不幸的是,只要音频处于活动状态,步进器就无法工作。看起来
Audio.loop()
块太长了。

示例代码:

#include <AccelStepper.h>
#include <Audio.h>

#define IN1 25
#define IN2 26
#define IN3 27
#define IN4 14

#define stepsPerRevolution  2048/60

AccelStepper motors[1] = {AccelStepper(AccelStepper::FULL4WIRE, IN1, IN3, IN2, IN4)};
Audio audio;

void setup()
{

  // Some stuff to build up Wifi connection was removed here. Wifi is working.

  motors[0].setMaxSpeed(stepsPerRevolution * 10); // 10 rpm
  motors[0].setSpeed(stepsPerRevolution * 10);

  audioController.connecttohost("https://stream.antenne.de/antenne/stream/mp3");

  Serial.begin(115200);
}

void loop() {
  motors[0].runSpeed();
  audio.loop();
}

每当我注释掉

audio.loop()
时,步进器就会正确移动。每当我使用
audio.loop()
时,步进器移动得非常慢并且变热。

希望得到帮助。谢谢

c++ embedded esp32
1个回答
0
投票

那是因为 audio.loop() 每当调用时都会播放加载的文件,然后继续。

您可能需要创建单独的任务并在单独的任务中添加audio.loop()和步进器代码。

© www.soinside.com 2019 - 2024. All rights reserved.