#include <Arduino.h>
#define EC11_DATA_key digitalRead(D5) //GPIO14
#define EC11_DATA_A digitalRead(D4) //GPIO2
#define EC11_DATA_B digitalRead(D3) //GPIO0
int16_t Encoder_EC11_Scan(int16_t key,int16_t EC11_A,int16_t EC11_B);
void setup() {
pinMode(D3,INPUT_PULLUP); //输入上拉
pinMode(D4,INPUT_PULLUP); //输入上拉
pinMode(D5,INPUT_PULLUP); //输入上拉
Serial.begin(115200);
}
void loop() {
Encoder_EC11_Scan(EC11_DATA_key,EC11_DATA_A,EC11_DATA_B);
}
int16_t Encoder_EC11_Scan(int16_t key,int16_t EC11_A,int16_t EC11_B)
{
static int8_t sta=0,sta_key=0;
int16_t ScanResult = 0;
if(sta_key==0 && key==1) //如果没有按下按键
{
sta_key=1;
}
else if(sta_key==1)
{
if(key==0) //如果按下了按键
{
sta_key=2;
}
}
else if(sta_key==2)
{
if(key==1) //如果松开按键
{
sta_key=0;
ScanResult=3;
}
}
if(EC11_A==0 && sta==0) //如果A=0
{
sta=1;
}
else if(sta==1) //如果A=0
{
if(EC11_A==1) //A=1
{
if(EC11_B==1) //B=1
{
if(key==0)
{
ScanResult=2; //按下按键正转
sta_key=0; //清零
}
else
{
ScanResult=1; //没有按下按键正转
}
}
else if(EC11_B==0) //B=0
{
if(key==0)
{
ScanResult=-2; //按下按键反转
sta_key=0;
}
else
{
ScanResult=-1; //没有按下按键反转
}
}
sta=0;
}
}
if(ScanResult!=0)printf("%d\r\n",ScanResult); //输出查看,不需要可删除
return ScanResult; //返回值的取值: 0:无动作; 1:正转; -1:反转; 2:按下正转; -2:按下反转; 3:只按下并松开
}