360 graden PWM Rotary Encoder Breakout
360 graden PWM Rotary Encoder Breakout
Beschrijving
Dit type switch is een incrementele roterende encoder. Het is trouwens de meest gebruikte van alle roterende encoders vanwege de lage kosten en het vermogen om signalen te bieden die gemakkelijk kunnen worden geïnterpreteerd om bewegingsgerelateerde informatie zoals snelheid te bieden.
Door te roteren, kan de roterende encoder de uitgangspulsfrequentie in positieve en omgekeerde richting tijdens de rotatie tellen, in tegenstelling tot een roterende potentiometer -teller zonder beperking te tellen. Met de knop op de roterende encoder kan deze worden gereset naar de initiële toestand vanaf nul.
Testcode
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 bij groen of rood
int shortperiod = 700; // tijdsperiode bij het veranderen
int targetCount = shortperiod;
int count = 0;
void setup ()
{
PinMode (apin, invoer);
PinMode (bpin, invoer);
PinMode (knoppin, invoer);
PinMode (Redpin, output);
PinMode (geelpin, uitgang);
pinmode (greenpin, output);
}
void Loop ()
{
tel ++;
if (digitalread (buttonpin))
{
Setlights (hoog, hoog, hoog);
}
anders
{
int change = getencoDerturn ();
int newperiod = longperiod + (verandering * 1000);
if (newperiod> = 1000 && newperiod <= 10000)
{
longperiod = newperiod;
}
if (tel> targetCount)
{
setState ();
telling = 0;
}
}
vertraging (1);
}
int getencoDerturn ()
{
// retourneer -1, 0 of +1
statische int olda = laag;
statische int oldb = laag;
int resultaat = 0;
int newa = digitalread (apin);
int newb = digitalread (bpin);
if (newa! = olda || newb! = oldb)
{
// iets is veranderd
if (olda == low && newa == high)
{
resultaat = - (oldb * 2 - 1);
}
}
olda = newa;
Oldb = newb;
retourresultaat;
}
int setState ()
{
if (status == 0)
{
Setlights (hoog, laag, laag);
TargetCount = longperiod;
Staat = 1;
}
anders if (status == 1)
{
Setlights (hoog, hoog, laag);
TargetCount = shortperiod;
Staat = 2;
}
anders if (staat == 2)
{
Setlights (laag, laag, hoog);
TargetCount = longperiod;
Staat = 3;
}
anders if (staat == 3)
{
Setlights (laag, hoog, laag);
TargetCount = shortperiod;
Staat = 0;
}
}
void Setlights (int rood, int geel, int groen)
{
DigitalWrite (Redpin, Red);
DigitalWrite (Yellowpin, geel);
DigitalWrite (Greenpin, Green);
}