⚙️ کامپایل و اجرای واقعی کد آردوینو، آنلاین و بدون برد
وقتی روی برد واقعی کد آردوینو را آپلود میکنی، دو اتفاق میافتد: اول کامپایلر کد C++ تو را به زبان ماشین ترجمه میکند، بعد تراشهی ATmega328P روی آردوینو Uno آن را اجرا میکند. در شبیهساز ما حالا میتوانی همین دو قدم را بدون برد انجام بدهی: «اجرای واقعی».
اجرای معمولی و اجرای واقعی چه فرقی دارند؟
| اجرای معمولی | اجرای واقعی | |
|---|---|---|
| چطور کار میکند | کد به جاوااسکریپت ترجمه میشود | کامپایلر واقعی آردوینو (avr-gcc) + تراشهی شبیهسازیشده |
| دقت | تقریبی؛ بیشتر برنامههای آموزشی کار میکنند | دقیق مثل برد واقعی، تا سطح هر دستور ماشین |
| خطای کامپایل | سادهشده | همان پیغام Arduino IDE با شمارهی خط |
| بردها | همه (Uno، Nano، Mega، ESP32، Pico) | Uno و Nano |
| LCD، OLED، سروو، بازر، نئوپیکسل، DHT، ساعت RTC | نشان داده میشوند | نشان داده میشوند (با کتابخانهی واقعی) |
| ماتریس LED (MAX7219) و نمایشگر ۴ رقمی (TM1637) | کار میکنند | کار میکنند |
| کیپد، کنترل مادونقرمز، اولتراسونیک، کارت SD، RFID، بلوتوث | کار میکنند | هنوز نه |
| تایپ در Serial Monitor | کار میکند | کار میکند |
| اینترنت | لازم نیست | برای کامپایل لازم است |
چطور روشنش کنم؟
- در مود آردوینوی شبیه ساز مدار، یک Uno یا Nano بگذار.
- کنار دکمهی «اجرا»، دکمهی «واقعی» را بزن تا زرد شود.
- «اجرا» را بزن. در Serial Monitor میبینی کد کامپایل شد و چند بایت از ۳۲ کیلوبایت حافظه را گرفت.
خطای کامپایل را چطور بخوانم؟
اگر جایی ; جا افتاده باشد، کامپایلر مثلاً مینویسد:
sketch.ino:3:22: error: expected ';' before '}' token
یعنی خط ۳، ستون ۲۲. همانجا را نگاه کن. معمولاً اشتباه در خط قبل از جایی است که کامپایلر گفته. این همان پیغامی است که روی برد واقعی هم میبینی، پس یاد گرفتنش مستقیم به کار پروژهی واقعی میآید.
کتابخانههای موجود در اجرای واقعی
حدود ۳۰ کتابخانهی پرکاربرد، همان نسخههای اصلی که در Arduino IDE نصب میکنی: Wire، SPI، SoftwareSerial، EEPROM، Servo، Stepper، AccelStepper، LiquidCrystal، LiquidCrystal_I2C، Adafruit_GFX، Adafruit_SSD1306، Adafruit_NeoPixel، DHT، RTClib، OneWire، DallasTemperature، Keypad، IRremote، LedControl، TM1637Display، MFRC522، SD، HX711، TinyGPSPlus، Adafruit_MPU6050، Adafruit_PWMServoDriver، TimerOne، Bounce2 و ArduinoJson. اگر کتابخانهای را #include کنی که نصب نیست، پیغام خطا فهرست کتابخانههای موجود را نشان میدهد.
«کامپایل میشود» با «در صحنه دیده میشود» فرق دارد: برنامهات با همهی این کتابخانهها کامپایل و اجرا میشود، ولی فقط قطعههایی که در جدول بالا آمدهاند در اجرای واقعی واکنش نشان میدهند.
حافظهی برنامه چرا مهم است؟
آردوینو Uno فقط ۳۲ کیلوبایت جا برای برنامه و ۲ کیلوبایت رم دارد. اجرای واقعی دقیقاً میگوید برنامهات چقدر جا گرفته. اگر متنهای بلند زیادی با Serial.print چاپ میکنی، رم زود پر میشود. ترفندش این است که متن را داخل F("...") بنویسی تا در حافظهی برنامه بماند.