0

私はArduinoを使用してVictor884のいくつかを制御しています

いくつかの調査の結果、それを実行するには、さまざまな期間のパルスを送信する必要があることがわかりました(ここでの正しい用語が何であるかはわかりません)。

それを制御するには、次のようにします。

Stop = 1.5 ms on and 0.5 ms off.
Forward Full Power = 2 ms on and 0 ms off
Backward Full Power = 1 ms on and 1 ms off

したがって、モーターを停止させるために、このようなコードを使用できます。

void setup() {
    pinMode(13, OUTPUT);
}

void loop() {
    digitalWrite(13, HIGH);
    delayMicroseconds(1500);
    digitalWrite(13, LOW);
    delayMicroseconds(500);
}

問題は、このコードがブロックされているため、時間を混乱させずに何もできないことです。解決策は、delayステートメントを取り除くことです。

BlinkWithoutDelayの例に基づいて、非ブロッキングバージョンを作成することができました。

3-4ビクターをコントロールしようとすると問題が発生します。コピー、貼り付け、名前の変更をいくつかの番号でタックオンする方法を試しましたが、コードがすぐに乱雑になります。

だから私の質問は、これをどのように行うべきかということです。それを処理するためにいくつかのクラスを作成する必要がありますか(C ++でクラスを作成する方法がわからないため、苦痛です)、またはArduinoのタイマーを使用して目標を達成することを検討する必要があります。

4

2 に答える 2

0

タイマーライブラリと独自のクラスの両方を使用して、物事をクリーンに保つことができます。クラスの代わりに、884を駆動する関数を含む追加の.pde/.inoファイルを作成することもできます。

Windowsを実行している場合は、VisualStudioProfessionalとArduinoプラグインのコピーを入手してください。クラスを自動的に作成する新しいCppファイルを作成するオプションがあります。http://www.visualmicro.com

1つが機能しているのを見ると、クラスは非常に簡単です。もう1つの方法は、884コードを処理する独自のライブラリを作成することですが、それはより複雑です。

編集:C ++の詳細を学ぶ場合は、上記のPawelのコメントに従ってください。Pawelは正しい割り込みです。特にmicroSeconds、最初にリクエストを読んだときに見逃した割り込みを使用する場合に最適です。

于 2012-10-11T18:17:50.477 に答える
0

おそらく、PWMとして知られるパルス幅変調について学びたいと思うかもしれません:http://arduino.cc/en/Tutorial/PWM

于 2013-02-07T18:56:43.047 に答える