این هم سمپلی که قولشو داده بودم
تقدیم به تمام دوستان خوبم در IranLed
بابت تاخیر باید ببخشید، چون خیلی درگیر بودم.
جناب ilgar عزیز، من سورس را در سی شارپ دات نت 2010 نوشتم و در صورتی که توضیحات ارزشمند خودتون را اضافه کنید، ممنون میشم روی پرتال گذاشته بشه...
از لحاظ توضیحات نرم افزاری این موارد قابل ذکر است:
نرم افزار کاملا به زبان ساده نوشته شده و در نرم افزار شما قادر هستید سنسور را در هر لحظه خوانده و مشاهده کنید، از طرفی قادر هستید تا آدرس سنسور را به آدرس دلخواه خودتون تغییر بدهید.
در ابتدای کار
یک آرایه دو بعدی از نوع بایتی حاوی (آدرس سنسور و درخواست نوع اطلاعات که در اینجا درخواست به سانتی متر است، به صورت هگز) تعریف می شود.
سپس با دستور Write و متد Oveload دوم آن با یک بازه 1 میلی ثانیه ای درخواست ارسال شده است.(ایجاد وقفه با System.Threading.Thread.Sleep تعریف شده است.)
نهایتا چون سنسور 2 بار اطلاعات را در قالب بایت ارسال می کند، دستور Readbyte در برنامه 2 بار نوشته شده است.
برای پرهیز از هنگ کردن برنامه، من timeout خواندن اطلاعات را تعریف کردم(دستور های serialPort1.ReadTimeout = 1; و serialPort1.WriteTimeout = 20; )
این زمان را شما در ابتدای برنامه می توانید تغییر دهید.... (در صورتی که مشکلی پیش آمد زمان را که بر حسب میلی ثانیه هست تغییر دهید.)
همچنین دستور ReadByte را در دستور try قرار دادم تا مشکلی ایجاد نشود.
تمامی تنظیمات ارسال دیتا و تغییر عدد سنسور نیز به همین شکل اما در آرایه ای جدید تعریف شده است که در صورتی که PDF فارسی جناب ilgar را مطالعه بفرمایید، به راحتی متوجه می شوید.
به مثال زیر که بخشی از برنامه است دقت کنید:
کد:
byte[] Sensor1 = new byte[8];
Sensor1[0] = first_value;
Sensor1[1] = 0xA0;
Sensor1[2] = first_value;
Sensor1[3] = 0xAA;
Sensor1[4] = first_value;
Sensor1[5] = 0xA5;
Sensor1[6] = first_value;
Sensor1[7] = final_value;
if (serialPort1.IsOpen == true)
{
serialPort1.Write(Sensor1, 0, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 1, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 2, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 3, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 4, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 5, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 6, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 7, 1);
return;
}
در اینجا اگر به ابتدای سورس دقت کنید، در واقع من یک بایت را با اسم first value انتخاب کرده ام که با دستور Switch case در خطوط بالاتر سمپل، پر می شود. این دستور switch case شماره ابتدایی سنسور را مشخص کرده است . مقدار final value نیز از comboBox مقدار مورد نیاز را با استفاده از دستور Switch case به خود می گیرد و نهایتا در آرایه جایگزاری می شود. هدف از این کار تغییر آدرس (شماره سنسور) از هر آدرسی به آدرس دیگر است.
در آخر از فارسی سازی و نمونه سورس در PDF این سنسور، از دوست خوبم جناب ilgar نهایت سپاس را دارم چرا که در تسریع این کار خیلی موثر بود
دلیل موفقیت من، تسلط به ز بان c و basic بود که ترجیحا آنرا در C#.net نوشتم و شما می توانید به راحتی آنرا در VB.net نیز شبیه سازی کنید.
دقت فرمایید اجرای این برنامه فقط در C#.net نسخه سال 2010 انجام گیرد و در نسخه های قدیمی تر، با مشکل مواجه می شوید.... (در حقیقت visual Studio 2010 را باید نصب کرده باشید.)
ضمنا برای ارتباط سخت افزاری هم از ماژول آماده FT232 استفاده کنید و tx ماژول را به Rx سنسور و Rx ماژول را به TX سنسور بدهید. که به دلیل سادگی مدار آنرا دیگه قرار ندادم...
در صورتی هم که پورت کام سیستم را می خواهید استفاده کنید، از یه max232 به عنوان واسط استفاده کنید تا سطح ولتاژ پورت com را به سطح TTl بیاره.....
موفق باشید.
خواهشمندم در هرجایی اطلاعات این سنسور را منتشر می کنید، منبع آنرا ذکر کنید و حقوق من را از بین نبرید تا باز هم با نرم افزارهای جدید برای رباتیک در خدمت شما عزیزان باشم.
هر گونه سوالی در رابطه با برنامه این سنسور را پاسخ گو هستم/ محمدرضا ناظم