360 grade PWM Rotary Encoder Breakout
360 grade PWM Rotary Encoder Breakout
Beskrywing
Hierdie tipe skakelaar is 'n inkrementele draai -enkodeerder. In werklikheid is dit die mees gebruikte van alle roterende enkodeerders vanweë die lae koste en die vermoë om seine te verskaf wat maklik geïnterpreteer kan word om bewegingsverwante inligting soos snelheid te verskaf.
Deur te draai, kan die draai -enkodeerder die uitsetpulsfrekwensie in positiewe en omgekeerde rigting tel tydens rotasie, in teenstelling met 'n draaipotentiometer -toonbank sonder om beperking te tel. Met die knoppie op die Rotary Encoder, kan dit teruggestel word na die aanvanklike toestand vanaf nul.
Toetskode
int redpin = 2;
int geelpin = 3;
int greenpin = 4;
int apin = 6;
int bpin = 7;
int buttonpin = 5;
int staat = 0;
int longperiod = 5000; // tyd by groen of rooi
int kortperiod = 700; // tydperk wanneer dit verander
int targetCount = kortperiode;
int tel = 0;
nietig opstelling ()
{
PinMode (apin, invoer);
PinMode (BPIN, inset);
PinMode (ButtonPin, invoer);
PinMode (RedPin, uitset);
PinMode (YellowPin, uitset);
PinMode (GreenPin, uitset);
}
nietig lus ()
{
tel ++;
if (digitalRead (ButtonPin))
{
stelligte (hoog, hoog, hoog);
}
anders
{
int verandering = getEncoDerturn ();
int newperiod = longperiod + (verandering * 1000);
if (newperiod> = 1000 && newperiod <= 10000)
{
longperiod = newperiod;
}
if (tel> teikenCount)
{
setState ();
tel = 0;
}
}
vertraging (1);
}
int getEncoDerturn ()
{
// return -1, 0, of +1
statiese int olda = laag;
statiese int oldb = laag;
int -resultaat = 0;
int newa = digitalRead (apin);
int newb = digitalRead (bpin);
if (newa! = Olda || newb! = oldb)
{
// iets het verander
if (olda == laag && newa == hoog)
{
resultaat = - (oldB * 2 - 1);
}
}
Olda = newa;
oldb = newb;
terugkeer resultaat;
}
int setstate ()
{
if (staat == 0)
{
stelligte (hoog, laag, laag);
TargetCount = Longperiod;
staat = 1;
}
anders as (staat == 1)
{
stelligte (hoog, hoog, laag);
TargetCount = kortperiode;
staat = 2;
}
anders as (staat == 2)
{
setligte (laag, laag, hoog);
TargetCount = Longperiod;
staat = 3;
}
anders as (staat == 3)
{
setligte (laag, hoog, laag);
TargetCount = kortperiode;
staat = 0;
}
}
nietig setligte (int rooi, int geel, int groen)
{
DigitalWrite (Redpin, rooi);
DigitalWrite (YellowPin, geel);
DigitalWrite (GreenPin, groen);
}