360 graden PWM roterende encoder breakout
360 graden PWM roterende encoder breakout
Omschrijving
Dit type schakelaar is een incrementele roterende encoder. In feite is het de meest gebruikte van alle roterende encoders vanwege de lage kosten en het vermogen om signalen te leveren die gemakkelijk kunnen worden geïnterpreteerd om bewegingsgerelateerde informatie zoals snelheid te leveren.
Door te roteren, kan de roterende encoder de outputpulsfrequentie in positieve en omgekeerde richting tellen tijdens rotatie, in tegenstelling tot een roterende potentiometerteller zonder telbeperking. Met de knop op de roterende encoder kan deze vanaf nul worden gereset naar de oorspronkelijke status.
Code testen
int redPin = 2;
int yellowPin = 3;
int greenPin = 4;
int aPin = 6;
int bPin = 7;
int buttonPin = 5;
int staat = 0;
int longPeriod = 5000; // Tijd op groen of rood
int shortPeriod = 700; // Tijdsperiode bij verandering
int targetCount = shortPeriod;
int count = 0;
leegte setup ()
{
pinMode (aPin, INPUT);
pinMode (bPin, INPUT);
pinMode (buttonPin, INPUT);
pinMode (redPin, OUTPUT);
pinMode (yellowPin, OUTPUT);
pinMode (greenPin, OUTPUT);
}
leegte lus ()
{
tel ++;
if (digitalRead (buttonPin))
{
setLights (HIGH, HIGH, HIGH);
}
anders
{
int verandering = getEncoderTurn ();
int newPeriod = longPeriod + (wijziging * 1000);
if (newPeriod> = 1000 && newPeriod <= 10000)
{
longPeriod = newPeriod;
}
if (count> targetCount)
{
setState ();
count = 0;
}
}
vertraging (1);
}
int getEncoderTurn ()
{
// retourneer -1, 0 of +1
static int oldA = LOW;
static int oldB = LOW;
int resultaat = 0;
int newA = digitalRead (aPin);
int newB = digitalRead (bPin);
if (newA! = oldA || newB! = oldB)
{
// iets is veranderd
if (oldA == LAAG && newA == HOOG)
{
resultaat = - (oudB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
resultaat teruggeven;
}
int setState ()
{
if (staat == 0)
{
setLights (HIGH, LOW, LOW);
targetCount = longPeriod;
staat = 1;
}
else if (staat == 1)
{
setLights (HIGH, HIGH, LOW);
targetCount = shortPeriod;
staat = 2;
}
else if (staat == 2)
{
setLights (LOW, LOW, HIGH);
targetCount = longPeriod;
staat = 3;
}
else if (staat == 3)
{
setLights (LOW, HIGH, LOW);
targetCount = shortPeriod;
staat = 0;
}
}
void setLights (int rood, int geel, int groen)
{
digitalWrite (redPin, rood);
digitalWrite (yellowPin, geel);
digitalWrite (greenPin, groen);
}