上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
おはようございます!
昨日の昼間に寝すぎて、昨夜は4時間しか眠れなかったゆってぃです。

早速、前回の続きを行ってみましょう!
今回の記事では、ArduinoのIDEに付属しているStepperライブラリを拡張し、外部から停止可能な
StoppableStepperクラス
をご紹介します。
(名前がダサいのは僕のセンスが無いからです…)

従来のStepperに対し、拡張して出来ることはひとつだけ。
モータを回転させている時、外部から止めることが出来る!
ただそれだけです…。

githubにコードを上げました。
※このコードのライセンスはLGPLv2.1です。ご注意下さい。

基本的な部分は、スーパークラスであるStepperクラスを流用するのですが、ひとつ問題があります。
README.mdにも書きましたが、Stepperクラスは内部メソッドをprivate宣言しているため、サブクラスからは使用することが出来ないのです。
そのため、Stepperクラス自体に手を入れます。
大した変更ではありませんが、念のため元ファイルのバックアップは取っておいてください。

--- Steppere.h ------------------

void step(int number_of_steps);

int version(void);

// private: <- private宣言をコメントアウトして
protected: // <- protected宣言にします
void stepMotor(int this_step);

int direction; // Direction of rotation
unsigned long step_delay; // delay between steps, in ms, based on speed

------------------

次に、StoppableStepperクラスの説明に入ります。
ヘッダは以下の様になっております。

--- StoppableSteppere.h ------------------

File Edit Options Buffers Tools C Help
#ifndef STOPPABLE_STEPPER_H_
#define STOPPABLE_STEPPER_H_

#include "Sensor.h"
#include <stepper.h>

class StoppableStepper : public Stepper{
public:
StoppableStepper(int steps, int pin1, int pin2, int pin3, int pin4);
virtual ~StoppableStepper(){}
int stepWithStopper(int number_of_steps);
void stop();

private:
StoppableStepper();
void step(int number_of_steps);

private:
volatile bool stop_flag_;
};

#endif // STOPPABLE_STEPPER_H_

------------------

新しいメソッドが2つ追加されています。
stepWithStopper()メソッドstop()メソッドです。
(名前がダ・・・以下略)

stepWithStopper()は、Stepper::step()とほとんど使い方は同じですが、2つだけ違いがあります。
1つ目は、モーター駆動中にstop()メソッドが呼ばれると、モータの駆動を停止してメソッドを抜けるということ
2つ目は、入力に対して何ステップ移動したのかを、戻り値で返すこと

です。
2つ目が必要な理由は単純で、戻り値がvoidだと、stop()によりモータが停止されてしまった場合、どの程度の距離移動したのかが制御側で把握できなくなるためです。
なお、入力に負の数を入れると、負の数として値が戻ります。
StoppableStepper.cppをご覧いただければ、何をしているかはすぐに分かると思います。

また、従来のstep()メソッドと同様に、このメソッドはブロッキングです。
つまり、処理が終了するまでは抜けてきません。
ですので、stop()メソッドは、割り込みハンドラ等でコールしてください。

次回は、このクラスを使って何か出来るのかを見ていきましょう^^
関連記事
スポンサーサイト
コメント
コメントの投稿
トラックバック URL
トラックバック
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。