مقدمه
پینهای ورودی خروجی همه منظوره (GPIO) پینهای دیجیتال روی یک آیسی میباشند. میتوان از آنها برای ارتباط با دستگاهها به صورت ورودی یا خروجی استفاده کرد.
اگر بخواهیم وضعیت یک سوییچ، دادههای سنسور و … را بخوانیم باید پین را به عنوان ورودی پیکربندی کنیم. اگر هدف ما کنترل روشنایی یک LED، چرخش موتور، نمایش متن روی نمایشگر و … باشد، باید پین را به عنوان خروجی پیکربندی کرد.
پینهای GPIO آردوینو
بورد Arduino Uno پینهای دیجیتال I/O متنوعی دارد که میتوان از آنها برای دستگاههای ورودی/خروجی استفاده کرد. تصویر زیر پینهای دیجیتال آردوینو Uno را نشان میدهد.
پینهای آنالوگ آردوینو را همچنین میتوان به عنوان پین ورودی/خروجی دیجیتال به کار برد. اجازه دهید ورودی خروجی آردوینو (ATmega) را ببینیم.
خروجی دیجیتال
پینهای دیجیتال آردوینو (ATmega) را میتوان جهت درایو کردن دستگاههای خروجی، به عنوان خروجی تعریف کرد. باید این پینها را برای استفاده به عنوان خروجی پیکربندی کنیم.
برای پیکربندی این پینها، تابع ()pinMode را به کار میبریم که جهت پینها به عنوان ورودی یا خروجی را مشخص میکند.
- pinMode(pin no, Mode)
این تابع برای پیکربندی پین GPIO به عنوان ورودی یا خروجی به کار میبرد.
pin no: شماره پینی که میخواهیم جهت آن را تعیین کنیم.
Mode: به صورت INPUT ،OUTPUT یا INPUT_OUTPUT نوشته میشود.
مثال:
pinMode (3, OUTPUT) //set pin 3 as output
این پینهای آردوینو (Atmega) میتوانند جریانی تا حدود ۴۰ میلیآمپر را کشیده یا تامین کنند که جریان کافی برای درایو کردن led، نمایشگر LCD میباشد، اما برای موتورها، رلهها و … کافی نیست.
نکته: هنگام اتصال دستگاهها به پینهای خروجی آردوینو از مقاومت استفاده کنید. اگر دستگاه متصل شده به آردوینو جریانی بیشتر از۴۰ میلیآمپر از آردوینو بکشد، به آردوینو یا آیسی آسیب خواهد زد.
این پینها خروجی را در به صورت HIGH (۵ ولت یا ۳.۳ ولت) یا LOW (صفر ولت) تولید میکند. میتوان از تابع ()digitalWrite برای تعیین مقدار خروجی پین استفاده کرد.
- digitalWrite (pin no, Output value)
این تابع مقدار خروجی را به صورت HIGH (۵ ولت) یا LOW (صفر ولت) تعیین میکند.
pin no: شماره پینی که قرار است مقدار آن را تعیین کنیم.
Output value: برابر با HIGH یا LOW.
مثال:
digitalWrite (3, HIGH)
ورودی دیجیتال
برای خواندن داده از سنسور یا از هر دستگاه/مدار دیگری، باید پین دیجیتال را به صورت ورودی پیکربندی کرد. پینهای آردوینو به صورت پیشفرض به عنوان ورودی دیجیتال مشخص شدهاند. بنابراین، نیازی به پیکربندی پین به عنوان ورودی نیست.
برای پیکربندی پین به عنوان ورودی دیجیتال، تابع ()pinMode استفاده میشود. با استفاده از تابع ()digitalRead میتوان دادهها را از GPIO خواند.
- digitalRead(pin)
این تابع برای خواندن داده از پین GPIO مشخص شده به کار میرود.
ورودی دیجیتال با مقاومت بالاکش
- گاهی اوقات سوییچ کردن بین یک حالت به حالت دیگر، یا پینهای ورودی که به هیچ جایی وصل نباشند، ممکن است منجر به وضعیت High-impedance، یا وضعیت شناور گردد. این وضعیت میتواند منجر به تغییرات تصادفی در وضعیت پین شود.
- برای اجتناب از چنین وضعی، یک گزینه موجود اضافه کردن مقاومت بالاکش (به 5V+) یا پایین کش (GND) میباشد، که سبب میشود که ورودی در یک وضعیت معلوم قرار گیرد. شکل زیر وضعیت High-Impedance (تعریف نشده) و مقاومت بالاکش را نشان میدهد.
- آردوینو (ATmega) دارای یک مقاومت بالاکش داخلی با قابلیت پیکربندی است. این مقاومتها با استفاده از تابع ()pinMode و تعیین مد INPUT_PULLUP فعال میشوند. وقتی یک دستگاه یا سنسور را به یک پین که به صورت ورودی با مقاومت بالاکش تنظیم شده، وصل میکنیم، سر دیگر آن به زمین وصل میشود.
مثال:
pinMode (3, INPUT_PULLUP).
- میتوان ورودی بالاکش را به روش دیگری نیز پیکربندی کنیم. اگر جهت یک پین را به صورت ورودی تنظیم کنیم و مقدار HIGH را در آن بنویسیم، پین مقاومت بالاکش را روشن میکند. در حالت دیگر، اگر در یک پین پیکربندی شده به صورت OUTPUT مقدار HIGH را بنویسیم و سپس آن پین را به صورت ورودی پیکربندی کنیم، مقاومت بالاکش فعال میشود.
مثال
e.g. pinMode (3, INPUT) //set pin as input digitalWrite (3, HIGH) //setting high on input pin enables pullup
LED چشمکزن با آردوینو
اجازه دهید یک برنامه برای آردوینو Uno برای چشمکزدن یک LED بنویسیم. در اینجا، ما LED رو بوردی آردوینو Uno را که به پین دیجیتال ۱۳ متصل است را روشن و خاموش میکنیم.
اسکچ LED چشمکزن برای آردوینو
void setup() { pinMode(13, OUTPUT); // sets the digital pin 13 as output } void loop() { digitalWrite(13, HIGH); // sets the digital pin 13 on delay(1000); // waits for a second digitalWrite(13, LOW); // sets the digital pin 13 off delay(1000); // waits for a second }
خروجی LED چشمکزن
خاموش و روشن کردن LEDهای متوالی با استفاده از آردوینو
اجازه دهید LEDها را به صورت متوالی خاموش و روشن کنیم. در اینجا، ابتدا چهار LED را یک به یک روشن میکنیم، یعنی ابتدا LED1 روشن میشود سپس LED1 و LED2 روشن میشوند و الی آخر. وقتی که همه چهار LED روشن شدند، همه آنها را در جهت عکس یک به یک خاموش میکنیم. یعنی ابتدا LED4 خاموش میشود و سپس LED3 خاموش میشود و الی آخر.
چهار LED به پینهای ۰-۳ آردوینو Uno وصل هستند.
نکته: هنگام آپلود کردن برنامه به آردوینو، اتصالات پینهای ۰ و ۱ را جدا کنید، زیرا این پینها، پینهای RXD و TXD هستند که هنگام فرآیند آپلود برای ارتباط سریال استفاده میشوند. وقتی که آپلود به پایان رسید، مجددا اتصالات ۰ و ۱ را برقرار کنید.
اسکچ خاموش و روشن کردن LEDهای متوالی
void setup() { //set gpio pin {0,1,2,3} as output pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); } void loop() { //turn LED ON one by one for(int i=0;i<4;i++){ digitalWrite(i, HIGH); delay(1000); } //turn LED OFF one by one for(int i=3;i>=0;i--){ digitalWrite(i, LOW); delay(1000); } }
خروجی ویدئو
کنترل LED با کلید با استفاده از آردوینو
میخواهیم با یک سوئیچ متصل به آردوینو Uno، خاموش و روشن کردن LED را کنترل کنیم.
دیاگرام اتصالات
اسکچ کنترل LED با سوئیچ
int pushButton = 2; int LED = 13; void setup() { // make the pushbutton's pin an input: pinMode(pushButton, INPUT_PULLUP); //configure pin as input with pullup enabled pinMode(LED, OUTPUT); //configure pin as output } void loop() { // read the input pin: int buttonState = digitalRead(pushButton); digitalWrite(LED, (!(buttonState))); //turn len on when switch pressed delay(1); // delay in between reads for stability }
ویدئو
- منبع: ترجمه از سایت electronicwings.com
کامنت یادتون نره:)
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام خسته نباشید.
باتشکر از محتوایه ساده و مفیدتون.
من رو uno کد led چشمک زن اپلود کردم و الان میخوام کد بمار بعدی بریزم .قبلیو چه جوری پاک کنم
وایتکس بریز روی برد