Takushima Yukimasa / Mbed 2 deprecated R19_ManuTakukAHWGeo

Dependencies:   mbed

Revision:
0:761a63c6d020
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/encoder/encoder.h	Thu Aug 22 09:26:20 2019 +0000
@@ -0,0 +1,119 @@
+/* ヘッダ再呼び出し防止のための定義 ------------------------------------------*/
+#ifndef INCLDUED_encoder_h_
+#define INCLDUED_encoder_h_
+#define Encoder_MAX 1
+
+/* ファイル追加 --------------------------------------------------------------*/
+//#include "YKNCT_def.h"
+#include "mbed.h"
+
+/* 定数定義 ------------------------------------------------------------------*/
+
+/* マクロ定義 ----------------------------------------------------------------*/
+
+/**
+  * @brief  エンコーダー構造に読み取ったデータを取得する
+  * @param  __ENCODER__: エンコーダー配列
+  * @param  __NUMBER__: エンコーダー配列の番号
+  * @retval 読み取りデータ(0-0xFFF)
+  */
+#define ENCODER_GET_VAL(__ENCODER__, __NUMBER__) \
+(((__ENCODER__)+ (__NUMBER__))->read_val)
+
+/**
+  * @brief  エンコーダー構造に読み取った角度を取得する
+  * @param  __ENCODER__: エンコーダー構造
+  * @param  __NUMBER__: エンコーダー構造の番号
+  * @retval 読み取り角度(0-359)
+  */
+#define ENCODER_GET_DEGREE(__MD_DATA__, __NUMBER__)\
+(((__MD_DATA__) + (__NUMBER__))->degree)
+
+/* 変数宣言 ------------------------------------------------------------------*/
+
+/* 関数宣言 ------------------------------------------------------------------*/
+void encoder_conversion(void);
+
+/** 
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "encoder.h"
+ *
+ * // encoder pins: p5 = CS, p6 = CLK,p8 = DO
+ * // 複数用いる場合は以下のように書いてください
+ *  Encoder encoder[Encoder_MAX] = {
+ *          Encoder(p5,p6,p8),
+ *          Encoder(p5,p6,p7)
+ * };
+ *
+ * int main() {
+ *    while(1){
+ *      //エンコーダの処理
+ *      // 角度取得,26回に1度だけ実行される
+ *      if(encoder->Encoder_Read(encoder,Encoder_MAX)) {
+ *
+ *        for(int i=0; i<Encoder_MAX; i++) {
+ *
+ *           //前回の値更新 
+ *           //今回の値更新(エンコーダの値(0~4096)を角度(0~360)に)
+ *           deg[i][1] = deg[i][0];
+ *           deg[i][0] = ENCODER_GET_VAL(encoder,i)*360.0/4096.0;
+ *
+ *           //前回270度以上,今回90度より小さい… 359→0を跨いだ時前回の値を0から逆回転で負の値で表記 
+ *           if((270 <= deg[i][1] ) && (deg[i][0] < 90)) deg[i][1]-= 360;
+ *
+ *           //0→359を跨いだ時,前回の値を360以上の値で表記
+ *          else if((deg[i][1] < 90) && (270 <= deg[i][0])) deg[i][1]+= 360;
+ *
+ *       }
+ *
+*       }
+ *    }
+ * }
+ * @endcode
+ */
+
+class Encoder
+{
+public:
+     /** Create an encoder object connected to the specified pins.
+     *
+     * @param p1 CS
+     * @param p2 CLK
+     * @param p3 DO
+     */
+    Encoder(PinName p1,PinName p2,PinName p3);
+    /** ロータリーエンコーダから角度を取得する関数
+     *
+     * @param *e  クラスオブジェクトの配列の先頭アドレス
+     * @param MAX 使用するエンコーダ個数
+     */
+    int Encoder_Read(Encoder *e,uint8_t MAX);
+    uint16_t            read_buf;  /* 読み取りデータ処理用の一時保存領域 */
+    uint16_t            read_val;  /* 読み取りデータ(0-0xFFF) */
+    int16_t             degree;    /* 読み取りデータを角度(0-360)に変換した値 */
+    
+private:
+    DigitalOut CS;       /* CSポートピンデータ構造 */
+    DigitalOut CLK;      /* CLKポートピンデータ構造 */
+    DigitalIn DO;       /* DOポートピンデータ構造 */
+};
+
+
+/**
+  * @}
+  */
+
+
+
+/* 型定義 --------------------------------------------------------------------*/
+extern double enc[Encoder_MAX][2];
+extern Encoder encoder[Encoder_MAX];
+
+#endif /* _YKNCT_EX_ENCODER_H_ */
+
+
+
+/******************************** END OF FILE *********************************/