私はSDカードに保存されたデータに基づいてサーボモータを制御する必要があるプロジェクトに取り組んできました。これまでのところうまくいきますが、サーボモータの動きのタイミングと速度を制御することに問題があります。私が達成しようとしていることといくつかのサンプルコードについて説明します。SDカードデータ付きArduinoサーボモータ制御
私はSDモジュールを取り付けたArduino Megaを使用しています。 SDカードには4種類の.txtファイルがあります。各ファイルには30個の整数値が含まれ、各行には1つの整数が含まれ、(、)で終わります。これは単なるテストデータなので、角度の範囲を掃引して、私が読んでいることを確認し、値をうまく変換することができます。しかし、タイマーを使ってサーボを減速させようとすると、コードが遅れてスピードが速くなります。私の場合、コードは次のようになります。
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を焼き切る危険性を抱えて、他の問題を引き起こしたくはありません。
ありがとうございます!