آموزش آردوینو مدارهای الکترونیک پروژه های آردوینو

آموزش کار با keypad آردوینو بخش اول

نوشته شده توسط علیرضا قربانی

در پروژه های DIY کنترل درب به صورت اتوماتیک بسیار پرطرفدار است. در این خصوص روش های متفاوتی برای طراحی سیستم درب باز کن وجود دارد. یکی از این روش ها استفاده از کیپدهای ماتریسی است. کیپد ها دارای دو نوع فلت و معمولی و با ابعاد و کلیدهای متفاوتی هستند. در این آموزش به معرفی کیپد و نحوه‌ی استفاده از آن خواهیم پرداخت. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسیدیجی اسپارک همراه باشید.

آموزش کار با کیپد آردوینو بخش اول

کیپد فلت

آموزش کار با Arduino keypad

کیپد معمولی

 

کیپد Keypad

کیپد مجموعه از تاچ سوئیچ ها می‌باشند که به صورت سطری ،ستونی; به طوری که تشکیل یک ماتریس دهند در کنار یک دیگر قرار گرفته اند. برای راه اندازی کیپد Keypad روش‌های زیادی وجود دارد که در این آموزش به شرح یکی از روش‌های ساده می‌پردازیم و در قسمت‌های بعدی روش‌های بهینه تری را آموزش می‌دهیم.

اتصالات

نمایی کلی از عملیاتی که باید انجام شود :

در روشی که در این پست قصد داریم به آموزش آن بپردازیم کیپد را همانند تصویر زیر به آردوینو متصل می‌کنیم.

آموزش جامع کار با کی پد آردوینو

سپس پین‌های شماره ۱ ، ۲ ، ۳ و ۴ را در وضعیت ورودی و  Pull Up قرار می‌دهیم.بعد از ین پین‌های A , B ,C , D را خروجی می‌کنیم و در وضعیت ۱ منطقی قرار می‌دهیم. سپس مقدار LOW را میان پین‌های A , B  ,C , D شیفت می‌دهیم . یعنی همانند حالات زیر عمل می‌کنیم.


مراحل شیفت دهی 


مرحله اول:

A = LOW

B = HIGH

C = HIGH

D = HIGH

مرحله دوم:

A = HIGH

B = LOW

C = HIGH

D = HIGH

مرحله سوم :

A = HIGH

B = HIGH

C = LOW

D = HIGH

مرحله چهارم:

A = HIGH

B = HIGH

C = HIGH

D = LOW

و به همین ترتیب مراحل بالا را از مرحله یک به چهار انجام می‎دهیم و منتظر می‌شویم که کلیدی فشرده شود. اگر کلیدی فشرده شد یکی از ستون ها در وضعیت LOW قرار می‌گیرد و ما با داشتن شماره سطر و شماره ستون می‌توانیم کلید فشرده شده را تشخیص دهیم.

#include <Bounce2.h>
#include <LiquidCrystal.h>
//تنظیم پایه های ال سی دی
LiquidCrystal lcd(22, 23, 24, 25, 26, 27, 28);





#define c0 digitalRead(6)
#define c1 digitalRead(7)
#define c2 digitalRead(8)
#define c3 digitalRead(9)

//نمایی کلی از کاراکت های کیپد را به صورت آرایه در می آوریم

char layout[16] = {'1' , '2' , '3' , 'A',
                   '۴' , '۵' , '۶' , 'B',
                   '۷' , '۸' , '۹' , 'C',
                   '*' , '۰' , '#' , 'D'
                  };

//آرایه بالایی با آرایه پایینی دارای یک مقدار می باشد و تفاوتی ندار از کدام یک استفاده کنیم

                  /*
                    char layout[16] = {'1' , '2' , '3' , 'A','4' , '5' , '6' , 'B','7' , '8' , '9' , 'C','*' , '0' , '#' , 'D'};
                   */

//پین های مربوط به سطرها را در یک آرایه ذخیره میکنیم
int rows[4] = {2, 3, 4, 5};
//پین های مربوط به ستون ها را درون یک آرایه ذخیره میکنیم
int cols[4] = {6, 7, 8};
void setup()
{
  lcd.begin(16, 2);
  lcd.print("digispark.ir");
  Serial.begin(9600);


  //تعریف کردن ستون ها به صورت ورودی و در وضعیت پول آپ که به ستون های کیپد متصل می شوند
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);


  ///تعریف  پین هایی که به سطر های کیپد متصل می شند
  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH);
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH);
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}

void loop()
{
  keyPad();
}
void keyPad()
{

  int col = -1;
  int row = 0;
  int pos = -1;
  // به وسیله ی حلقه ی زیر عملیات شیف دادن را انجام می دهیم
  for (int row = 0; row <= 5 ; row++)
  {
    digitalWrite(rows[(row)], LOW);
    if (!c0)
    {
      col = 0;
    }
    else if (!c1)
    {
      col = 1;
    }
    else if (!c2)
    {
      col = 2;
    }
    else if (!c3)
    {
      col = 3;
    }
    if (col != -1)
    {
      pos = row  * 4 + col ;
      char c = layout[pos];

      if (c == '#')
      {
        lcd.clear();
      }
      else if (c == '*')
      {
        lcd.clear();
        lcd.print("digispark.ir");
      }
      else
      {
        lcd.print(c);
      }
      col = -1;
    }
    while (!c0)
    {
      ;
    }
    while (!c1)
    {
      ;
    }
    while (!c2)
    {
      ;
    }
    while (!c3)
    {
      ;
    }
    digitalWrite(rows[(row - 1 )], HIGH);
  }
}

در پروژه‌ی بالا هنگامی که دستتان را بر روی کلید نگه دارید متوجه می‌شوید که برنامه متوقف می‌شود و تا زمانی که دستتان را از روی لید برنداشته باشید برنامه در توقف می‌باشد.


دانلود شبیه ساز و کد پروژه


در این قسمت شبیه ساز پروزه به همراه کد آن قرار گرفته شده است. بر روی لینک زیر کلیک کرده و دانلود نمایید.

دانلود شبیه ساز و کدها‌ی این پروژه

وسایل مورد نیاز

برد آردوینو Arduino

کیپد فلت ۴*۴ ماتریسی

 

 

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

 

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

درباره نویسنده

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۵ دیدگاه

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

    • با سلام
      ضمن تشکر از توجه شما، اگر منظورتات از یکبار عدد گرفتن این است که با فشردن کیپد چندبار عدد ارسال می‌شود، بایستی از آموزش دیبانسینگ استفاده کنید. ولی اگر میخواهید با یکبار فشردن کیپد لوپ برنامه اجرا شود، باید آرگومان مربوطه را در لوپ قرار دهید. چیزی شبیه به کد زیر:

      void loop() {
      char keypress = key.getKey();
      while (keypress != NO_KEY){
      if (keypress == ‘X’){

  • سلام ببخشید من می خواستم یک عدد از کیپد بگیرم و اون رو به عنوان دمای مورد نظرم قرار بدم و بهوسیله tec او نو به دمای مورد نظر برسونم میشه درمورد قسمتی که عدد رو میگیره یه راهنمایی بکنید ممنون

  • ببخشید من می خواستم به وسیله کیپد یک عدد بدم اونوقت این عدد رو به عنوان متغیر تعریف کنم لطفا راهنمایی کنید

  • با سلام
    خط ۷۱ درست است؟ rows یک آرایه ۴ تایی است در حالی که آرگومان آن(row) از مقدار ۰ تا ۵ تغییر می کند!
    چند جای دیگر کد هم ایراد دارد.

    • با سلام
      کاربر گرامی اگر اروری در کد دریافت می‌کنید، ضمیمه کنید تا بررسی شود.