در مدارات الکترونیکی که کاربر می تواند مستقیما مقادیر را تنظیم کند از ابزار های مختلفی برای تعامل کاربر با مدار استفاده می شود . مانند نمایشگر ها تاچ ، کلید ها ، جوی استیک و… . یکی از این ابزار ها روتاری انکودر ها می باشد . روتاری انکودر ها در قالب ولوم های هرزگردی هستند که کاربر با چرخاندن آن به راست و چپ می تواند گیزنه های مختلف همچون گزینه های یک منو را انتخاب کند . یک روتاری انکودر علاوه بر قابلیت چرخش به دو سمت ، دارای یک کلید فشاری نیز هست که با فشردن آن فعال می شود . می توانید از حرکت چرخشی روتاری انکودر برای حرکت بین تنظیمات مختلف یک منو استفاده کنید و با فشار دادن روتاری گزینه مورد نظر باز شود . استفاده از روتاری انکودر در پروژه ها علاوه بر کاهش تعداد کلید های فشاری ، تعامل کاربر با سیستم را بسیار راحت تر می کند .

در شکل زیر سیگنال خروجی روتاری انکودر در دو جهت مختلف نشان داده شده است :

 

 

سیگنال خروجی روتاری انکودر در چرخش ساعت گرد و پاد ساعت گرد دارای اختلاف فاز 90 درجه است که از این خاصیت برای تشخیصجهت چرخش استفاده می شود .

 

در این آموژش از ماژول روتاری انکودر استفاده خواهیم کرد . این ماژول دارای 5 پایه به صورت زیر است :

شماتیک اتصال ماژول روتاری انکودر به آردوینو :

 

برنامه راه اندازی با آردوینو :

const int clkPin= 2; //the clk attach to pin2
const int dtPin= 3; //the dt attach to pin3
const int swPin= 4 ;//the number of the button
int encoderVal = 0;

void setup()
{ 
  //set clkPin,dePin,swPin as INPUT
  pinMode(clkPin, INPUT);
  pinMode(dtPin, INPUT);
  pinMode(swPin, INPUT);
  digitalWrite(swPin, HIGH);
  Serial.begin(9600); // initialize serial communications at 9600 bps
}

void loop()
{
  int change = getEncoderTurn();
  encoderVal = encoderVal + change;
  if(digitalRead(swPin) == LOW)//if button pull down
  {
    encoderVal = 0;
  }
  Serial.println(encoderVal); //print the encoderVal on the serial monitor
}

int getEncoderTurn(void)
{
  static int oldA = HIGH; //set the oldA as HIGH
  static int oldB = HIGH; //set the oldB as HIGH
  int result = 0;
  int newA = digitalRead(dtPin);//read the value of clkPin to newA
  int newB = digitalRead(clkPin);//read the value of dtPin to newB
  if (newA != oldA || newB != oldB) //if the value of clkPin or the dtPin has changed
  {
    // something has changed
    if (oldA == HIGH && newA == LOW)
    {
      result = (oldB * 2 - 1);
    }
  }
  oldA = newA;
  oldB = newB;
  return result;
}

پس از اتصال مازول روتاری انکودر به آردوینو و پروگرام کردن آن ، وارد محیط Serial monitor آردوینو شوید .

Tags:
About Author: USER_4