Skip to content

Instantly share code, notes, and snippets.

@gbkrobotics
Created June 16, 2018 16:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gbkrobotics/0af626119bf246427f9d4b6bb501fa51 to your computer and use it in GitHub Desktop.
Save gbkrobotics/0af626119bf246427f9d4b6bb501fa51 to your computer and use it in GitHub Desktop.
/*
- O Modulo Encoder 360° P17 é mecanismo eletromecânico capaz de medir a movimentação rotacional ou posição do eixo. Em geral, um encoder utiliza sensores ópticos para o fornecimento de sinais elétricos, os quais são retornados como sinais de movimento, posição ou direção.
- Entre as características do Modulo Encoder 360° destaca-se a perfeita distribuição dos pulsos nos 360° livres para giro do eixo. O Encoder da GBK em especial possui 25 pulsos por resolução, trabalhando com movimentação livre, ou seja, podem ser dadas infinitas voltas consecutivas.
- Em geral, o Modulo Encoder 360° é utilizado para controle da luminosidade ou mesmo volumes no caso de sistemas sonoros, enfim, a aplicação final vai depender da necessidade do operador, já que fornece controle preciso em velocidades de rotação, posicionamentos angulares, robótica, entre outras.
- Muito prático de utilizar, o Encoder vem acoplado em um módulo com pinos para conexão com sistemas microcontroladores, entre eles, o Arduino, mostrando-se um produto de rápida aplicação e excelentes resultados.
CARACTERÍSTICAS:
- Módulo Encoder 360°;
- Mede a movimentação rotacional ou posição do eixo;
- Perfeita distribuição dos pulsos;
- Possibilita a leitura do sentido de giro;
- 25 pulsos por resolução;
- Giro livre (sem limite);
- Ideal para controles precisos;
- Controle de velocidades de rotação, luminosidade, volume, robótica, etc;
- Rápida aplicação;
- Excelentes resultados;
ESPECIFICAÇÕES:
- Modelo: P17;
- Pulsos por revolução (Resolução) : 25;
- Tensão de Alimentação: 5V;
- Rotação: 360º (Sem limite);
- Saídas: 2 Saídas de Pulsos defasadas 90º;
- Dimensões (CxLxA): 38x18x16mm;
- Peso: 4g.
link da Biblioteca
https://github.com/mathertel/RotaryEncoder/blob/master/RotaryEncoder.h
*/
#include <RotaryEncoder.h>
int digito[8][3] = {
{ LOW, LOW, LOW }, // 0
{ LOW, LOW, HIGH }, // 1
{ LOW, HIGH, LOW }, // 2
{ LOW, HIGH, HIGH }, // 3
{ HIGH, LOW, LOW }, // 4
{ HIGH, LOW, HIGH }, // 5
{ HIGH, HIGH, LOW }, // 6
{ HIGH, HIGH, HIGH } // 7
};
int LED1 = 11;
int LED2 = 12;
int LED3 = 13;
RotaryEncoder encoder(A2, A3);
void setup() {
Serial.begin(9600);
// Habilitar a Interrupção 1 (Pin Change) para as entradas analógicas.
PCICR |= (1 << PCIE1);
// Habilita a interrupção para os pinos analógicos 2 e 3.
PCMSK1 |= (1 << PCINT10) | (1 << PCINT11);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
// Rotina do Serviço de Interrupção 1 (Pin Change)
// Esta rotina apenas é chamada quando ocorre uma mudança de sinal nos pinos A2 e A3
ISR(PCINT1_vect) {
encoder.tick();
}
void loop() {
static int pos = 0;
int novaPos = encoder.getPosition();
if (pos != novaPos) {
Serial.println(novaPos);
pos = novaPos;
if (pos >= 0 && pos <= 7) {
digitalWrite(LED1, digito[pos][0]);
digitalWrite(LED2, digito[pos][1]);
digitalWrite(LED3, digito[pos][2]);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment