Breakout رمزگذار روتاری 360 درجه PWM
Breakout رمزگذار روتاری 360 درجه PWM
شرح
این نوع کلید یک رمزگذار چرخشی افزایشی است. در حقیقت ، به دلیل کم هزینه بودن و توانایی ارائه سیگنالهایی که به راحتی تفسیر می شوند و اطلاعات مربوط به حرکت مانند سرعت را ارائه می دهند ، بیشترین کاربرد را در بین رمزگذاران دوار دارد.
با چرخش ، رمزگذار چرخشی می تواند فرکانس پالس خروجی را در جهت مثبت و معکوس هنگام چرخش ، بر خلاف شمارنده پتانسیومتر چرخشی بدون محدودیت شمارش ، بشمارد. با استفاده از دکمه رمزگذار چرخشی ، می توان از صفر به حالت اولیه خود بازگرداند.
کد تست کردن
int redPin = 2؛
int yellowPin = 3 ؛
int greenPin = 4 ؛
int aPin = 6 ؛
int bPin = 7؛
int buttonPin = 5؛
حالت int = 0؛
int longPeriod = 5000 ؛ // زمان در سبز یا قرمز است
int shortPeriod = 700؛ // دوره زمانی هنگام تغییر
int targetCount = shortPeriod؛
تعداد int = 0؛
تنظیم باطل ()
{
pinMode (aPin ، INPUT) ؛
pinMode (bPin ، INPUT) ؛
pinMode (دکمه پین ، ورودی) ؛
pinMode (redPin ، OUTPUT) ؛
pinMode (زرد پین ، خروجی) ؛
pinMode (greenPin ، OUTPUT) ؛
}
حلقه باطل ()
{
تعداد ++؛
if (digitalRead (buttonPin))
{
setLights (HIGH ، HIGH ، HIGH) ؛
}
دیگر
{
int change = getEncoderTurn ()؛
int newPeriod = longPeriod + (تغییر * 1000)؛
if (newPeriod> = 1000 && newPeriod <= 10000)
{
longPeriod = newPeriod؛
}
if (شمارش> targetCount)
{
setState ()؛
تعداد = 0؛
}
}
تأخیر (1)
}
int getEncoderTurn ()
{
// بازگشت -1 ، 0 یا 1+
static int oldA = کم ؛
static int oldB = کم ؛
نتیجه int = 0؛
int newA = digitalRead (aPin) ؛
int newB = digitalRead (bPin) ؛
if (newA! = oldA || newB! = oldB)
{
// چیزی تغییر کرده است
if (oldA == کم && newA == HIGH)
{
نتیجه = - (oldB * 2 - 1) ؛
}
}
oldA = newA ؛
oldB = newB ؛
نتیجه بازگشت؛
}
int setState ()
{
if (حالت == 0)
{
setLights (بالا ، پایین ، کم)؛
targetCount = longPeriod؛
حالت = 1؛
}
در غیر این صورت (حالت == 1)
{
setLights (بالا ، بالا ، پایین) ؛
targetCount = shortPeriod؛
حالت = 2؛
}
در غیر این صورت (حالت == 2)
{
setLights (کم ، کم ، زیاد) ؛
targetCount = longPeriod؛
حالت = 3؛
}
در غیر این صورت (حالت == 3)
{
setLights (کم ، زیاد ، کم)؛
targetCount = shortPeriod؛
حالت = 0؛
}
}
void setLights (int قرمز ، int زرد ، int سبز)
{
digitalWrite (redPin ، قرمز) ؛
digitalWrite (زرد پین ، زرد) ؛
digitalWrite (سبز پین ، سبز) ؛
}