روی برد آردوینو 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 }
رایت وضعیت پین خروجی ()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); // تاخیر به مدت یک ثانیه }
مشخص کردن وضعیت ورودی و خروجی پایه ها ()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 نوشته شده است.
روش فراخوانی
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 بین ۰ تا ۲۵۵ رایت میشود. }
جمع بندی
بدون شک مهمترین بخش از یادگیری آردوینو، تعریف ورودی و خروجی است. در هر پروژه قطعا ما با یک سنسور ورودی و یک سنسور خروجی کار میکنیم که وضعیت اولیه و تشخیص آن بسیار مهم است. در این آموزش روش فراخوانی دستورات ورودی و خروجی را بررسی کردیم و نمونه کد آردوینو برای تست برنامه در هر بخش قرار گرفته شده است.
خیلی مفید بود.
به زیبایی توضیح دادین.
از شما تشکر می کنم.
با سلام
سپاس از همراهی شما
سلام
خیلی مفید بود.
به زیبایی توضیح دادین.
از شما تشکر می کنم.
سلام
سپاس از همراهی شما
با سلام
analogread همان pwm است؟
با سلام
خیر در صورت استفاده از ماهیت pwm در کد برنامه برای رایت شدن داده های pwm از تابع analogWrite برای تبدیل داده آنالوگ به دیجیتال استفاده میکنیم
تمامی آردوینو ها بازه ی آنالوگ ۰ تا ۱۰۲۴ دارن؟
با سلام
حیر این موضوع بسته به ADC داخلی هر برد دارد که در جدول در متن آموزش نوشته شده است.
سلام
لطلفا در خصوص pwm و دلیل استفاده از analogwrite توضیح دهید
با سلام
در صورتیکه بخواهیم شدت نور و یا کنترل دور موتور را محاسبه کنیم و بخواهیم مدت زمان on و مدت زمان off بودن مشخص باشد، از pwm برای تبدیل داده ورودی آنالوگ به خروجی دیحیتال استفاده میکنیم. در این خصوص آموزش کامل زیر را مطالعه کنید.
pwm در آردوینو
سلام
چطور میتونم برای تغییر نور لامپ و تغییر ولتاژ دیتا بگیرم؟
با سلام
برای اینکار بایستی از Analogwrite و pwm استفاده کنید.
تابع digitalread برای چه سنسورهایی قابل استفاده است؟
با سلام
برای تمامی سنسورهای دیجیتال Digital قابل استفاده است.
سلام آیا این آموزش با برد Esp8266 هم سازگاری دارد؟
با سلام
بله تفاوتی ندارد.
سلام من در حال تست یک کد برای موتور هستم و وقتی از digitalwrite استفاده میکنمم سرعت موتور بسیار سریع است و کم و زیاد نمیشود . لطفا راهنمایی کنید.
با سلام
کاربر گرامی در نظر داشته باشید برای تغییر سرعت در موتور نیاز به pwm دارید که فقط بایستی از پایه های pwm در برد استفاده کنید. در صورت استفاده از pwm هم بایستی از analogWrite استفاده کنید.
آموزش زیر را مطالعه کنید.
آموزش pwm در آردوینو
در کد برنامه آنالوگ یک تقسیم بر چهار انجام دادید، آیا دلیلش رو میگید؟
با سلام
دقت داشته باشید ورودی آنالوگ و بین بازه ۰ تا ۱۰۲۴ است و برای خروجی بایستی به بازه دیجیتال ۰ تا ۲۵۵ برسد. برای کاهش نویز و بالارفتن دقت در برنامه عدد ۱۰۲۴ را بر ۲۵۵ تقسیم میکنیم تا بازه شکسته شود و سپس رنج دقیقتری خواهیم داشت.
سلام
برای pwm از چه پایه های استفاده کنیم
با سلام
پای های PWM با علامت بی نهایت بر روی برد مشخص شده است مانند ۳ ۶ ۹ ۱۰ ۱۱
سلام
برای آنالوگ میشه از pwm برای مثال که زدید هم استفاده کرد؟
با سلام
بله هیچ تفاوتی ندارد.
کامل و دقیق
با سلام
کاربر گرامی سپاس از همراهی شما
امیدوارم مفید واقع شده باشد.
سلام خانم مهندس بزرگوار
واقعا بزرگوارید این همه معلوماتتان در اختیار همه ی عزیزان قرار میدهی از شما خیلی خیلی ممنونم
منم یه سوالی دارم که خروجی یکی از پین های میکروکنترلر مگا ۳۲ که سیگنال یا پالس هست بدم ماژول ESP8266 ESP01 و همون سیگنال یا پالس روبدون تغییر در گوشی اندروید توسط نرمافزار مربوطه دریافت کنم خواهش میکنم راهنمایی بفرمایید که چکار کنم ویا کدوم آموزش رو برام پیشنهاد میفرمایید و اگر شما زحمت برنامهنویسی رو بکشید هزینه رو تقدیم میکنم با سپاس فراوان
با سلام
سپاس از همراهی شما
امکان اجرای پروژه نیست.
سلام/
مهندس منظور از pwm چیه
با سلام
PWM مخفف عبارت “عرض پالس متوسط” (Pulse Width Modulation) است. در اصطلاحات الکترونیک، PWM یک روش استفاده میشود که با تغییر عرض پالس یک سیگنال دیجیتال، امکان کنترل قدرت و میزان انتقال انرژی را فراهم میکند.در یک سیگنال PWM، دوره زمانی سیگنال به دو بخش تقسیم میشود: عرض پالس فعال و عرض پالس غیرفعال. عرض پالس فعال نسبتی از دوره است که سیگنال بالا (عالی) است، و عرض پالس غیرفعال نسبتی از دوره است که سیگنال پایین (پایین) است. نسبت بین عرض پالس فعال و غیرفعال سیگنال PWM میتواند تغییر کند و با تغییر این نسبت، میزان قدرت یا انرژی منتقل شده توسط سیگنال PWM قابل تنظیم است.
با سلام و تشکر از آموزشتون، امکانش هست از تغذیه جداگانه برای روشن کردن ال ای دی استفاده کنیم؟
با سلام
اگر ال ای دیها زیاد باشند و جریانی بیشتر از جریان قابل تامین برد نیاز داشته باشند، بایستی حتما اینکار را انجام دهید.