360 Derece PWM Döner Kodlayıcı Koparma
360 Derece PWM Döner Kodlayıcı Koparma
Açıklama
Bu tür anahtar, artımlı döner kodlayıcıdır. Nitekim, düşük maliyeti ve hız gibi hareketle ilgili bilgileri sağlamak için kolayca yorumlanabilecek sinyaller sağlama yeteneği nedeniyle tüm döner kodlayıcılar arasında en yaygın olarak kullanılan kaynaktır.
Döner kodlayıcı döner darbe frekansını, sayma sınırlaması olmaksızın döner potansiyometre sayAcının aksine, dönüş sırasında pozitif ve ters yönde sayabilir. Döner kodlayıcıüzerindeki düğme ile sıfırlanabilir ve sıfırlanabilir.
Test kodu
int redPin = 2;
int yellowPin = 3;
int greenPin = 4;
int aPin = 6;
int bPin = 7;
int buttonPin = 5;
int durum = 0;
int longPeriod = 5000; Yeşil veya kırmızı da zaman
int kısaDönem = 700; Değiştirirken zaman dilimi
int targetCount = kısaDönem;
int sayısı = 0;
void kurulum()
{
pinMode(aPin, INPUT);
pinMode(bPin, INPUT);
pinMode(buttonPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
}
void döngü()
{
count++;
if (digitalRead(buttonPin))
{
setLights (YÜKSEK, YÜKSEK, YÜKSEK);
}
Başka
{
int change = getEncoderTurn();
int newPeriod = longPeriod + (değişim * 1000);
if (newPeriod >= 1000 & newPeriod <= 10000)
{
longPeriod = newPeriod;
}
if (hedefSayısı > say)
{
setState();
sayım = 0;
}
}
gecikme(1);
}
int getEncoderTurn()
{
return -1, 0 veya +1
statik int oldA = DÜŞÜK;
statik int oldB = DÜŞÜK;
int sonuç = 0;
int newA = digitalRead(aPin);
int newB = digitalRead(bPin);
if (newA != oldA || newB != oldB)
{
bir şey değişti
if (oldA == LOW & newA == HIGH)
{
sonuç = -(oldB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
dönüş sonucu;
}
int setState()
{
if (durum == 0)
{
setLights (YÜKSEK, DÜŞÜK, DÜŞÜK);
targetCount = longPeriod;
durum = 1;
}
else if (durum == 1)
{
setLights (YÜKSEK, YÜKSEK, DÜŞÜK);
targetCount = kısaDönem;
durum = 2;
}
else if (durum == 2)
{
setLights (DÜŞÜK, DÜŞÜK, YÜKSEK);
targetCount = longPeriod;
durum = 3;
}
else if (durum == 3)
{
setLights (LOW, HIGH, LOW);
targetCount = kısaDönem;
durum = 0;
}
}
void setLights(int kırmızı, int sarı, int yeşil)
{
digitalWrite(redPin, kırmızı);
digitalWrite(yellowPin, sarı);
digitalWrite(greenPin, yeşil);
}