360 Graad PWM Roterende Enkodeerder
360 Graad PWM Roterende Enkodeerder
Beskrywing
Hierdie tipe skakelaar is 'n inkrementele roterende enkodeerder. In werklikheid is dit die mees gebruikte van alle roterende enkoders as gevolg van sy lae koste en vermoë om seine te verskaf wat maklik geïnterpreteer kan word om bewegingsverwante inligting soos snelheid te verskaf.
Deur te draai, die roterende enkodeerder kan die uitset pols frekwensie tel in positiewe en omgekeerde rigting tydens rotasie, in teenstelling met 'n roterende potentiometer toonbank sonder om beperking te tel. Met die knoppie op die roterende enkodeerder kan dit teruggestel word na sy aanvanklike toestand vanaf nul.
Toets kode
int redPin = 2;
int yellowPin = 3;
int greenPin = 4;
int aPin = 6;
int bPin = 7;
int buttonPin = 5;
int staat = 0;
int longPeriod = 5000; Tyd op groen of rooi
int kortPeriod = 700; Tydperk wanneer dit verander
int targetCount = shortPeriod;
int telling = 0;
leemte opstelling()
{
pinMode (aPin, INSETTE);
pinMode (bPin, INSETTE);
pinMode (knoppiePin, INSETTE);
pinMode (redPin, UITSET);
pinMode (geelPin, UITSET);
pinMode (greenPin, UITSET);
}
leemte lus()
{
tel++;
as (digitalRead (buttonPin))
{
setLights (HOOG, HOOG, HOOG);
}
Anders
{
int verandering = getEncoderTurn ();
int newPeriod = longPeriod + (verander * 1000);
as (newPeriod >= 1000 & newPeriod <= 10000)
{
longPeriod = newPeriod;
}
indien (tel > targetCount)
{
setState();
tel = 0;
}
}
vertraging(1);
}
int getEncoderTurn()
{
terugkeer -1, 0 of +1
statiese int oldA = LAE;
statiese int oldB = LAE;
int resultaat = 0;
int newA = digitaleLees (aPin);
int newB = digitaleLees (bPin);
as (newA != oldA || nuweB != oldB)
{
iets verander het
as (oldA == LAE & newA == HOOG)
{
resultaat = -(oldB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
terugkeer resultaat;
}
int setState()
{
as (staat == 0)
{
setLights (HOOG, LAAG, LAAG);
targetCount = longPeriod;
staat = 1;
}
anders as (staat == 1)
{
setLights (HOOG, HOOG, LAAG);
targetCount = shortPeriod;
staat = 2;
}
anders as (staat == 2)
{
setLights (LAE, LAE, HOOG);
targetCount = longPeriod;
staat = 3;
}
anders as (staat == 3)
{
setLights (LAE, HOOG, LAAG);
targetCount = shortPeriod;
staat = 0;
}
}
leemte setLights (int rooi, int geel, int groen)
{
digitaleSkryf (redPin, rooi);
digitaleSkryf (geelPin, geel);
digitaleSkryf (greenPin, groen);
}