Takushima Yukimasa / Mbed 2 deprecated R19_ManuTakukAHWGeo

Dependencies:   mbed

Committer:
Tom0108
Date:
Thu Aug 22 09:26:20 2019 +0000
Revision:
0:761a63c6d020
08/22

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Tom0108 0:761a63c6d020 1 /* ヘッダ再呼び出し防止のための定義 ------------------------------------------*/
Tom0108 0:761a63c6d020 2 #ifndef INCLDUED_encoder_h_
Tom0108 0:761a63c6d020 3 #define INCLDUED_encoder_h_
Tom0108 0:761a63c6d020 4 #define Encoder_MAX 1
Tom0108 0:761a63c6d020 5
Tom0108 0:761a63c6d020 6 /* ファイル追加 --------------------------------------------------------------*/
Tom0108 0:761a63c6d020 7 //#include "YKNCT_def.h"
Tom0108 0:761a63c6d020 8 #include "mbed.h"
Tom0108 0:761a63c6d020 9
Tom0108 0:761a63c6d020 10 /* 定数定義 ------------------------------------------------------------------*/
Tom0108 0:761a63c6d020 11
Tom0108 0:761a63c6d020 12 /* マクロ定義 ----------------------------------------------------------------*/
Tom0108 0:761a63c6d020 13
Tom0108 0:761a63c6d020 14 /**
Tom0108 0:761a63c6d020 15 * @brief エンコーダー構造に読み取ったデータを取得する
Tom0108 0:761a63c6d020 16 * @param __ENCODER__: エンコーダー配列
Tom0108 0:761a63c6d020 17 * @param __NUMBER__: エンコーダー配列の番号
Tom0108 0:761a63c6d020 18 * @retval 読み取りデータ(0-0xFFF)
Tom0108 0:761a63c6d020 19 */
Tom0108 0:761a63c6d020 20 #define ENCODER_GET_VAL(__ENCODER__, __NUMBER__) \
Tom0108 0:761a63c6d020 21 (((__ENCODER__)+ (__NUMBER__))->read_val)
Tom0108 0:761a63c6d020 22
Tom0108 0:761a63c6d020 23 /**
Tom0108 0:761a63c6d020 24 * @brief エンコーダー構造に読み取った角度を取得する
Tom0108 0:761a63c6d020 25 * @param __ENCODER__: エンコーダー構造
Tom0108 0:761a63c6d020 26 * @param __NUMBER__: エンコーダー構造の番号
Tom0108 0:761a63c6d020 27 * @retval 読み取り角度(0-359)
Tom0108 0:761a63c6d020 28 */
Tom0108 0:761a63c6d020 29 #define ENCODER_GET_DEGREE(__MD_DATA__, __NUMBER__)\
Tom0108 0:761a63c6d020 30 (((__MD_DATA__) + (__NUMBER__))->degree)
Tom0108 0:761a63c6d020 31
Tom0108 0:761a63c6d020 32 /* 変数宣言 ------------------------------------------------------------------*/
Tom0108 0:761a63c6d020 33
Tom0108 0:761a63c6d020 34 /* 関数宣言 ------------------------------------------------------------------*/
Tom0108 0:761a63c6d020 35 void encoder_conversion(void);
Tom0108 0:761a63c6d020 36
Tom0108 0:761a63c6d020 37 /**
Tom0108 0:761a63c6d020 38 *
Tom0108 0:761a63c6d020 39 * Example:
Tom0108 0:761a63c6d020 40 * @code
Tom0108 0:761a63c6d020 41 * #include "mbed.h"
Tom0108 0:761a63c6d020 42 * #include "encoder.h"
Tom0108 0:761a63c6d020 43 *
Tom0108 0:761a63c6d020 44 * // encoder pins: p5 = CS, p6 = CLK,p8 = DO
Tom0108 0:761a63c6d020 45 * // 複数用いる場合は以下のように書いてください
Tom0108 0:761a63c6d020 46 * Encoder encoder[Encoder_MAX] = {
Tom0108 0:761a63c6d020 47 * Encoder(p5,p6,p8),
Tom0108 0:761a63c6d020 48 * Encoder(p5,p6,p7)
Tom0108 0:761a63c6d020 49 * };
Tom0108 0:761a63c6d020 50 *
Tom0108 0:761a63c6d020 51 * int main() {
Tom0108 0:761a63c6d020 52 * while(1){
Tom0108 0:761a63c6d020 53 * //エンコーダの処理
Tom0108 0:761a63c6d020 54 * // 角度取得,26回に1度だけ実行される
Tom0108 0:761a63c6d020 55 * if(encoder->Encoder_Read(encoder,Encoder_MAX)) {
Tom0108 0:761a63c6d020 56 *
Tom0108 0:761a63c6d020 57 * for(int i=0; i<Encoder_MAX; i++) {
Tom0108 0:761a63c6d020 58 *
Tom0108 0:761a63c6d020 59 * //前回の値更新
Tom0108 0:761a63c6d020 60 * //今回の値更新(エンコーダの値(0~4096)を角度(0~360)に)
Tom0108 0:761a63c6d020 61 * deg[i][1] = deg[i][0];
Tom0108 0:761a63c6d020 62 * deg[i][0] = ENCODER_GET_VAL(encoder,i)*360.0/4096.0;
Tom0108 0:761a63c6d020 63 *
Tom0108 0:761a63c6d020 64 * //前回270度以上,今回90度より小さい… 359→0を跨いだ時前回の値を0から逆回転で負の値で表記
Tom0108 0:761a63c6d020 65 * if((270 <= deg[i][1] ) && (deg[i][0] < 90)) deg[i][1]-= 360;
Tom0108 0:761a63c6d020 66 *
Tom0108 0:761a63c6d020 67 * //0→359を跨いだ時,前回の値を360以上の値で表記
Tom0108 0:761a63c6d020 68 * else if((deg[i][1] < 90) && (270 <= deg[i][0])) deg[i][1]+= 360;
Tom0108 0:761a63c6d020 69 *
Tom0108 0:761a63c6d020 70 * }
Tom0108 0:761a63c6d020 71 *
Tom0108 0:761a63c6d020 72 * }
Tom0108 0:761a63c6d020 73 * }
Tom0108 0:761a63c6d020 74 * }
Tom0108 0:761a63c6d020 75 * @endcode
Tom0108 0:761a63c6d020 76 */
Tom0108 0:761a63c6d020 77
Tom0108 0:761a63c6d020 78 class Encoder
Tom0108 0:761a63c6d020 79 {
Tom0108 0:761a63c6d020 80 public:
Tom0108 0:761a63c6d020 81 /** Create an encoder object connected to the specified pins.
Tom0108 0:761a63c6d020 82 *
Tom0108 0:761a63c6d020 83 * @param p1 CS
Tom0108 0:761a63c6d020 84 * @param p2 CLK
Tom0108 0:761a63c6d020 85 * @param p3 DO
Tom0108 0:761a63c6d020 86 */
Tom0108 0:761a63c6d020 87 Encoder(PinName p1,PinName p2,PinName p3);
Tom0108 0:761a63c6d020 88 /** ロータリーエンコーダから角度を取得する関数
Tom0108 0:761a63c6d020 89 *
Tom0108 0:761a63c6d020 90 * @param *e クラスオブジェクトの配列の先頭アドレス
Tom0108 0:761a63c6d020 91 * @param MAX 使用するエンコーダ個数
Tom0108 0:761a63c6d020 92 */
Tom0108 0:761a63c6d020 93 int Encoder_Read(Encoder *e,uint8_t MAX);
Tom0108 0:761a63c6d020 94 uint16_t read_buf; /* 読み取りデータ処理用の一時保存領域 */
Tom0108 0:761a63c6d020 95 uint16_t read_val; /* 読み取りデータ(0-0xFFF) */
Tom0108 0:761a63c6d020 96 int16_t degree; /* 読み取りデータを角度(0-360)に変換した値 */
Tom0108 0:761a63c6d020 97
Tom0108 0:761a63c6d020 98 private:
Tom0108 0:761a63c6d020 99 DigitalOut CS; /* CSポートピンデータ構造 */
Tom0108 0:761a63c6d020 100 DigitalOut CLK; /* CLKポートピンデータ構造 */
Tom0108 0:761a63c6d020 101 DigitalIn DO; /* DOポートピンデータ構造 */
Tom0108 0:761a63c6d020 102 };
Tom0108 0:761a63c6d020 103
Tom0108 0:761a63c6d020 104
Tom0108 0:761a63c6d020 105 /**
Tom0108 0:761a63c6d020 106 * @}
Tom0108 0:761a63c6d020 107 */
Tom0108 0:761a63c6d020 108
Tom0108 0:761a63c6d020 109
Tom0108 0:761a63c6d020 110
Tom0108 0:761a63c6d020 111 /* 型定義 --------------------------------------------------------------------*/
Tom0108 0:761a63c6d020 112 extern double enc[Encoder_MAX][2];
Tom0108 0:761a63c6d020 113 extern Encoder encoder[Encoder_MAX];
Tom0108 0:761a63c6d020 114
Tom0108 0:761a63c6d020 115 #endif /* _YKNCT_EX_ENCODER_H_ */
Tom0108 0:761a63c6d020 116
Tom0108 0:761a63c6d020 117
Tom0108 0:761a63c6d020 118
Tom0108 0:761a63c6d020 119 /******************************** END OF FILE *********************************/