پیشرفت یادگیری
۴
بخش ۴ از ۴ – تکمیل شد ✅
🎉 تبریک! شما به آخرین بخش از آموزش برنامه‌نویسی آردوینو رسیده‌اید.
بخش چهارم از ۴ – نهایی

توابع ورودی/خروجی و ارتباطات
رابط آردوینو با دنیای خارج

بخش قبلی: توابع و عملگرها بخش ۴ از ۴ تکمیل شد!
ورودی/خروجی زبان فارسی C/C++ سطح: متوسط زمان مطالعه: ۴۵ دقیقه

در این بخش چه می‌آموزیم؟

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

توابع پایه

pinMode, digital, analog

ارتباط سریال

Serial.print, Serial.read

وقفه‌ها

attachInterrupt, detachInterrupt

توابع پیشرفته

tone, pulseIn, shiftOut

۴-۱ توابع ورودی/خروجی پایه

این توابع، پایه‌ترین و پرکاربردترین توابع در برنامه‌نویسی آردوینو هستند.

pinMode(pin, mode)

تنظیم جهت پایه (INPUT/OUTPUT/INPUT_PULLUP)

pinMode(13, OUTPUT);

digitalRead(pin)

خواندن مقدار دیجیتال (HIGH/LOW)

int state = digitalRead(7);

digitalWrite(pin, value)

نوشتن مقدار دیجیتال (HIGH/LOW)

digitalWrite(13, HIGH);

analogRead(pin)

خواندن مقدار آنالوگ (۰ تا ۱۰۲۳)

int val = analogRead(A0);

analogWrite(pin, value)

نوشتن خروجی PWM (۰ تا ۲۵۵)

analogWrite(9, 128);

نکته: پایه‌های PWM در آردوینو اونو: 3, 5, 6, 9, 10, 11

۴-۲ توابع ارتباط سریال

ارتباط سریال یکی از مهم‌ترین روش‌های تبادل داده بین آردوینو و سایر دستگاه‌ها است.

Serial.begin(speed)

شروع ارتباط با نرخ باود مشخص

Serial.begin(9600);

Serial.print(data)

چاپ داده به‌صورت متن

Serial.print("Hello");

Serial.println(data)

چاپ داده با رفتن به خط بعدی

Serial.println(value);

Serial.read()

خواندن یک بایت از بافر

int data = Serial.read();

Serial.available()

تعداد بایت‌های موجود در بافر

if (Serial.available() > 0)
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)

تولید موج مربعی با فرکانس مشخص

tone(8, 440, 1000);

noTone(pin)

متوقف کردن تولید موج

noTone(8);

pulseIn(pin, value, timeout)

اندازه‌گیری پهنای پالس

int dur = pulseIn(7, HIGH);

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");
        }
    }
}

خلاصه توابع ورودی/خروجی

تابع توضیح مثال
pinMode(pin, mode) تنظیم جهت پایه pinMode(13, OUTPUT)
digitalRead(pin) خواندن دیجیتال digitalRead(7)
digitalWrite(pin, value) نوشتن دیجیتال digitalWrite(13, HIGH)
analogRead(pin) خواندن آنالوگ (۰-۱۰۲۳) analogRead(A0)
analogWrite(pin, value) نوشتن PWM (۰-۲۵۵) analogWrite(9, 128)
Serial.begin(speed) شروع ارتباط سریال Serial.begin(9600)
Serial.print(data) چاپ متن Serial.print("Hello")
Serial.println(data) چاپ با خط جدید Serial.println(value)
attachInterrupt(pin, ISR, mode) فعال‌سازی وقفه attachInterrupt(2, func, FALLING)
tone(pin, freq, duration) تولید صدا tone(8, 440, 1000)
pulseIn(pin, value, timeout) اندازه‌گیری پالس pulseIn(7, HIGH)
مسیر تکمیلی یادگیری

🎓 تبریک! شما ۴ بخش را تکمیل کردید

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

کتاب‌های پیشنهادی برای ادامه مسیر

با مطالعه این کتاب‌ها، مهارت‌های خود را به سطح حرفه‌ای برسانید:

آموزش پروژه محور آردوینو

۴۰۴ صفحه، ۸ فصل جامع، فارسی

دریافت PDF نسخه چاپی

آموزش آردوینو با محوریت IoT

۲۳۳ صفحه، ۱۱ فصل، فارسی

دریافت PDF

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

۱۳۲ صفحه، ۴ فصل، فارسی

دریافت PDF رمز: kalakan.ir

برای مشاهده تمام کتاب‌های آموزشی آردوینو، به صفحه کتاب‌های آردوینو مراجعه کنید.

✅ جمع‌بندی کل دوره ۴ بخشی

بخش اول

مفاهیم پایه و متغیرها

بخش دوم

ساختارهای کنترلی

بخش سوم

توابع و عملگرها

بخش چهارم

ورودی/خروجی و ارتباطات

🎉 شما با موفقیت ۴ بخش آموزش برنامه‌نویسی آردوینو را تکمیل کردید!
بخش قبلی: توابع و عملگرها پایان دوره کتاب‌های بیشتر
#ورودی_خروجی_آردوینو #ارتباط_سریال_آردوینو #وقفه_در_آردوینو #Serial_print #برنامه_نویسی_آردوینو #آموزش_کامل_آردوینو