SDカードに保存されたデータに基づいてサーボモーターを制御する必要があるプロジェクトに取り組んでいます。これまでのところ順調に進んでいますが、サーボ モーターの動きのタイミングと速度の制御に問題があります。私が達成しようとしていることと、いくつかのサンプルコードについて説明します。
SDモジュールが接続されたArduino Megaを使用しています。SD カードには 4 つの異なる .txt ファイルがあります。各ファイルには 30 個の整数値が含まれ、各行には単一の整数が含まれ、(,) で終了します。これは単なるテスト データであるため、角度の範囲をスイープして、値を正しく読み取って変換していることを確認できます。しかし、タイマーや遅延などを使用してサーボの速度を落とそうとすると、あたかもそこにあるかのようにコードが高速化されます。私の場合、コードは次のようになります。
string dataRead =""; // String object to read bytes from
unsigned long int motorTime = 250; // Refresh time of the motor (250 ms)
unsigned long int lastMotor = (long) micros();
while (entry.available()) { // While there are bytes in the file to be read
dataRead = entry.readStringUntil(',');
while((long) micros() - lastMotor <= (motorTime * 1000)); // Do nothing until refresh time has elapsed
myServo.write(dataRead.toInt());
lastMotor = (long) micros();
}
データは正常に読み取られ、モーターはデータに従って動作しますが、何らかの理由でタイミング コードが無効になっているように見えます。これは、Arduino IDE のすべての抽象化レイヤーの下であらゆる種類のハードウェア機能が有効化および無効化されており、何らかの理由で遅延が無効になっているためだと思われます。
誰もこれを経験したことがありますか?設定した速度でサーボを駆動するためのヒントはありますか? 私の別の解決策は、データを配列にロードすることです。しかし、すべての RAM を焼き尽くして他の問題を引き起こす危険を冒したくありません。
前もって感謝します!