Breakout de codificador rotativo PWM de 360 grados
Breakout de codificador rotativo PWM de 360 grados
Descripción
Este tipo de interruptor es un codificador rotativo incremental. De hecho, es el más utilizado de todos los codificadores rotativos debido a su bajo costo y capacidad para proporcionar señales que pueden interpretarse fácilmente para proporcionar información relacionada con el movimiento, como la velocidad.
Al girar, el codificador rotativo puede contar la frecuencia del pulso de salida en dirección positiva e inversa durante la rotación, a diferencia de un contador de potenciómetro rotativo sin la limitación de contabilidad. Con el botón en el codificador giratorio, se puede restablecer a su estado inicial a partir de cero.
Código de prueba
int redpin = 2;
int amarillo = 3;
int greenpin = 4;
int apin = 6;
int bpin = 7;
int Buttonpin = 5;
int state = 0;
int longperiod = 5000; // tiempo en verde o rojo
int shortperiod = 700; // Período de tiempo al cambiar
int TargetCount = ShortPeriod;
int count = 0;
Configuración vacía ()
{
PinMode (apin, entrada);
PinMode (bpin, entrada);
PinMode (Buttonpin, Entrada);
PinMode (Redpin, salida);
PinMode (Pin de amarillo, salida);
PinMode (GreenPin, salida);
}
bucle vacío ()
{
contar ++;
if (digitalRead (Buttonpin))
{
Setlights (alto, alto, alto);
}
demás
{
int cambio = getencoderturn ();
int NewPeriod = LongPeriod + (cambio * 1000);
if (newperiod> = 1000 && newPeriod <= 10000)
{
longperiod = newperiod;
}
if (Count> TargetCount)
{
setState ();
recuento = 0;
}
}
retraso (1);
}
int getencoderturn ()
{
// return -1, 0 o +1
static int OldA = bajo;
static int OldB = Low;
int resultado = 0;
int newa = digitalread (apin);
int newb = DigitalRead (BPIN);
if (newa! = OldA || Newb! = Oldb)
{
// algo ha cambiado
if (OldA == Low && Newa == High)
{
resultado = - (Oldb * 2 - 1);
}
}
OldA = Newa;
Oldb = newb;
resultado de retorno;
}
int setstate ()
{
if (estado == 0)
{
setlights (alto, bajo, bajo);
TargetCount = LongPeriod;
estado = 1;
}
más si (estado == 1)
{
Setlights (alto, alto, bajo);
TargetCount = ShortPeriod;
estado = 2;
}
más si (estado == 2)
{
setlights (bajo, bajo, alto);
TargetCount = LongPeriod;
estado = 3;
}
más si (estado == 3)
{
setlights (bajo, alto, bajo);
TargetCount = ShortPeriod;
estado = 0;
}
}
Void Setlights (int rojo, int amarillo, int verde)
{
DigitalWrite (Redpin, Red);
DigitalWrite (amarillo, amarillo);
DigitalWrite (GreenPin, Green);
}