LendoDoEncoderHEDS-5700LendoDoEncoderHEDS-5700.LendoDoEncoderHEDS-5700 HistoryHide minor edits - Show changes to output Added lines 1-70:
!! Lendo do Encoder HEDS-5700 O 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. */ #define N_PULSOS_VOLTA 512 #define encoderChA 2 /* Canal A */ #define encoderChB 3 /* Canal B */ #define NULL 0 #define HORARIO 1 #define ANTIHORARIO 2 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; } |