Arduino Nano 33 BLE Sense:当我使用 IMU 时,delayMicroseconds() 停止工作

问题描述 投票:0回答:1
我在使用 Nano Sense33 BLE Rev2 时遇到了一个疯狂的问题。我尝试将 IMU 与使用delayMicroseconds()的函数一起使用,但看起来 IMU 正在覆盖对硬件计时器或其他东西的访问。

基本上我正在尝试将频率发送到扬声器,并且我想根据加速度计的输入来调制频率。 此代码有效:

#include "Arduino_BMI270_BMM150.h" void setup() { pinMode(outpin, OUTPUT); } void loop() { freqout(1000, 100); } void freqout(int freq, int t) // freq in hz, t in ms { int hperiod; long cycles, i; hperiod = (500000 / freq) - 7; cycles = ((long)freq * (long)t) / 1000; for (i=0; i<= cycles; i++){ digitalWrite(outpin, HIGH); delayMicroseconds(hperiod); digitalWrite(outpin, LOW); delayMicroseconds(hperiod - 1); } }
但是一旦包含 IMU 设置代码,扬声器就不再有声音输出:

#include "Arduino_BMI270_BMM150.h" void setup() { Serial.begin(9600); while (!Serial); Serial.println("Started"); if (!IMU.begin()) { Serial.println("Failed to initialize IMU!"); while (1); } Serial.print("Accelerometer sample rate = "); Serial.print(IMU.accelerationSampleRate()); Serial.println(" Hz"); pinMode(outpin, OUTPUT); } void loop() { freqout(1000, 100); } void freqout(int freq, int t) // freq in hz, t in ms { int hperiod; long cycles, i; hperiod = (500000 / freq) - 7; cycles = ((long)freq * (long)t) / 1000; for (i=0; i<= cycles; i++){ digitalWrite(outpin, HIGH); delayMicroseconds(hperiod); digitalWrite(outpin, LOW); delayMicroseconds(hperiod - 1); } }
我对 mbed 操作系统或 nano 的总体架构并不是非常了解,所以如果有更多经验的人有任何见解,那就太棒了!

更新:这似乎与arduino获得的功率有关。我一直在尝试通过 vin 使用 9v 电池为其供电,但在通过 USB 插入时尝试似乎可行。

audio arduino frequency accelerometer imu
1个回答
0
投票
尽管我想删除这个问题,因为这个错误是多么愚蠢,但我还是要后悔。

我在设置代码中有

while (!Serial);

,所以它只是挂在无限循环中等待串行连接。

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