توابع ورودی/خروجی و ارتباطات
رابط آردوینو با دنیای خارج
در این بخش چه میآموزیم؟
توابع ورودی و خروجی، رابط اصلی آردوینو با دنیای خارج هستند و امکان خواندن داده از حسگرها و نوشتن فرمان به محرکها را فراهم میکنند.
توابع پایه
pinMode, digital, analog
ارتباط سریال
Serial.print, Serial.read
وقفهها
attachInterrupt, detachInterrupt
توابع پیشرفته
tone, pulseIn, shiftOut
۴-۱ توابع ورودی/خروجی پایه
این توابع، پایهترین و پرکاربردترین توابع در برنامهنویسی آردوینو هستند.
pinMode(pin, mode)
تنظیم جهت پایه (INPUT/OUTPUT/INPUT_PULLUP)
digitalRead(pin)
خواندن مقدار دیجیتال (HIGH/LOW)
digitalWrite(pin, value)
نوشتن مقدار دیجیتال (HIGH/LOW)
analogRead(pin)
خواندن مقدار آنالوگ (۰ تا ۱۰۲۳)
analogWrite(pin, value)
نوشتن خروجی PWM (۰ تا ۲۵۵)
نکته: پایههای PWM در آردوینو اونو: 3, 5, 6, 9, 10, 11
۴-۲ توابع ارتباط سریال
ارتباط سریال یکی از مهمترین روشهای تبادل داده بین آردوینو و سایر دستگاهها است.
Serial.begin(speed)
شروع ارتباط با نرخ باود مشخص
Serial.print(data)
چاپ داده بهصورت متن
Serial.println(data)
چاپ داده با رفتن به خط بعدی
Serial.read()
خواندن یک بایت از بافر
Serial.available()
تعداد بایتهای موجود در بافر
void setup() { Serial.begin(9600); // شروع ارتباط } void loop() { int sensorValue = analogRead(A0); Serial.print("Sensor: "); Serial.println(sensorValue); // چاپ مقدار با خط جدید delay(500); }
۴-۳ توابع وقفه
وقفهها امکان پاسخدهی فوری به رویدادهای خارجی را بدون نیاز به سرکشی مداوم فراهم میکنند.
attachInterrupt(pin, ISR, mode)
فعالسازی وقفه روی پایه
detachInterrupt(pin)
غیرفعالسازی وقفه
interrupts()
فعالسازی کلی وقفهها
noInterrupts()
غیرفعالسازی کلی وقفهها
حالتهای وقفه:
RISING
FALLING
CHANGE
LOW
HIGH
int buttonPin = 2; int ledPin = 13; bool ledState = false; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(buttonPin), toggleLED, FALLING); } void toggleLED() { ledState = !ledState; digitalWrite(ledPin, ledState); } void loop() { // برنامه میتواند کارهای دیگر را انجام دهد }
۴-۴ توابع پیشرفته ورودی/خروجی
tone(pin, freq, duration)
تولید موج مربعی با فرکانس مشخص
noTone(pin)
متوقف کردن تولید موج
pulseIn(pin, value, timeout)
اندازهگیری پهنای پالس
shiftOut(dataPin, clockPin, order, value)
ارسال سریال داده
shiftIn(dataPin, clockPin, order)
دریافت سریال داده
// تولید صدا tone(8, 440, 1000); // نت A4 به مدت ۱ ثانیه delay(1000); noTone(8); // اندازهگیری فاصله با سنسور اولتراسونیک digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); int duration = pulseIn(echoPin, HIGH); int distance = duration * 0.034 / 2;
۴-۵ مثالهای عملی
مثال ۱: خواندن سنسور و نمایش در ترمینال
int sensorPin = A0; void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(sensorPin); float voltage = sensorValue * (5.0 / 1023.0); Serial.print("M: "); Serial.print(sensorValue); Serial.print(" V: "); Serial.println(voltage); delay(500); }
مثال ۲: کنترل LED با PWM و پتانسیومتر
int potPin = A0; int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int potValue = analogRead(potPin); int brightness = map(potValue, 0, 1023, 0, 255); analogWrite(ledPin, brightness); }
مثال ۳: دریافت داده از ترمینال
int ledPin = 13; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); Serial.println("1=ON, 0=OFF"); } void loop() { if (Serial.available() > 0) { char command = Serial.read(); if (command == '1') { digitalWrite(ledPin, HIGH); Serial.println("LED ON"); } else if (command == '0') { digitalWrite(ledPin, LOW); Serial.println("LED OFF"); } } }
خلاصه توابع ورودی/خروجی
🎓 تبریک! شما ۴ بخش را تکمیل کردید
اکنون که با مفاهیم پایه برنامهنویسی آردوینو آشنا شدید، زمان آن رسیده که دانش خود را با منابع تخصصیتر تکمیل کنید.
کتابهای پیشنهادی برای ادامه مسیر
با مطالعه این کتابها، مهارتهای خود را به سطح حرفهای برسانید:
برای مشاهده تمام کتابهای آموزشی آردوینو، به صفحه کتابهای آردوینو مراجعه کنید.
✅ جمعبندی کل دوره ۴ بخشی
بخش اول
مفاهیم پایه و متغیرها
بخش دوم
ساختارهای کنترلی
بخش سوم
توابع و عملگرها
بخش چهارم
ورودی/خروجی و ارتباطات