360 graus PWM Rotary Coder Breakout
360 graus PWM Rotary Coder Breakout
Descrição
Esse tipo de comutador é um codificador rotativo incremental. De fato, é o mais amplamente utilizado de todos os codificadores rotativos devido ao seu baixo custo e capacidade de fornecer sinais que podem ser facilmente interpretados para fornecer informações relacionadas ao movimento, como a velocidade.
Ao girar, o codificador rotativo pode contar a frequência do pulso de saída na direção positiva e reversa durante a rotação, ao contrário de um contador de potenciômetro rotativo sem contar a limitação. Com o botão no codificador rotativo, ele pode ser redefinido para o seu estado inicial a partir de zero.
Código de teste
int redpin = 2;
int yellowpin = 3;
int Greenpin = 4;
int apin = 6;
int bpin = 7;
int buttonpin = 5;
int state = 0;
int longperiod = 5000; // tempo em verde ou vermelho
int shortperiod = 700; // período de tempo ao mudar
int TargetCount = Shortperiod;
int conting = 0;
configuração void ()
{
pinmode (apin, entrada);
pinmode (bpin, entrada);
pinmode (botão, entrada);
pinmode (redpin, saída);
pinmode (Yellowpin, saída);
pinmode (Greenpin, saída);
}
Void Loop ()
{
contagem ++;
if (DigitalRead (ButtonPin))
{
setlights (alto, alto, alto);
}
outro
{
int alteração = getEncoderturn ();
int newperiod = longperiod + (alteração * 1000);
if (newperiod> = 1000 && newPeriod <= 10000)
{
longperiod = newperiod;
}
se (contagem> TargetCount)
{
setState ();
contagem = 0;
}
}
atraso (1);
}
int getEncoderturn ()
{
// retorna -1, 0 ou +1
estático int antiga = baixo;
estático int oldB = baixo;
int resultado = 0;
int newa = digitalRead (APIN);
int newb = digitalRead (bpin);
if (newa! = antiga || newb! = OldB)
{
// Alguma coisa mudou
if (antiga == Low && newa == High)
{
resultado = - (OldB * 2 - 1);
}
}
Olde = newa;
OldB = newb;
resultado de retorno;
}
int setState ()
{
if (estado == 0)
{
setlights (alto, baixo, baixo);
TargetCount = Longperiod;
estado = 1;
}
caso contrário, se (estado == 1)
{
setlights (alto, alto, baixo);
TargetCount = Shortperiod;
estado = 2;
}
caso contrário, se (estado == 2)
{
setlights (baixo, baixo, alto);
TargetCount = Longperiod;
estado = 3;
}
caso contrário, se (estado == 3)
{
setlights (baixo, alto, baixo);
TargetCount = Shortperiod;
estado = 0;
}
}
Void Setlights (int Red, Int Yellow, Int Green)
{
DigitalWrite (Redpin, vermelho);
DigitalWrite (Yellowpin, amarelo);
DigitalWrite (Greenpin, verde);
}