現在、ATOMS3を使ったデバイスを開発しているのだが、PlatformIOを用いて、プログラムをアップロードした直後に、5回に1回程度の確率で、ATOMS3がフリーズしてうんともすんとも言わなくなってしまうという問題が起きた。
初めはハードウェア側を疑い、供給電圧を5Vに昇圧してみたりしたのだが(元々LipoバッテリーからDCDCコンバーターを使わずに直で供給していた)、治らず・・・
micros()がだめっぽい??
問題はソフト側で、加速度センサーの値からPitch角度を算出する部分だった。
void calculatePitch(){
readGyro();
unsigned long currentMicros = micros();
float dt = (currentMicros - lastMs) / 1000000.0f;
lastMs = currentMicros;
float pitch = getPitch();
kalAnglePitch = kalmanPitch.getAngle(pitch, gyro[2], dt);
}
どうもmicros()を使うとフリーズが発生するっぽい.
似たようなことで悩んでいるひとがいて、どうやらESP.getCycleCount()を代わりに使えとのこと。 そこで以下のようにmicros()をESP.getCycleCount()に書き換えると、フリーズは発生しなくなった。
void calculatePitch(){
readGyro();
unsigned long currentMicros = ESP.getCycleCount();
float dt = (currentMicros - lastMs) / 1000000.0f;
lastMs = currentMicros;
float pitch = getPitch();
kalAnglePitch = kalmanPitch.getAngle(pitch, gyro[2], dt);
}
原因はよくわからんが、まぁうまくいったのでヨシ!(๑•̀ㅂ•́)و✧