آموزش MSP430تکنولوژی

آموزش استفاده از Digital Read/Write در لانچ پد MP430GT

سلام. آموزش استفاده از Digital Read/Write در لانچ پد MP430GT را آماده کردیم.

این دومین آموزش از یک دنباله آموزشی است که در آن ما در حال یادگیری MSP430G2 LaunchPad با استفاده از Energia IDE هستیم. در قسمت قبلی آموزش ما به طور کامل با برنامه نویسی لانچ پد MSP430 با Energia آشنا شدیم. ما این آموزش را با طراحی یک پروژه کنترل چشمک زدن ال ای دی با دو دکمه ادامه میدهیم.

در این قسمت آموزش می آموزیم که چگونه از Digital Read و Digital Writ استفاده کنیم تا وضعیت یک دستگاه ورودی مثلا سوئیچ را بخوانیم و چندین خروجی مثل LED را کنترل کنیم. در پایان این آموزش می آموزید که با ورودی ها و خروجی های دیجیتال کار کنید که می تواند برای ارتباط با بسیاری از سنسورهای دیجیتال مانند سنسور مادون قرمز، سنسور PIR و … استفاده شود و همچنین برای روشن یا خاموش کردن خروجی هایی مانند LED ، Buzzer و … استفاده میشود.

فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

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

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

مدار پروژه کنترل ال ای دی با دکمه

در اینجا 8 ال ای دی خروجی و دو دکمه ورودی هستند. ما می توانیم اینها را به هر پین I / O روی صفحه وصل کنیم اما من ال ای دی ها را از پین P1.0 به P2.1 وصل کرده ام.

تمام پین های کاتدی LED به GND وصل شده و پین آند از طریق یک مقاومت به پین ​​های I / O متصل می شود. این مقاومت به عنوان مقاومت محدود کننده جریان نامیده می شود ، این مقاومت برای MSP430 اجباری نیست زیرا حداکثر جریان پین I / O تنها 6 میلی آمپر است و ولتاژ روی پین فقط 3.6 ولت است. با این حال این یک عمل خوب برای استفاده از آنها است. هنگامی که یکی از این پین های دیجیتالی High شود ، LED مربوطه روشن می شود. اگر آموزش قبلی را خوب خوانده باشید ، به یاد می آورید که digitalWrite (LED_pin_name، HIGH) باعث ایجاد روشنایی LED و digitalWrite (LED_pin_name، LOW) باعث خاموش شدن آن خواهد شد.

دکمه ها دستگاه ورودی هستند ، یک انتهای دکمه به GND و دیگری متصل به پین ​​های دیجیتال P2.3 و P2.4 است. این بدان معنی است که هر زمان که دکمه را فشار می دهیم ، پین (2.3 یا 2.4) به صورت GND قرار می گیرد.

قطعات مورد نیاز

  1. برد لانچ پد MSP430G2
  2. LED – هشد عدد
  3. دکمه – دو عدد
  4. مقاومت 1 کیلو اهم – هشت عدد
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

برنامه نویسی ال ای دی در لانچ پد MP430GT

در هنگام فشار دادن کلید 1 و در هنگام فشردن کلید 2 ، باید 8 ال ای دی را به صورت متوالی روشن کنیم و جهت آن را تغییر دهیم. کد کامل در انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.

مثل همیشه باید از عملکرد void setup () استفاده کنیم که در آن پین هایی را که ما استفاده می کنیم اعلام کنیم. در برنامه ما 8 پین LED خروجی و 2 کلید ورودی هستند. این 8 ال ای دی از P1.0 تا P2.1 وصل می شوند که پین ​​شماره 2 تا 9 در برد هستند. سپس کلید ها به پین ​​P2.3 و پین 2.4 وصل می شوند که به ترتیب پین شماره 11 و 12 هستند.

void setup() {
  for (int i = 2; i <= 9; i++) {
    pinMode(i, OUTPUT);
  }
  for (int i = 2; i <= 9; i++) {
    digitalWrite(i, LOW);
  }
  pinMode (11, INPUT_PULLUP);
  pinMode (12, INPUT_PULLUP);
}

همانطور که می دانیم عملکرد pinMode () پین را به عنوان خروجی یا ورودی اعلام می کند و عملکرد DigitalWrite () آن را High (روشن) یا Low (خاموش) می کند. ما از یک حلقه for استفاده کرده ایم تا تعداد خطوط را کاهش دهیم. متغیر “i” در حلقه از 2 به 9 افزایش می یابد و برای هر افزایش عملکردی اجرا می شود. چیز دیگری که ممکن است شما را سردرگم کند عبارت “INPUT_PULLUP” است. فقط با فراخوانی عملکرد pinMode (Pin_name، INPUT) می توان پین را به عنوان ورودی اعلام کرد ، اما در اینجا ما به جای INPUT از INPUT_PULLUP استفاده کرده ایم و این دو تفاوت قابل توجهی دارند.

هنگامی که ما از پین های میکروکنترلر استفاده می کنیم ، پین باید به Low یا High وصل شود. در این حالت پین 11 و 12 به کلید وصل می شوند که هنگام فشار دادن به GND وصل می شوند. اما هنگامی که کلید فشرده نشده است ، پین به هیچ چیز وصل نمی شود ، در این حالت پین شناور نامیده می شود و برای میکروکنترلرها بد است. بنابراین برای جلوگیری از این ، ما باید از یک مقاومت استفاده کنیم. در میکروکنترلر MSP430G2553 ، پینهای I / O دارای مقاومت داخلی هستند. بنابراین تمام کاری که ما باید انجام دهیم این است که دقیقا مانند آنچه در بالا انجام دادیم ، به جای INPUT از INPUT_PULLUP استفاده کنیم.

اولین قدم در برنامه ما این است که بررسی کنیم آیا کلید فشرده شده است و اگر فشرده شده است باید LED ها شروع به چشمک زدن کنند. برای بررسی اینکه دکمه را فشار داده اید از خط زیر استفاده می شود.

  if (digitalRead(12) == LOW)

در اینجا تابع جدید ، تابع digitalRead () است ، این عملکرد وضعیت پین دیجیتالی را می خواند و هنگامی که پین ​​مقداری ولتاژ دریافت می کند ، HIGH یا زیاد (1) خواهد بود و هنگامی که پین ولتاژی دریافت نکند ، Low یا کم (0) خواهد بود. در سخت افزار ما ، هنگامی که دکمه را فشار می دهیم ، پین به GND متصل میشود و در غیر اینصورت از آنجایی که از مقاومت استفاده می کنیم ، High خواهد بود. بنابراین ما از عبارت if برای بررسی فشردن دکمه استفاده می کنیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

پس از فشردن دکمه ، ما void loop و while (1) را برنامه ریزی میکنیم. این جایی است که ما شروع به چشمک زدن ال ای دی ها به صورت متوالی می کنیم. هر آنچه در حلقه نوشته شده است برای همیشه اجرا می شود.

whiel(1){
}

اگر یک کلید فشرده شود ، ما LED ها را در یک دنباله خاص چشمک زن میکنیم.

if (digitalRead(11) == LOW)
      {
       for (int i = 2; i <= 9; i++)
        {
         digitalWrite(i, HIGH);
         delay(100);
        }
          for (int i = 2; i <= 9; i++)
             digitalWrite(i, LOW);
      }

برای چشمک زدن چراغ LED به ترتیب ، ما دوباره از حلقه for استفاده می کنیم ، اما این بار با استفاده از عملکرد Delay (100) از یک تاخیر کوچک 100 میلی ثانیه استفاده می کنیم تا متوجه شویم که LED ها به ترتیب High میشوند. با فشردن یک کلید ال ای دی ها به ترتیب به طور مثال از چپ به راست روشن و خاموش میشوند. در صورت فشردن کلید دیگر، ال ای دی ها به ترتیب اما برعکس کلید قبل روشن و خاموش میشوند.

    else
      {
        for (int i = 9; i >= 2; i--)
        {
         digitalWrite(i, HIGH);
         delay(100);
        }
                  for (int i = 2; i <= 9; i++)
             digitalWrite(i, LOW);
      }

اگر دقت کنید متوجه میشوید که for تغییر یافته است. پیش از این ما LED ها را از شماره 2 و تا 9 روشن میکردیم. اما اکنون می خواهیم از عدد 9 تا 2 روشن كنیم.

کد کامل

کد کامل پروژه در باکس زیر آورده شده است.

void setup() {
  for (int i = 2; i <= 9; i++) {
    pinMode(i, OUTPUT);
  }
  for (int i = 2; i <= 9; i++) {
    digitalWrite(i, LOW);
  }  
  pinMode (11, INPUT_PULLUP);
  pinMode (12, INPUT_PULLUP);
}
void loop() {
  if (digitalRead(12) == LOW) 
 {
    while (1) 
    {  
      if (digitalRead(11) == LOW) 
      {
       for (int i = 2; i <= 9; i++) 
        {
         digitalWrite(i, HIGH);
         delay(100);
        }
          for (int i = 2; i <= 9; i++)
             digitalWrite(i, LOW);
      }
      else
      {
        for (int i = 9; i >= 2; i--) 
        {
         digitalWrite(i, HIGH);
         delay(100);
        }
                  for (int i = 2; i <= 9; i++)
             digitalWrite(i, LOW);
      }
    }
 }

پس از اتمام کار با سخت افزار ، کافی است برد MSP430 خود را به رایانه متصل کنید و Energia IDE را باز کنید و از برنامه ارائه شده استفاده کنید. اطمینان حاصل کنید که برد درست و پورت COM صحیح در Energia IDE انتخاب شده و سپس بر روی دکمه بارگذاری کلیک کنید. برنامه باید با موفقیت کامپایل شود و پس از بارگذاری ، “Done Compiling” نشان داده می شود.

حالا دکمه ها را فشار دهید و از رقص نوری که ساختید لذت ببرید !

قسمت بعد : آموزش راه اندازی ال سی دی کاراکتری با لانچ پد MSP430

5 (3 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *