آردوینو آموزش آردوینو

آموزش آردوینو بخش هفتم – توابع ورودی و خروجی digitalRead digitalWrite در برنامه نویسی آردوینو

arduino-basic-tutorial-part-seven-input-and-output-Function-digispark
نوشته شده توسط پریسا پوربلورچیان

روی برد آردوینو Arduino را نگاه کنید. یک سری از پایه ها با D و ردیف دیگر با A مشخص شده است. D به معنی پایه های دیجیتال و A به معنی پایه های آنالوگ است. در این آموزش تمامی پایه های دیجیتال و آنالوگ را کامل بررسی خواهیم کرد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


  خواندن وضعیت پین ورودی ()digitalRead


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

 توضیح دستور digitalRead

خواندن مقدار از یک پایه دیجیتال در هر دو حالت High و Low

 

 روش فراخوانی 

digitalRead(pin)

منظور از pin همان پایه های دیجیتال آردوینو است.

 

نمونه کد آردوینو برای digitalRead

int ledPin = 13;  // ال ای دی به پایه ۱۳ دیجیتال آردوینو وصل میشود.
int kilid = 7;    // یک کلید به پایه شماره ۷ دیجیتال آردوینو وصل میشود
int value = 0;      // انتخاب یک متغیر با نام دلخواه ذخیره مقادیر دریافتی از پایه دیجیتال آردوینو

void setup() {
  pinMode(ledPin, OUTPUT);  // انتخاب پایه شماره ۱۳ در نقش خروجی
  pinMode(kilid, INPUT);    // انتخاب پایه شماره ۷ در نقش ورودی
}

void loop() {
  value = digitalRead(kilid);   // خواندن مقادیر از پایه ورودی
  digitalWrite(ledPin, value);  // تنظیم ال ای دی برای مقادیر دریافتی از متغیر val
}

 

ورودی های برد آردوینو آموزش برنامه نویسی Arduino - دیجی اسپارک

 


 رایت وضعیت پین خروجی ()digitalWrite


در digitalWrite دستوراتی که در متغیر برنامه ذخیره شده است را رایت و اجرا می‌کند. در خروجی دیجیتال فقط دو مقدار صفر و یک داریم که با LOW, HIGH در برنامه نویسی از یکدیگر تفکیک می‌شود. اگر پایه دیجیتال به عنوان خروجی تعریف شده باشد، ولتاژ ۵ ولت برای HIGH و ۳٫۳ ولت HIGH و ولتاژ صفر ولت برای LOW تعریف می‌شود. اگر پایه دیجیتال به عنوان ورودی تعریف شده باشد، دستور digitalWrite ورودی را به صورت HIGH و LOW تعریف می‌کند.

 

روش فراخوانی

digitalWrite(pin, value)

منظور از پین پایه دیجیتال آردوینو و منظور از value مقدار high , low است

 

 نمونه کد آردوینو برای ()digitalWrite

void setup() {
  pinMode(13, OUTPUT);    // انتخاب پایه شماره ۱۳ به عنوان خروجی
}

void loop() {
  digitalWrite(13, HIGH); // پایه دیجیتال فعال high تنظیم میشود
  delay(1000);            // تاخیر به مدت یک ثانیه
  digitalWrite(13, LOW);  // پایه دیجیتال غیرفعال low تنظیم میشود.
  delay(1000);            // تاخیر به مدت یک ثانیه
}

 

روش اتصال ورودی خروجی به برد آردوینو آموزش مقدماتی Arduino - دیجی اسپارک

 


 مشخص کردن وضعیت ورودی و خروجی پایه ها ()pinMode


دستور pinMode وضعیت پایه را مشخص می‌کند. وضعیت یعنی مشخص کردن ورودی و خروجی پایه که در برنامه با INPUT , OUTPUT مشخص می‌شود. در هر برنامه ای که برای آردوینو مینویسیم، در ابتدا بایستی وضعیت پایه / پین ها را مشخض کنیم. به عنوان مثال برای ساخت یک چراغ مطالعه یک کلید شاسی و یک ال ای دی باید مشخص کنیم کدام ورودی و کدام خروجی است.

 

روش فراخوانی

pinMode(pin, mode)

منظور از پین همان پایه دیجیتال آردوینو است و منظور از مد مشخص کردن ورودی و خروجی INPUT, OUTPUT است.

 

نمونه کد آردوینو برای pinMode

void setup() {
  pinMode(13, OUTPUT);    // انتخاب پایه شماره ۱۳ به عنوان خروجی
}

void loop() {
  digitalWrite(13, HIGH); // پایه دیجیتال فعال high تنظیم میشود
  delay(1000);            // تاخیر به مدت یک ثانیه
  digitalWrite(13, LOW);  // پایه دیجیتال غیرفعال low تنظیم میشود.
  delay(1000);            // تاخیر به مدت یک ثانیه
}

 


 خواندن ورودی آنالوگ پین ها()analogRead


توسط پایه های آنالوگ در نقش ورودی میتوانیم مقادیر دریافتی از پایه را بخوانیم. برد آردوینو از یک مبدل ۱۰ بیتی آنالوگ به دیجیتال بهره می‌برد که چند کاناله است! به این معنی که میتوانید ولتاژ ورودی را بین ۰ تا ولتاژ انتخاب شده که ۳ تا ۵ ولت است، نگاشت کنید و سپس مقادیر را در بازه ۰ تا ۱۰۲۳ در مبدل ۱۰ بیتی تغییر دهید.

شناخت پایه های آنالوگ برد آردوینو رزلوشن ولتاژ - دیجی اسپارک

 

روش فراخوانی

analogRead(pin)

منظور از پین پایه آنالوگ آردوینو است.

 

نمونه کد آردوینو analogRead

int analogPin = A3; // انتخاب پایه a3 برای ورودی که به آنالوگ متصل است
                   
int value = 0;  // انتخاب یک متغیر برای ذخیره مقادیر دریافتی از پایه آنالوگ

void setup() {
  Serial.begin(9600);           //  انتخاب بادریت
}

void loop() {
  val = analogRead(analogPin);  // خواندن مقادیر از پایه ورودی
  Serial.println(val);          // نمایش مقادیر
}

 

مدیریت پایه های ورودی و خروجی برد آردوینو - دیجی اسپارک

 

 


 رایت پین pwm ()analogWrite


مقدار آنالوگ را بر روی یک پایه از آردوینو رایت می‌کند. این مقدار میتواند به صورت PWM باشد. برای استفاده از دستور analogwrite به پایه های pwm نیاز داریم و میتوانیم شدت نور ال ای دی، سرعت موتور و یا کنترلر سرو موتور را بر عهده بگیریم. در این خصوص یک جدول کامل برای پایه های pwm مجاز در هر آردوینو نوشته شده است. فرکانس هر پایه pwm نوشته شده است.

فرکانس های PWM پایه های بردهای آردوینو - دیجی اسپارک

 

 روش فراخوانی 

analogWrite(pin, value)

 منظور از پین همان پایه های pwm آردوینو است و value همان دیوتی سایکل در pwm است که بین ۰ تا ۲۵۵ است.

 

نمونه کد آردوینو برای analogWrite

int ledPin = 9;      // ال ای دی به پایه شماره ۹ وصل شده است.
int analogPin = 3;   // پتانسیومتر به پایه شماره ۳ آنالوگ متصل است
int val = 0;         //انتخاب یک متغیر برای ذخیره مقادیر دریافتی

void setup() {
  pinMode(ledPin, OUTPUT);  // انتخاب ال ای دی به عنوان خروجی
}

void loop() {
  val = analogRead(analogPin);  // خواندن مقادیر از پایه ورودی
  analogWrite(ledPin, val / 4); 

  // مقادیر Analogread از ۰ تا ۱۰۲۳ تغییر کرده  و سپس توسط دستور analogwrite بین ۰ تا ۲۵۵ رایت میشود.
}

 

دیوتی سایکل در بردهای آردوینو - دیجی اسپارک

 


جمع بندی


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

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

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

۳۰ دیدگاه

  • سلام
    خیلی مفید بود.
    به زیبایی توضیح دادین.
    از شما تشکر می کنم.

    • با سلام
      خیر در صورت استفاده از ماهیت pwm در کد برنامه برای رایت شدن داده های pwm از تابع analogWrite برای تبدیل داده آنالوگ به دیجیتال استفاده می‌کنیم

    • با سلام
      حیر این موضوع بسته به ADC داخلی هر برد دارد که در جدول در متن آموزش نوشته شده است.

    • با سلام
      در صورتیکه بخواهیم شدت نور و یا کنترل دور موتور را محاسبه کنیم و بخواهیم مدت زمان on و مدت زمان off بودن مشخص باشد، از pwm برای تبدیل داده ورودی آنالوگ به خروجی دیحیتال استفاده می‌کنیم. در این خصوص آموزش کامل زیر را مطالعه کنید.
      pwm در آردوینو

  • سلام من در حال تست یک کد برای موتور هستم و وقتی از digitalwrite استفاده میکنمم سرعت موتور بسیار سریع است و کم و زیاد نمی‌شود . لطفا راهنمایی کنید.

    • با سلام
      کاربر گرامی در نظر داشته باشید برای تغییر سرعت در موتور نیاز به pwm دارید که فقط بایستی از پایه های pwm در برد استفاده کنید. در صورت استفاده از pwm هم بایستی از analogWrite استفاده کنید.
      آموزش زیر را مطالعه کنید.
      آموزش pwm در آردوینو

    • با سلام
      دقت داشته باشید ورودی آنالوگ و بین بازه ۰ تا ۱۰۲۴ است و برای خروجی بایستی به بازه دیجیتال ۰ تا ۲۵۵ برسد. برای کاهش نویز و بالارفتن دقت در برنامه عدد ۱۰۲۴ را بر ۲۵۵ تقسیم می‌کنیم تا بازه شکسته شود و سپس رنج دقیقتری خواهیم داشت.

  • سلام خانم مهندس بزرگوار
    واقعا بزرگوارید این همه معلوماتتان در اختیار همه ی عزیزان قرار میدهی از شما خیلی خیلی ممنونم
    منم یه سوالی دارم که خروجی یکی از پین های میکروکنترلر مگا ۳۲ که سیگنال یا پالس هست بدم ماژول ESP8266 ESP01 و همون سیگنال یا پالس روبدون تغییر در گوشی اندروید توسط نرم‌افزار مربوطه دریافت کنم خواهش میکنم راهنمایی بفرمایید که چکار کنم ویا کدوم آموزش رو برام پیشنهاد میفرمایید و اگر شما زحمت برنامه‌نویسی رو بکشید هزینه رو تقدیم میکنم با سپاس فراوان

    • با سلام
      PWM مخفف عبارت “عرض پالس متوسط” (Pulse Width Modulation) است. در اصطلاحات الکترونیک، PWM یک روش استفاده می‌شود که با تغییر عرض پالس یک سیگنال دیجیتال، امکان کنترل قدرت و میزان انتقال انرژی را فراهم می‌کند.در یک سیگنال PWM، دوره زمانی سیگنال به دو بخش تقسیم می‌شود: عرض پالس فعال و عرض پالس غیرفعال. عرض پالس فعال نسبتی از دوره است که سیگنال بالا (عالی) است، و عرض پالس غیرفعال نسبتی از دوره است که سیگنال پایین (پایین) است. نسبت بین عرض پالس فعال و غیرفعال سیگنال PWM می‌تواند تغییر کند و با تغییر این نسبت، میزان قدرت یا انرژی منتقل شده توسط سیگنال PWM قابل تنظیم است.