0. Componentes e programação necessária para um codificador rotativo com eixo de pressão

Componentes necessários:

{Produto: 2.000} {Produto: 703}

I. Como usar o módulo codificador rotativo com botão de pressão

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

II. Procedimentos experimentais

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

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 () {

currentTime = millis ();

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

{

bool IsCW = true;

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.