ترمینال های سریال متفاوت در آردوینو
برای برنامه های کم اهمیت، سریال مانیتور(serial monitor) آی دی ای(IDE) آردوینو کافی است اما ما می توانیم به سادگی آن را با دیگر اپلیکیشن ها ترکیب کنیم و فاقد برخی ویژگی ها است. این یعنی ما باید یک serial terminal جایگزین برای ارسال داده داشته باشیم و ما می توانیم بسیاری از این سریال مانیتورها را برای هر سیستم عاملی پیدا کنیم. یکی از سریال مانیتورهای ویندوز PuTTY است که یک انتخاب عالی برای کاربران ویندوز به شمار می رود. این نرم افزار رایگان است و نیاز به نصب ندارد و فوری اجرا می شود. تصویر زیر نشان می دهد که چگونه این نرم افزار را برای ارتباط با یک پورت سریال تنظیم کنیم.
پس از اینکه PuTTY را تنظیم کردیم می توانیم یک کانکشن سریال را در آردوینو باز کنیم. تصویر زیر جعبه ی مکالمه ی مربوطه را نشان می دهد. بر روی Open کلیک کنید و سپس پنجره ی ترمینال خالی زیر را مشاهده خواهید کرد:
اکنون دکمه های 1 و 2 را چندین بار فشار دهید تا ال ای دی روشن و خاموش شود.
ترمینال سریال(Serial Terminal) برای لینوکس و مکینتاش
کاربران لینوکس و مک می توانند از صفحه ی command برای ارتباط با آردوینو از طریق پورت سریال استفاده کنند. بررسی کنید که در منوی Tools > Board از IDE ، آردوینو به چه پورت سریالی متصل شده است. سپس یک فرمان(cammand) مانند زیر را اجرا کنید(برای بوردهای قدیمی تر پورت سریال چیزی مثل dev/tty.usbserial-A9007LUY/ است و در سیستم های لینوکس این پورت سریال ممکن است به صورت dev/ttyUSB1/ یا چیزی شبیه به این باشد.
$ screen /dev/tty.usbmodem24321 9600
خط فرمان screen (در بالا) منتظر نام پورت سریال و نرخ انتقال(baud rate) است تا آنها را مورد استفاده قرار دهد. برای خارج شدن از فرمان screen، کلید Ctrl-a و به دنبال آن k را فشار دهید(در برخی سیستم ها، این دستور به صورت Ctrl-a و سپس Ctrl-k است).
اکنون ما می توانیم با آردوینو ارتباط برقرار کنیم و این پیامدهای مهمی دربر دارد. هرچه که توسط آردوینو کنترل شود می تواند توسط کامپیوتر ما هم کنترل شود و برعکس. روشن و خاموش کردن ال ای دی ها نیز با این روش تماشایی است اما تصور کنید که اکنون چه کارهایی که نمی توانیم بکنیم. ما می توانیم ربات ها را حرکت دهیم و خانه ی خود را اتوماسیون کنیم یا بازی های تعاملی ایجاد کنیم. در زیر حقایق مهم بیشتری در مورد ارتباطات سریال آورده شده است:
- بافر دریافت سریال(serial receive buffer) در آردوینو UNO می تواند تا 64 بایت را نگهداری کند. وقتی که داریم داده های بزرگ را با سرعت بالا ارسال می کنیم، ما باید فرستنده(sender ) و گیرنده(receiver ) را همگام سازی(synchronize) کنیم تا از تلف شدن داده ها جلوگیری کنیم. معمولا گیرنده، یک خبر وصول(acknowledgment ) را وقتی که آماده ی دریافت یک قطعه از داده است، به فرستنده ارسال می کند.
- ما با استفاده از ارتباطات سریال، می توانیم دستگاه های زیادی را کنترل کنیم، اما آردوینوی عادی تنها یک پورت سریال دارد. اگر شما به پورت های بیشتری نیاز دارید، به آردوینو Due نگاهی بیاندازید که چهار پورت سریال دارد.
- یک گیرنده/ فرستنده ی جهانی ناهمزمان(Universal Asynchronous Receiver/Transmitter ) به مخفف UART از ارتباطات سریال آردوینو پشتیبانی می کند. این دستگاه ارتباطات سریال را به کار می برد در حالیکه CPU از دیگر کارها مراقبت می کند. این کار بسیار کارایی و عملکرد کلی سیستم را بهبود می بخشد. این UART از پین های دیجیتال 0 (RX) و 1 (TX) استفاده می کند،که بدین معنی است که ما نمی توانیم از آنها به هنگام ارتباطات برای دیگر اهداف در پورت سریال استفاده کنیم. اگر شما به این پین های دیجیتال احتیاج دارید، می توانید ارتباطات سریال را با استفاده از دستور Serial.end() غیرفعال کنید.
- با استفاده از کتابخانه ی SoftwareSerial ما می توانیم از هر پین دیجیتالی برای ارتباطات سریال استفاده کنیم. این کتابخانه کمی محدودیت دارد اما برای بیشتر اپلیکیشن ها کافی است.
در این فصل، دیدیم که چگونه با استفاده از پورت سریال، با آردوینو ارتباط برقرار کنیم. که این کار در را بر روی تمام پروژه های محاسباتی فیزیکی برای ما می گشاید. برای جزئیات بیشتر در مورد ارتباطات سریال، مقاله ی "اطلاعات بیشتر در مورد ارتباطات سریال" در صفحه 253 را مشاهده کنید. در فصل های بعد، یاد خواهید گرفت که با استفاده از سنسورها، حقایقی جذاب را جمع آوری کنید و یاد خواهید گرفت که با حرکت دادن اشیاء جهان واقعی را تغییر دهید. ارتباطات سریال، مبنای این است که ما بتوانیم تمام این کارها را با استفاده از آردوینو و رایانه انجام دهیم.
اگر برنامه کار نکرد چه کنیم؟
اگر مثال های این فصل با مشکل مواجه شوند، شما باید ابتدا به مقاله ی "اگر برنامه کار نکرد چه کنیم؟" در صفحه 21 نگاهی بیاندازید. اگر باز هم با مشکل مواجه شدید، ممکن است علتش مشکلات ارتباطات سریال باشد. ممکن است نرخ انتقال(baud rate) را اشتباه قرار داده باشید، اگر چنین شود، خطایی مثل تصویر زیر نشان داده خواهد شد:
مطمئن شوید که نرخ انتقالی(baud rate) که در فراخوانی دستور Serial.begin قرار داده اید با نرخ انتقال در سریال مانیتور(serial monitor) یکسان باشد.
تمرین ها
- فرمان های جدیدی را به برنامه ی نمونه اضافه کنید. مثلا فرمان 3 می تواند باعث شود که LED برای مدتی چشمک بزند.
- سعی کنید فرمان ها بیشتر خوانا باشند، مثلا به جای 1 از فرمان on و به جای 2 از فرمان off استفاده کنید.
اگر در رابطه با این تمرین ها مشکل داشتید، در فصل 4 در صفحه 61،به مقاله ی ایجاد یک تولید کننده ی کدهای مورس مراجعه کنید.