This drive is working well with "LPD3806-600BM-G5-24G", and have Simple program, external pull-up resistance is required

Dependencies:   mbed

注意:需要外置上拉电阻。

Committer:
Yifan_Du
Date:
Sat Feb 02 21:19:30 2019 +0000
Revision:
0:b2ffb830539c
Driver and sample program for rotary encoder. it is working well with"LDP3806-600BM-G5-24G".

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yifan_Du 0:b2ffb830539c 1 #include "Rotary_Encoder.h"
Yifan_Du 0:b2ffb830539c 2
Yifan_Du 0:b2ffb830539c 3 Rotary_Encoder::Rotary_Encoder(PinName White, PinName Green) : Green_Pin(Green), White_Pin(White)
Yifan_Du 0:b2ffb830539c 4 {
Yifan_Du 0:b2ffb830539c 5 Green_Pin.rise(this, &Rotary_Encoder::Green_Pin_Rise);
Yifan_Du 0:b2ffb830539c 6 White_Pin.rise(this, &Rotary_Encoder::White_Pin_Rise);
Yifan_Du 0:b2ffb830539c 7 }
Yifan_Du 0:b2ffb830539c 8
Yifan_Du 0:b2ffb830539c 9 void Rotary_Encoder::Green_Pin_Rise(void)
Yifan_Du 0:b2ffb830539c 10 {
Yifan_Du 0:b2ffb830539c 11 if(White_Pin.read() == 0)
Yifan_Du 0:b2ffb830539c 12 Encoder_Counter++;
Yifan_Du 0:b2ffb830539c 13 else
Yifan_Du 0:b2ffb830539c 14 Encoder_Counter--;
Yifan_Du 0:b2ffb830539c 15 }
Yifan_Du 0:b2ffb830539c 16
Yifan_Du 0:b2ffb830539c 17 void Rotary_Encoder::White_Pin_Rise(void)
Yifan_Du 0:b2ffb830539c 18 {
Yifan_Du 0:b2ffb830539c 19 if(Green_Pin.read() == 0)
Yifan_Du 0:b2ffb830539c 20 Encoder_Counter--;
Yifan_Du 0:b2ffb830539c 21 else
Yifan_Du 0:b2ffb830539c 22 Encoder_Counter++;
Yifan_Du 0:b2ffb830539c 23 }
Yifan_Du 0:b2ffb830539c 24
Yifan_Du 0:b2ffb830539c 25 char *Rotary_Encoder::Calculate_Direction(void)
Yifan_Du 0:b2ffb830539c 26 {
Yifan_Du 0:b2ffb830539c 27 // Data processing -2^32< "int" <2^32-1
Yifan_Du 0:b2ffb830539c 28 while(Encoder_Counter < -1275)
Yifan_Du 0:b2ffb830539c 29 Encoder_Counter = Encoder_Counter + 1200;
Yifan_Du 0:b2ffb830539c 30 while(Encoder_Counter > 1275)
Yifan_Du 0:b2ffb830539c 31 Encoder_Counter = Encoder_Counter - 1200;
Yifan_Du 0:b2ffb830539c 32
Yifan_Du 0:b2ffb830539c 33 // Calculate the direction
Yifan_Du 0:b2ffb830539c 34 if(((-1275<=Encoder_Counter)&&(Encoder_Counter<=-1126)) || ((-76 <= Encoder_Counter)&&(Encoder_Counter <= 75)) || ((1126 <= Encoder_Counter)&&(Encoder_Counter <= 1275)))
Yifan_Du 0:b2ffb830539c 35 strcpy(Direction,"N"); // N 北
Yifan_Du 0:b2ffb830539c 36 else if (((76 <= Encoder_Counter)&&(Encoder_Counter <= 225)) || ((-1126 <= Encoder_Counter)&&(Encoder_Counter <= -975)))
Yifan_Du 0:b2ffb830539c 37 strcpy(Direction,"NE"); // NE 东北
Yifan_Du 0:b2ffb830539c 38 else if (((226 <= Encoder_Counter)&&(Encoder_Counter <= 375)) || ((-976 <= Encoder_Counter)&&(Encoder_Counter <= -825)))
Yifan_Du 0:b2ffb830539c 39 strcpy(Direction,"E"); // E 东
Yifan_Du 0:b2ffb830539c 40 else if (((376 <= Encoder_Counter)&&(Encoder_Counter <= 525)) || ((-826 <= Encoder_Counter)&&(Encoder_Counter <= -675)))
Yifan_Du 0:b2ffb830539c 41 strcpy(Direction,"SE"); // SE 东南
Yifan_Du 0:b2ffb830539c 42 else if (((526 <= Encoder_Counter)&&(Encoder_Counter <= 675)) || ((-676 <= Encoder_Counter)&&(Encoder_Counter <= -525)))
Yifan_Du 0:b2ffb830539c 43 strcpy(Direction,"S"); // S 南
Yifan_Du 0:b2ffb830539c 44 else if (((676 <= Encoder_Counter)&&(Encoder_Counter <= 825)) || ((-526 <= Encoder_Counter)&&(Encoder_Counter <= -375)))
Yifan_Du 0:b2ffb830539c 45 strcpy(Direction,"SW"); // SW 西南
Yifan_Du 0:b2ffb830539c 46 else if (((826 <= Encoder_Counter)&&(Encoder_Counter <= 975)) || ((-376 <= Encoder_Counter)&&(Encoder_Counter <= -225)))
Yifan_Du 0:b2ffb830539c 47 strcpy(Direction,"W"); // W 西
Yifan_Du 0:b2ffb830539c 48 else if (((927 <= Encoder_Counter)&&(Encoder_Counter <= 1125)) || ((-226 <= Encoder_Counter)&&(Encoder_Counter <= -75)))
Yifan_Du 0:b2ffb830539c 49 strcpy(Direction,"NW"); // NW 西北
Yifan_Du 0:b2ffb830539c 50
Yifan_Du 0:b2ffb830539c 51 return Direction;
Yifan_Du 0:b2ffb830539c 52 }