Bộ mã hóa quay PWM 360 độ PWM
Bộ mã hóa quay PWM 360 độ PWM
Sự miêu tả
Loại công tắc này là một bộ mã hóa quay gia tăng. Như một vấn đề thực tế, nó được sử dụng rộng rãi nhất trong tất cả các bộ mã hóa quay do chi phí và khả năng cung cấp các tín hiệu có thể dễ dàng giải thích để cung cấp thông tin liên quan đến chuyển động như vận tốc.
Bằng cách xoay, bộ mã hóa quay có thể đếm tần số xung đầu ra theo hướng dương và ngược trong quá trình xoay, không giống như bộ đếm chiết áp quay mà không tính giới hạn. Với nút trên bộ mã hóa quay, nó có thể được đặt lại về trạng thái ban đầu của nó bắt đầu từ 0.
Mã kiểm tra
int redpin = 2;
int Yellowpin = 3;
int Greenpin = 4;
int apin = 6;
int bpin = 7;
Nút int = 5;
int state = 0;
int longperiod = 5000; // Thời gian ở màu xanh lá cây hoặc màu đỏ
int shortiod = 700; // Khoảng thời gian khi thay đổi
int targetCount = shortPeriod;
int đếm = 0;
Void Setup ()
{
pinmode (apin, đầu vào);
Pinmode (BPIN, đầu vào);
PinMode (nútpin, đầu vào);
Pinmode (redpin, đầu ra);
Pinmode (Yellowpin, đầu ra);
Pinmode (Greenpin, đầu ra);
}
Vòng lặp void ()
{
Đếm ++;
if (DigitalRead (NútPin))
{
Setlight (cao, cao, cao);
}
khác
{
int thay đổi = getEncoderturn ();
int newperiod = longperiod + (thay đổi * 1000);
if (newperiod> = 1000 && newperiod <= 10000)
{
longperiod = newperiod;
}
if (đếm> targetcount)
{
setState ();
Đếm = 0;
}
}
độ trễ (1);
}
int getencoderturn ()
{
// Trả về -1, 0 hoặc +1
tĩnh int olda = thấp;
int int oldb = thấp;
int result = 0;
int newa = DigitalRead (Apin);
int newb = DigitalRead (BPIN);
if (newa! = olda || newb! = oldb)
{
// có gì đó đã thay đổi
if (olda == low && newa == cao)
{
kết quả = - (oldb * 2 - 1);
}
}
Olda = newa;
oldb = newb;
kết quả trả lại;
}
int setState ()
{
if (state == 0)
{
Setlight (cao, thấp, thấp);
targetCount = longperiod;
trạng thái = 1;
}
khác nếu (trạng thái == 1)
{
Setlight (cao, cao, thấp);
TargetCount = ShortPeriod;
trạng thái = 2;
}
khác nếu (trạng thái == 2)
{
Setlight (thấp, thấp, cao);
targetCount = longperiod;
trạng thái = 3;
}
khác nếu (trạng thái == 3)
{
Setlight (thấp, cao, thấp);
TargetCount = ShortPeriod;
trạng thái = 0;
}
}
void setlights (int đỏ, int màu vàng, màu xanh lá cây)
{
DigitalWrite (Redpin, Red);
DigitalWrite (Yellowpin, Yellow);
DigitalWrite (Greenpin, Green);
}