Функция задержки не работает с ESP32

По какой-то причине функция задержки не работает (она вообще не задерживается) с моим советом по развитию ESP32. Кто-нибудь сталкивался с подобной проблемой раньше? Он не работает ни с другими скетчами, ни с циклом, ни с настроенными функциями. Образец скетча:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
#include <BleMouse.h>

// mouse object
BleMouse ble("test", "me");

/** I2C pins **/
#define I2C_SDA 33
#define I2C_SCL 32

// I2C object
TwoWire wire_custom = TwoWire(0);

// Sensor object
Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x28, &wire_custom);

/**************************************************************************/
function definitions
...

/**************************************************************************/
void setup(void)
{
  wire_custom.begin(I2C_SDA, I2C_SCL, 400000);

  Serial.begin(115200);

  ble.begin();

  if (!bno.begin())
  {
    Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
    while (1);
  }
  delay(1000);
  bno.setExtCrystalUse(true);

  // updating range
  bno.setMode(Adafruit_BNO055::OPERATION_MODE_CONFIG);
  delay(1000);
  write_register (0x28, 0x0A, 0b00111010);
  bno.setMode(Adafruit_BNO055::OPERATION_MODE_NDOF);
  delay(10000);
  byte result = read_register (0x28, 0x0A, 1);
  Serial.print(result);
  Serial.print("\n");
  Serial.print("\n");
}

/**************************************************************************/
void loop(void)
{
  sensor_calibration ();

  sensor_data (x_placeholder, y_placeholder);

  transform_sensor_data (x_placeholder, y_placeholder, x, y);

  if (ble.isConnected()) {
    ble.move(x, y);
  }
}

, 👍1

Обсуждение

Что значит "не работает"? Совсем не откладывая? Откладывать навсегда? Слишком короткая задержка? Слишком долгая задержка? И что заставляет вас думать, что delay() виновата?, @Majenko

откуда вы знаете, что функция задержки не работает? ... у вас нет никакого кода отладки, который бы проверял, что, @jsotola

Извините, что я не уточнил, что он вообще не откладывается, независимо от того, на какую сумму я его установил., @Zhelyazko Grudov

Откуда тебе знать? `Цикл () " в приведенном выше коде не использует задержку и также не имеет вывода., @PMF

Вывод-это последняя функция, которая перемещает мышь и которая начинается сразу после загрузки кода. Таким образом, нет никакой задержки между загрузкой кода и запуском функции цикла., @Zhelyazko Grudov

Должно быть, это как-то связано с тем регистром, который вы установили, или с setcrystal, или с одной из этих библиотек. Чтобы доказать это, просто загрузите простой скетч задержки и посмотрите, сработает ли он тогда., @tavis

Да, придется это сделать, мне на самом деле жаль, что я опубликовал этот вопрос, не рассмотрев его полностью вчера. Это был довольно напряженный день, с этой вишенкой на макушке., @Zhelyazko Grudov


1 ответ


1

Размещение задержки в любой встроенной функции, относящейся к беспроводной радиосвязи, остановит только операции на Wi-Fi core или core0. Ваш основной код цикла не будет затронут задержкой, размещенной в core0. Она остановит только беспроводные операции.

Я столкнулся с похожей проблемой, и мне потребовалось некоторое время, чтобы собрать ее воедино. Я использую глобальные переменные при передаче информации между core0 и core1.

  • Беспроводная связь работает на core0 и
  • Ваш основной код выполняется на core1 (если иное не указано в настройках).
,

Какое отношение это имеет к вопросу?, @StarCat