for f3rc

Fork of Encoder by Tk A

使い方

まず、"Locate.h"をインクルードする。 次に、Locate machine(x, y)で宣言する。(xとyは初期位置。でも(0,0)推奨) 続いて位置情報を得る。  位置情報を更新する関数は、machine.update()だが、位置情報を得る方法は2つある

(1)machine.update()を直接使う場合

一連の処理は、

machine.update((エンコーダの右), (エンコーダの左));

x = machine.getX();

y = machine.getY();

こんな感じ。

(2)machine.update()を直接使わない場合

一連の処理は、

x = machine.getX((エンコーダの右), (エンコーダの左));

y = machine.getY((エンコーダの右), (エンコーダの左));

こんな感じ。 あるいは、

x = machine.getX((エンコーダの右), (エンコーダの左));

y = machine.getY();

でも同じ結果を得られる。

まとめると、位置情報を得るときは、最初の関数にエンコーダで読み取った値を渡す必要がある。

ちなみにエンコーダの値を得るためには、"QEI.h"(https://developer.mbed.org/users/aberk/code/QEI/) を別途インクルードしたうえで、

QEI right (PA_7, PA_5, NC, lPR, QEI::X2_ENCODING);  右側のエンコーダ

QEI left (PA_13, PA_15, NC, lPR, QEI::X2_ENCODING); 左側のエンコーダ

のように宣言する必要がある。 その後、例えば右側のエンコーダの値を得たいときには、right.getPulses() を使う これを使うと、(1)は

machine.update(right.getPulses(), left.getPulses());

x = machine.getX();

y = machine.getX();

となる

Files at this revision

API Documentation at this revision

Comitter:
sakanakuuun
Date:
Tue Aug 16 11:46:51 2016 +0000
Parent:
12:c88621d7285f
Commit message:
add getX(r, l)

Changed in this revision

Locate.cpp Show annotated file Show diff for this revision Revisions of this file
Locate.h Show annotated file Show diff for this revision Revisions of this file
diff -r c88621d7285f -r 4dfe270cc4de Locate.cpp
--- a/Locate.cpp	Tue Aug 16 11:34:10 2016 +0000
+++ b/Locate.cpp	Tue Aug 16 11:46:51 2016 +0000
@@ -37,11 +37,23 @@
     return x * LOCATE_STEP / 2;   
 }
 
+short Locate::getX(int r, int l)
+{
+    update(r, l);
+    return x * LOCATE_STEP / 2;   
+}
+
 short Locate::getY()
 {
     return y * LOCATE_STEP / 2;   
 }
 
+short Locate::getY(int r, int l)
+{
+    update(r, l);
+    return y * LOCATE_STEP / 2;   
+}
+
 float Locate::getTheta()
 {
     return theta;
diff -r c88621d7285f -r 4dfe270cc4de Locate.h
--- a/Locate.h	Tue Aug 16 11:34:10 2016 +0000
+++ b/Locate.h	Tue Aug 16 11:46:51 2016 +0000
@@ -30,9 +30,11 @@
 public:    
     Locate (int fx, int fy);        //fx,fyは初期位置
     void  setup(int r, int l);      //エンコーダの初期のズレ(dr,dl)を出す、最初に一回だけ行う
-    void  update (int r, int l);    //位置情報を更新する
+    void  update (int r, int l);    //位置情報を更新する。r,lはエンコーダから
     short getX();                   //xをmm換算して整数値として返す
+    short getX(int r, int l);       //上のupdate()も一緒にやってくれる版
     short getY();                   //yをmm換算して整数値として返す
+    short getY(int r, int l);       //上のupdate()も一緒にやってくれる版
     float getTheta();               //thetaを返す
 };