Mobile
Um codificador rotativo é um dispositivo genérico que permite determinar a posição e a velocidade angular de um acionamento executado fisicamente e registrar a medição de um processador ou autômato como Arduino .
Esses codificadores consistem em dois pinos para o botão (funciona como um botão normal) e três pinos para o codificador. Os três pinos do codificador são conectados um ao terra e os outros dois às respectivas entradas que designamos na placa Arduino . Esses dois sinais que saem do codificador nos dão um total de 4 combinações. 00, 01, 10 e 11. Isso é conhecido como 2 bits de código Gray.
Se tratarmos os pinos em código binário, os lemos como 00, 01, 10 ou 11. A sequência das saídas do codificador conforme giramos no sentido horário é 00, 01, 11, 10
Conexão
O módulo é alimentado diretamente por Arduino , portanto, não precisamos de uma fonte de alimentação externa. Para conectar o codificador a Arduino , precisamos de três entradas digitais, duas para detecção do codificador e uma adicional se quisermos gravar a pressão da alavanca (SW)
Os pinos são conectados de acordo com a tabela:
Módulo Pin
Pino de Arduino UNO
CLK
D2
DT
D3
SW
D9
+
5V
GND
Código
Abra um novo esboço e copie o seguinte código:
const int channelPinA = 9;
const int channelPinB = 10;
unsigned char stateChannelA;
unsigned char stateChannelB;
caractere sem sinal prevStateChannelA = 0;
const int maxSteps = 255;
int prevValue;
valor int;
const int timeThreshold = 5;
unsigned long currentTime;
long loopTime sem sinal;
bool IsCW = true;
void setup () {
Serial.begin (9600);
pinMode (channelPinA, INPUT);
pinMode (channelPinB, INPUT);
currentTime = millis ();
loopTime = currentTime;
valor = 0;
prevValue = 0;
}
void loop () {
if (currentTime> = (loopTime + timeThreshold))
{
stateChannelA = digitalRead (channelPinA);
stateChannelB = digitalRead (channelPinB);
if (stateChannelA! = prevStateChannelA) // Para precisão única if ((! stateChannelA) && (prevStateChannelA))
if (stateChannelB) // B é HIGH, é CW
if (valor + 1 <= maxSteps) valor ++; // Certifique-se de que não excedemos maxSteps
else // B é BAIXO, é CWW
bool IsCW = false;
if (valor - 1> = 0) valor = valor--; // Certifique-se de que não temos negativos
prevStateChannelA = stateChannelA; // Salve os valores para o próximo
// Se o valor mudou, mostre-o
if (prevValue! = value)
prevValue = valor;
Serial.print (valor);
loopTime = currentTime; // Tempo de atualização
// Outras tarefas
Do Monitor Serial na aba Ferramentas, podemos observar as posições.