پایگاه دانش علوم کامپیوتر و مهندسی نرم‌افزار - sref.ir

مسئله‌های چالشی برنامه‌نویسی، داده‌ساختارها و الگوریتم‌ها

پل‌های ارتباطی

ارسال اعداد تصادفی به پورت سریال

در یکی از پروژه‌های تجاری لازم بود از طریق برنامه C# Windows Application با تجهیزاتی مانند باسکول و تجهیزات الکترونیکی سنجش ویژگیهای محصول ارتباط برقرار کنم. ارتباط از نوع سریال با رابط RS232 انجام می‌شد. اما مشکل من اینجا بود که برای تست برنامه باید به محل کارخانه می رفتم، برنامه را بر روی یکی از کامپیوترهایی که به دستگاه سنجش مربوطه وصل بود اجرا می کردم و عملکرد برنامه را بررسی می‌کردم. علاوه بر آن تنوع تجهیزات سنجش و نوع داده‌هایی که ارسال می‌کردند چالش دیگری بود که وقت و انرژی زیادی را می‌طلبید.

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

در سطر شماره 1 متغیر DELAY_TIME با مقدار 100 میلی ثانیه برای مکث بین نوشن‌های متوالی در پورت سریال تعریف شده است. از این مقدار در سطر 16 برای ایجاد توقف (تابع delay()) استفاده شده است. در سطر 2 و 3 بازه اعداد تصادفی را تعریف کرده‌ام. با تغییر این مقادیر می‌توانید بازه اعداد تولید شده را کنترل کنید.

در سطر 6 سیستم تولید اعداد تصادفی را آماده می‌کنیم. اینکار با فراخوانی تابع randomSeed() انجام می‌شود. یک عدد دلخواه برای هسته محاسباتی اعداد تصادفی به این تابع ارسال می‌کنیم و من در اینجا از مقدار دریافتی از پایه شماره 0 آنالوگ آردوینو استفاده کرده‌ام (analogRead(0)).

سطر 7 برای آماده سازی Baudrate پورت سریال بر روی مقدار 9600 نوشته شده است. در سطر 11 یک عدد اعشاری در بازه‌ای که قبلا تعریف کردیم تولید می‌شود (تابع random()). همچنین در سطر بعدی مقدار اعشاری عدد نهایی با استفاده از تولید یک عدد کمتر از 100 ساخته می‌شود. در سطر 13 این دو عدد با استفاده از یک نقطه اعشاری به همدیگر چسبانده شده و در متغیر VALUE ذخیره می‌شود. همین عدد در سطر 14 به خروجی پورت سریال ارسال می‌شود. تابع println() یک سطر داده را به خروجی می‌فرستد.