
در آردوینو، نوع دادهی char برای ذخیرهی یک کاراکتر منفرد (مثل A، 5 یا @) استفاده میشود.
هر متغیر از نوع char دقیقاً یک بایت (۸ بیت) از حافظه را اشغال میکند.
اما نکتهی جالب اینجاست: در پسزمینه، هر کاراکتر در واقع یک عدد است! این اعداد بر اساس جدول استاندارد ASCII تعریف شدهاند.
مثلاً: — کاراکتر A معادل عدد ۶۵ است.
— کاراکتر 0 معادل عدد ۴۸ است.
برای تعریف یک کاراکتر، از علامت نقل قول تکی () استفاده میشود (نه دابل کوتیشن!):
char myLetter = K;
char digit = 7;
char symbol = #;
⚠️ توجه: اگر از دابل کوتیشن استفاده کنید ("K")، آردوینو آن را به عنوان یک رشته (string) در نظر میگیرد — نه یک کاراکتر!
چون char در واقع یک عدد ۸ بیتی است، میتوانید مستقیماً یک عدد به آن نسبت دهید:
char c = 65; // معادل کاراکتر A
Serial.println(c); // خروجی: A
همچنین میتوانید یک کاراکتر را به عدد تبدیل کنید:
char letter = B;
int asciiValue = letter; // asciiValue = 66
هر دو char و byte یک بایت حافظه مصرف میکنند، اما:
— byte فقط اعداد مثبت از ۰ تا ۲۵۵ را پشتیبانی میکند.
— char اعدادی از -۱۲۸ تا +۱۲۷ را پشتیبانی میکند (چون بهصورت پیشفرض «علامتدار» است).
پس اگر قصد دارید فقط کاراکتر ذخیره کنید یا با اعداد مثبت ۰–۲۵۵ کار کنید، byte گزینهی شفافتری است.
اما اگر واقعاً نیاز به کاراکتر دارید (مثلاً برای ارسال داده به سریال مانیتور)، از char استفاده کنید.
در این مثال، آردوینو منتظر دریافت یک کاراکتر از کامپیوتر است و بر اساس آن LED را روشن یا خاموش میکند:
const int ledPin = 13;
char command;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("دستور را وارد کنید: 1 برای روشن، 0 برای خاموش");
}
void loop() {
if (Serial.available() > 0) {
command = Serial.read(); // خواندن یک کاراکتر
if (command == 1) {
digitalWrite(ledPin, HIGH);
Serial.println("LED روشن شد.");
} else if (command == 0) {
digitalWrite(ledPin, LOW);
Serial.println("LED خاموش شد.");
}
}
}
بسیاری از مبتدیها این اشتباه را میکنند:
— A → یک کاراکتر (صحیح برای char)
— "A" → یک رشتهی ۲ بایتی (شامل A و یک بایت پایاندهنده �)
استفاده از دابل کوتیشن در جایی که باید تک کوتیشن باشد، باعث خطاهای عجیب و غریب میشود!
اگرچه char برای کاراکتر طراحی شده، اما چون یک بایت است، گاهی برای انتقال دادههای خام (مثل بایتهای دریافتی از سنسور I2C یا UART) هم استفاده میشود.
اما در این موارد، بهتر است از uint8_t یا byte استفاده کنید تا منظور شما از کد واضحتر باشد.
این مطلب بر اساس مستندات رسمی Arduino از بخش char – Language Reference تهیه شده است، با توضیحات سادهشده، مثالهای کاربردی و نکات طلایی منحصربهفرد برای جامعه فارسیزبان.
برچسب های مهم