![]() |
LendoDoEncoderHEDS-5700Lendo do Encoder HEDS-5700O programa efetua a leitura dos pulsos transmitidos pelo encoder. A informação do encoder (posição atual e sentido da rotação) é retransmitida via comunicação serial a 9600 bps, se uma requisição for feita (ou seja, se algum caractere for enviado para o Arduino). Para o funcionamento do programa os pinos 2 e 3 do Arduino devem estar conectados nos canais A e B do encoder, respectivamente. O encoder também deve estar alimentado (seu pino Vcc deve ser ligado à uma fonte +5V e seu Gnd deve estar no terra). O programa efetua a contagem da rotação e a marcação do sentido através de uma função que atende uma interrupção que está atrelada à mudança de estado do sinal do canal A do encoder. A mensagem transmitida pelo Arduino (quando feita uma requisição) contém uma string com a sequência: C: <posição> S: <sentido> onde <posição> é um valor de 0 à 511 e <sentido> é 0 para nulo, 1 para horario e 2 para anti-horario. Segue o código: /* Leitura do Encoder HEDS-5700 com Arduino.
volatile unsigned int contagem = 0; /* contagem de revolucoes */ volatile unsigned int sentido = NULL; /* sentido da revolucao */ /* * Setup */ void setup(void) { pinMode(encoderChA,INPUT); pinMode(encoderChB,INPUT); Serial.begin(9600); attachInterrupt(0, encoder, CHANGE); } /* * Loop do programa */ void loop(void) { if(Serial.available() > 0) { /* Chegou requisicao (nao importa qual) */ Serial.read(); /* Transmitindo por texto */ Serial.print("C: "); Serial.print(contagem); Serial.print(" S: "); Serial.println(sentido); } } /* * Recebe sinal. */ void encoder(void) { if (digitalRead(encoderChA) == digitalRead(encoderChB)) { contagem++; sentido = HORARIO; } else { contagem--; sentido = ANTIHORARIO; } contagem = contagem % N_PULSOS_VOLTA; } |