Recent Changes - Search:

PmWiki

pmwiki.org

edit SideBar

LendoDoEncoderHEDS-5700

LendoDoEncoderHEDS-5700.LendoDoEncoderHEDS-5700 History

Hide minor edits - Show changes to output

April 02, 2015, at 02:00 PM by 143.107.232.230 -
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;
}
Edit - History - Print - Recent Changes - Search
Page last modified on April 02, 2015, at 02:00 PM