منتدى مبرمجي Microsoft Visual C#.NET

 اسم العضو:Prof.Mendl  الجمعة,23/شعبان/1430 هـ,04:44 مساءً
[ALIGN=CENTER][B][SIZE=5]بسم الله الرحمن الرحيم[/SIZE][/B] [/ALIGN] نبدأ سلسلة برامج نشرح بها اساسيات التعامل مع serial Port [B][COLOR=#dc143c]ملحوظة:- البرامج منقولة من احد الكتب ( قام برفعه احد الاخوة الاعضاء - طارق فيصل - في قسم السي شارب بمشاركة وعنوانها ربط fingerprint مع Csharp وهذا رابط الكتب من المشاركة ) http://www.mediafire.com/download.php?jdzm1xmi3tz [/COLOR][/B] [B][COLOR=#0000ff]أولا : نبذة عن الاتصال المتوالي [/COLOR]Serial Communication[/B] - طريقة ارسال البيانات هي ارسال بت واحد تلو الاخر أي متوالي على عكس Parellel Communication اي الاتصال المتوازي والذي يتم فيه ارسال بايت تلو الاخر - يكون الارسال على الشكل الاتي بت ( لمعرفة بداية الارسال ) + الداتا ( يمكن ان تكون 5 بت او 6 بت او 7 بت او 8 بت ) + بت النهاية ( يمكن ان يكون بت واحد او واحد ونص او اثنان بت ) - هناك بت اضافي يمكن ان يضاف الى الرسالة للتحقق من صحة البيانات ( لا يقوم بتصحيح الخطأ وانما لاكتشاف الخطأ فقط ) وهناك 4 طرق لهذه الخاصية ( لن نخوض فيها ) [COLOR=#0000ff]-- الاتصال المتوالي لا يعني بالضرورة وجود كابل متوالي Serial Cable وانما هو طريقة اتصال بين جهازيين بالصورة التي شرحناها بالاعلى فعلى سبيل المثال جميع الاجهزة التي تستخدم تقنية Bluetooth للاتصال فيما بينها تستخدم طريقة الاتصال المتوالي [/COLOR] [B]لذلك لكي نستطيع تجربة تلك البرامج هناك اكثر من طريقة :-[/B] - الاتصال بين جهازي كمبيوتر بكابل متوالي Serial Cable - الاتصال بين مخرجين Serial Ports على نفس الجهاز بكابل متوالي. - استخدام Bluetooth Adapter بين حهازين . - استخدام كابل محول بين Serial Port and USB او بمعنى اخر Serial - to - USB cable للربط بين مخرج serial ومخرج USB بعد هذه المقدمة البسيطة عن الاتصال المتوالي ومتطلبات اختبار برامجنا نأتي الى اول برامجنا . [B]البرنامج الأول : برنامج محادثة عن طريق الاتصال المتوالي [/B] - ننشأ برنامج ويندوز جديد وليكن اسمه SerialChat - نصمم الواجهة كما بالصورة:- [IMG]../Uploads/60739/image/serialPortForm.JPG[/IMG] وهي تحتوي على الاتي :- - كمبوبوكس ComboBox: لتخزين اسماء Serial Ports المنافذ المتاحة على الكمبيوتر. اسمها : ccbCOMPorts - تكست بوكس TextBox: للنص المراد ارساله اسمها : txtDataToSend مع جعلها تقبل تعدد السطور mutliLine : true - ريتش تكست بوكس RichTextBox: للنص المستقبل اسمها : txtDataReceived مع جعلها تقبل تعدد السطور جعل الخاصية ScrollBar رأسية Scrollbar : vertical - بعض الازرار ووظيفتها ظاهرة من اسمها في الصورة وهم : btnConnect لبدء الاتصال btnDisconnect لانهاء الاتصال btnSend لارسال النص - اداة عنوان Label : لعرض حالة الاتصال اسمها : lblMessage للتعامل مع Serial Port هناك اداة موجودة في صندوق الادوات تسمى SerialPort تجدها في تصنيف Components يمكنها ان تضيفها الى الفورم او ننشأ كائن منه عن طريق الكود وهو ما سنستخدمه هنا . نبدأ بإنشاء كائن من كلاس SerialPort [CODE language="CS"]public partial class Form1 : Form { private System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort(); ........ ........ [/CODE] في حدث التحميل للفورم نجلب اسماء جميع المنافذ المتوالية Serial Ports المتاحة بالكمبيوتر بالشكل الاتي :- [CODE language="CS"]private void Form1_Load(object sender, EventArgs e) { ....... ....... ....... string[] portNames = System.IO.Ports.SerialPort.GetPortNames(); for (int i = 0; i <= portNames.Length - 1; i++) { cbbCOMPorts.Items.Add(portNames[i]); } btnDisconnect.Enabled = false; }[/CODE] في حدث الضغط على زرار الاتصال ننفذ الكود التالي :- [CODE language="CS"]private void btnConnect_Click(object sender, EventArgs e) { //-- لغلق المنفذ اذا كان مفتوحاً if (serialPort.IsOpen) { serialPort.Close(); } try { //-- نحدد بعض خصائص المنفذ لكي يكون جاهز للاتصال serialPort.PortName = cbbCOMPorts.Text; serialPort.BaudRate = 9600; serialPort.Parity = System.IO.Ports.Parity.None; serialPort.DataBits = 8; serialPort.StopBits = System.IO.Ports.StopBits.One; serialPort.Encoding = System.Text.Encoding.Unicode; //-- لفتح المنفذ serialPort.Open(); //-- تحديث اداة العنوان بالحالة الجديدة للمنفذ وتعطيل زرار الاتصال وتفعيل زرار انهاء الاتصال lblMessage.Text = cbbCOMPorts.Text + " connected."; btnConnect.Enabled = false; btnDisconnect.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }[/CODE] قبل المضي قدما بالبرنامج نشرح الخصائص التي حددناها بالكود وهي :- - PortName : اسم المنفذ والذي تم اختياره من الكمبوبوكس - BaudRate : وهي سرعة الاتصال وتقاس بالبت في الثانية b/s - prity: وهي اسلوب اكتشاف الخطأ الذي ذكرناه في المقدمة والقيمة كما نرى تأتي من enum خاص بالكلاس والقيمة None تعني اننا لن نستخدم اسلوب اكتشاف الخطأ بمعنى انه لن يتم اضافة البت الخاص به . - DataBits : وهي عدد البت الخاص بالداتا وكما ذكرنا يمكن ان تكون 4 , 5 , 6, 7 , 8 - StopBit : وهي البت التي تحدد نهاية الرسالة المرسلة والتي كما ذكرنا يمكن ان تكون 1 , 1.5 ، 2 - Encoding : تخص نوع تشفير البيانات المرسلة ( الافتراضي هو ASCII ويمكن ان لا نحددها اذا كانت الرسالة باللغة الانجليزية اما اذا كانت الرسالة باللغة العربية فيتعين علينا تحديده بالقيمة الموجودة بالكود Unicode ) في حدث الضغط على زرار انهاء الاتصال ننفذ الكود التالي :- [CODE language="CS"]private void btnDisconnect_Click(object sender, EventArgs e) { try { //-- لانهاء الاتصال وغلق المنفذ serialPort.Close(); //-- update the label and enable and disable buttons lblMessage.Text = cbbCOMPorts.Text + " disconnected."; btnDisconnect.Enabled = false; btnConnect.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }[/CODE] في حدث الضغط على زرار ارسال ننفذ الكود التالي :- [CODE language="CS"]private void btnSend_Click(object sender, EventArgs e) { try { serialPort.Write(txtDataToSend.Text + Environment.NewLine); txtDataReceived.AppendText(">" + txtDataToSend.Text + Environment.NewLine); txtDataReceived.ScrollToCaret(); txtDataToSend.Text = String.Empty; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }[/CODE] لارسال الرسالة نستخدم الدالة Write الخاصة بالكائن serialPort والتي تستقبل متغير من النوع نص string وهي الرسالة المراد ارسالها , او مصفوفة من الحروف , او مصفوفة من النوع Byte والدالة ScrollToCaret الخاصة بـ RichTextBox تقوم بتحريك ScrollBar الى اسفل لكي يظهر الجزء الموجود به النص الجديد نلاحظ ان عملية الارسال سهلة فقط استخدام الدالة Write , أما لاستقبال البيانات من المنفذ فهناك بعض الامور التي يجب معرفتها فهناك حدث خاص بالاداة Serial Port وهو DataReceived وهذا الحدث يتم تفعيله عند استقبال المنفذ اي بيانات اتوماتيكيا لذا اذا كنا استخدمنا الاداة الموجودة بصندوق الادوات ووضعها على الفورم , فعند رؤية الاحداث الخاصة بها سنرى هذا الحدث في صندوق الخصائص ونكتب الكود المراد تنفيذه , أما في حالتنا هذه وقد قمنا بانشاء كائن من الاداة باستخدام الكود فيتعين علينا اضافة EventHandler الخاص بهذا الحدث بالشكل الاتي :- [CODE language="CS"]private void Form1_Load(object sender, EventArgs e) { //-- Set the eventhandler for the DataReceived event. serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived); ....... ...... ...... [/CODE] أيضا يجب معرفة أنه لا نستطيع قراءة الرسالة المستقبلة وعرضها مباشرة على الاداة الخاصة بعرض الرسائل وذلك لأنه يتم استقبال البيانات من المنفذ على Thread أخر غير الرئيسي الذي تم تنفيذ البرنامج عليه ( Thread : تقسيم فرضي للمعالج لكي يستطيع تنفيذ اكثر من عملية في نفس الوقت ) وهذا يعني اننا لن نستطيع تحديث الادوات الموجودة على الفورم( اي الموجودة على Thread الرئيسي للبرنامج ). لذلك نستخدم الدالة BeginInvoke والتي تمكننا من التعامل مع Thread اخر غير الرئيسي , لكن هذه الدالة تأخذ متغير من النوع Delegate . لذلك علينا ان ننشأ Delegate جديد وبه الدالة ننشأ الدالة التي ستقوم بتحديث الادوات على الفورم بالشكل الاتي :- [CODE language="CS"]private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { txtDataReceived.BeginInvoke(new myDelegate(updateTextBox)); } public delegate void myDelegate(); public void updateTextBox() { // -------- في حالة استقبال بيانات باللغة العربية ---------------- //-- معرفة عدد البايت الذي تم استقباله -- int bytesToRead = serialPort.BytesToRead; //-- تعريف مصفوفة من النوع حرف . char[] ch = new char[bytesToRead]; int bytesRead = 0; //قراءة البيانات المستقبلة وملآ مصفوفة الحروف بها . bytesRead = serialPort.Read(ch,0,bytesToRead); // استخراج النص من مصفوفة الحروف string str = new string(ch, 0, bytesRead); //تحديث الاداة على الفورم بالنص المستقبل txtDataReceived.AppendText(str); txtDataReceived.ScrollToCaret(); #endregion // في حالة استقبال بيانات باللغة الانجليزية . //txtDataReceived.AppendText(serialPort.ReadExisting()); //txtDataReceived.ScrollToCaret(); }[/CODE] نلاحظ اننا في حالة استقبال رسالة باللغة الانجليزية ASCII code نستخدم الدالة ReadExisting الموجودة بالكلاس SerialPort أما في حالة استقبال رسالة باللغة العربية Unicode لا نستطيع استخدام هذه الدالة وبدلا منها نستخدم الدالة Read بهذا نكون قد انتهينا من أول برامجنا في التعامل مع Serial Communication او الاتصال المتوالي اتمنى ان يكون الموضوع سهل والشرح والكود مفهوم وغير مبهم . دمتم سالمين .... وبالتوفيق للجميع ..... 

 اسم العضو:Prof.Mendl  السبت,09/رمضان/1430 هـ,02:45 مساءً
[SIZE=3][COLOR=#0000ff][ALIGN=CENTER]بسم الله الرحمن الرحيم[/ALIGN][/COLOR][/SIZE] انتهينا في المشاركة السابقة من عمل برنامج محادثة (يستخدم طريقة الاتصال المتوالي Serial Communication ) . في هذه المشاركة سنطور هذا البرنامج لكي يتفاعل مع بعض الاجهزة المدعمة لطريقة الاتصال المتوالي هذه مثل Bluetooth Handset ومنها اجهزة الجوال والتي تدعم Bluetooth . هذه الاجهزة تستخدم تقنية Bluetooth والتي تستخدم طريقة الاتصال المتوالي للربط مع جهاز اخر . [B]لذلك ما نحتاجه لاختبار الكود هو :-[/B] - جهاز جوال يدعم Bluetooth . - جهاز محول Bluetooth لجهاز الكمبيوتر ( ليجعله يدعم الاتصال بـ Bluetooth ) وللتفاعل مع تلك الاجهزة يتم استخدام اوامر AT وهي اوامر تستخدم للتحكم في اجهزة الاتصال المتوالي مثل Modem , كذلك معظم اجهزة الجوال تدعم تلك الاوامر وهي ما سوف نستخدمه للتفاعل مع الجوال . [B]اختبار مبدئي :-[/B] - قم بعمل ربط بين جهازي الكميبوتر والجوال عن طريق Bluetooth سيخبرك المحول Bluetooth باسم المنفذ الذي تم استخدامه لعمل الربط وليكن فرضاً هو المنفذ COM1 . - في برنامجنا اختار المنفذ COM1 وقم بعمل اتصال عن طريق الضغط على زر Connect " اتصال " . ستجد انه قد ظهر في مربع نص الرسائل المستقبلة هذه الرسالة " AT OK " والتي تم استقبالها من الهاتف الجوال نتيجة اتصالك به عبر المنفذ COM1 . ويمكنك تجربة بعض هذه الاوامر التي في الجدول الاتي :- الامر الغرض الاستجابة من الامر AT لجذب الانتباه وبداية الحوار AT OK AT* لعرض جميع اوامر AT AT *EACS, *EAID, *EALR, *EALS, *EAM, *EAMS, *EAPM, *EAPN, and so on AT+CGMI طلب معرف المصنع ERICSSON (بافتراض ان الهاتف المستخدم هو سوني اريكسون ) AT+CGMM طلب معرف الموديل 1130202-BVT68 (بافتراض ان الهاتف المستخدم هو سوني اريكسون T68i ) ATDT+Number الاتصال برقم (والذي يكتب بعد علامة + " " AT*EVA فتح الاتصال (لبدء المكالمة ) AT+CBC? لمعرفة حالة البطارية +CBC: 0,44 (والرقم 44 يعني ان البطارية مشحونة بنسبة 44% ) AT+CSQ لمعرفة قوة الاشارة +CSQ: 14,99 (تعني ان قوة الاشارة هي 14.99 وتكون قوة الاشارة بين القيمتين صفر و 31 ) [COLOR=#ff0000][B]ملحوظة :[/B] ليس كل الهواتف تدعم نفس الاصدارة من اوامر AT لذا يجب مراجعة دليل الهاتف الجوال في هذه النقطة لمعرفة الاصدارة التي يدعمها .[/COLOR] هنا سنستخدم الامرين ATDT , AT*EVA لعمل لنتحكم بالهاتف الجوال من خلال الكمبيوتر في عملية الاتصال والرد على المكالمات الواردة . [COLOR=#ff0000][B]ملحوظة :[/B] ليس كل الهواتف تدعم هذين الامرين ( في البرنامج قام المؤلف بتجربة هذين الامرين على الهاتف الجوال سوني اريكسون T68i ).[/COLOR] والان سنضيف بعض الادوات الى الفورم الرئيسي لبرنامجنا وهي كما بالشكل : [IMG]../Uploads/60739/image/BluetoothHandsetAdd.JPG[/IMG] مربع نص txtDialNumber : لاستقبال الرقم المراد الاتصال به وزرارين واحد للاتصال والاخر للرد على المكالمة الواردة . btnDialNumber : للاتصال برقم btnAnswerCall : للرد على المكالمة الواردة والان نأتي الى الكود :- في حدث الضغط على زرار الاتصال ننفذ الكود التالي :- [CODE language="CS"] private void btnDialNumber_Click(object sender, EventArgs e) { //---لكتابة الامر ATDT الى المنفذ Serial Port -- serialPort.Write("ATDT " + txtPhoneNumber.Text + Environment.NewLine); }[/CODE] في حذث الضغط على زرار الرد على المكالمة الواردة ننفذ الكود التالي :- [CODE language="CS"] private void btnAnswerCall_Click(object sender, EventArgs e) { //---لكتابة الامر AT*EVA الى المنفذ Serial Port -- serialPort.Write("AT*EVA" + Environment.NewLine); }[/CODE] الان يمكنك التحكم في هاتفك الجوال من خلال جهاز الكمبيوتر للاتصال والرد على المكالمات الواردة عن طريق كتابة الرقم المراد الاتصال به ثم الضغط على زرار الاتصال بالرقم Dial وللرد على المكالمة الواردة يمكنك الضغط على زرار Answer Call . لاحظ أنه قد قمنا في البداية بعمل ربط بين جهازي الهاتف الجوال والكمبيوتر عن طريق Bluetooth . [COLOR=#ff0000] [B]ملحوظة أخيرة :-[/B][/COLOR] لم اقم بتجربة الكود لعدم توافر جهاز المحول لدي لجهاز الكمبيوتر حتى يمكنه الربط مع هاتفي الجوال لتجربة الكود . لذا ارجو من الاخوة المتوافر لديهم هذه الامكانية ان يجربوا الكود والبرنامج ويعطونا النتيجة او اي رسائل خطأ تظهر لهم ( مع ملاحظة التأكد من اصدارة الاوامرAT الذي يدعمها هاتفهم الجوال ). اتمنى ان يكون الكود مفهوم والموضع شيق ومفيد لكم . دمتم سالمين .... وبالتوفيق للجميع .... 

 اسم العضو:Prof.Mendl  الثلاثاء,19/رمضان/1430 هـ,10:13 مساءً
اتمنى ان يكون 100 زائر هؤلاء قد استفادوا من الموضوع . وبالتأكيد ستكون سعادتي كبيرة عندما اجد احد يقول لي ان الكود لا يعمل معي او انه يمكن ان نضيف كذا وكذا اليه . لأنني سأشعر ان هناك احد ما يتابع معي ما اكتبه . على كل حال انا غرضي الافادة للجميع و لا اريد منكم جزاءً ولا شكورا . دمتم سالمين .... وبالتوفيق للجميع .... 

 اسم العضو:Prof.Mendl  الخميس,21/رمضان/1430 هـ,11:45 مساءً
في هذه المشاركة نطبق برنامج المحادثة باستخدام الاتصال المتوالي وتقنية Bluetooth على اجهزة حاسب الجيب Pocket PC هذا لأن الكلاس Serial Port موجود ايضا في Compact FrameWork 2.0 وبالتالي يمكننا استخدامه مع اجهزة Pocket PC العتاد المطلوب للبرنامج :- - جهازي Pocket PC مدعمين لخاصية Bluetooth . ملحوظة :- المؤلف قام باستخدام الجهاز iMate JASJAR والذي يعمل على نظام تشغيل Windows Mobile 5 [IMG]../Uploads/60739/image/iMate JASJAR.JPG[/IMG] [COLOR=#ff0000]ملحوظة :- هناك بعض المشاكل التي تحدث اثناء استخدام هذا الكلاس مع اجهزة تعمل على نظام تشغيل اقدم من Windows Mobile 5 مثل فقد بعض البيانات المستقبلة وتفريغ سريع للبطارية .[/COLOR] لبناء التطبيق نتبع الخطوات الاتية :- - انشاء مشروع جديد ونختار نوعه Smart Devices ---> Windows Mobile 5 Pocket PC ----> Device Application كما بالصورة . [IMG]../Uploads/60739/image/WindowsMobile5PocketPC.JPG[/IMG] ملحوظة :- لا توجد هذه النوعية من التطبيقات مع Visual Studio 2005 افتراضيا , لذلك عليك تحميل WIndows Mobile 5 Pocket PC SDK من موقع ميكروسوفت والبحث عن المكتبة هناك على هذا الرابط :- [URL=http://www.microsoft.com/downloads]ابحث في هذا الرابط على المكتبة[/URL] - نجهز الفورم بالشكل الاتي :- [IMG]../Uploads/60739/image/WindowsMobile5PocketPC_Form.JPG[/IMG] --- الادوات الموجودة بالفورم هي :- - TextBox للنص المرسل واسمه txtMessageToSend - TextBox للنص المستقبل واسمه txtReceivedMessage وله الخواص الاتية : MultiLine : true ScrollBar: Vertical - ComboBox للمنافذ المتاحة بالجهاز واسمه cbbCOMPort ونضيف اسماء المنافذ له وهي COM1 - COM9 -Button للاتصال واسمه btnConnect - Menu للارسال واسمها miSend لن نشرح الكود لأنه نفس الكود السابق الخاص ببرنامج المحادثة الموجود في اول مشاركة . واليكم الكود :- [CODE language="CS"] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.IO.Ports; using System.Windows.Forms; namespace SerialCommChatPocketPC { public partial class Form1 : Form { SerialPort serialPort = new SerialPort(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { serialPort.DataReceived+=new SerialDataReceivedEventHandler(serialPort_DataReceived); } private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { txtMessageToSend.BeginInvoke(new myDelegate(updateReceivedMessageBox)); } public delegate void myDelegate(); public void updateReceivedMessageBox() { txtReceivedMessage.Text += (serialPort.ReadExisting()) + txtReceivedMessage.Text; txtReceivedMessage.ScrollToCaret(); } private void miSend_Click(object sender, EventArgs e) { try { serialPort.Write(txtMessageToSend.Text + "\r"); txtReceivedMessage.Text = ">" + txtMessageToSend.Text + "\r" + txtReceivedMessage.Text; txtMessageToSend.Text = string.Empty; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } private void btnConnect_Click(object sender, EventArgs e) { if (serialPort.IsOpen) { serialPort.Close(); } try { serialPort.PortName = cbbCOMPort.Text; serialPort.BaudRate = 9600; serialPort.Parity = Parity.None; serialPort.DataBits = 8; serialPort.StopBits = StopBits.One; serialPort.Open(); MessageBox.Show("Port Opened Successfully!"); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } } } [/CODE] لاختبار البرنامج :- - تقوم بعمل ربط بين جهازي الكمبيوتر وحاسب الجيب Pocket PC بواسطة ActiveSync ( ستحتاج الى تنزيلها للتعامل مع ويندوز الموبايل 5 - وهي من الضروريات لتحميل مكتبة التعامل مع ويندوز الموبايل 5 ) - تختار Windows Mobile 5 Pocket PC Device من القائمة المنسدلة كما بالشكل ، ثم تضغط F5 [IMG]../Uploads/60739/image/Run_WindowsMobile5PocketPC_Form.JPG[/IMG] بذلك يتم تحميل البرنامج الى حاسب الجيب ( Pocket PC ) كرر نفس الخطوات مع جهاز حاسب الجيب الاخر - ربط جهازي حاسب الجيب عن طريق Bluetooth وباستخدام احدى المنافذ . - ستجد المسار الافتراضي للبرنامج على جهاز حاسب الجيب في Program Files\"Program Name" ثم تشغل البرنامج على الجهازين وتختار منفذ للاتصال ومن ثم يمكنك عمل المحادثة على جهازي حاسب الجيب PocketPC اتمنى ان يكون التطبيق واضح ومفهوم . دمتم سالمين ... وبالتوفيق للجميع ... 

 اسم العضو:amanysharp  السبت,15/فر/1431 هـ,06:30 مساءً
السلام عليكم ورحمه الله وبركاته اخي العزيز اولا اشكرك على شرحك الجميل ولكن انا لدي سؤال واتمنى الاجابه عليه وهو انني اريد عمل برنامج لتحكم بالمنفذ التسلسلي يعني يكون فيه امكانيه اختيار اي com اريد التحكم فيه com1 ;com2; com3 ثم يكون فيه زرار بحيث اذا ضغط على الزرار يرسل للبورت مثلا 01101000 اي binary حدد وكذلك نفس البرنامج ولكن عندما اتكلم في المايك بان اقول يمين او يسار او فوق او تحت يرسل الكلمه التي قلتها الى البورت [IMG]http://www8.0zz0.com/2010/01/28/05/457628680.png[/IMG] http://www.youtube.com/watch?v=Qiy30AdBrPU 

 اسم العضو:Prof.Mendl  الاثنين,17/فر/1431 هـ,11:24 صباحاً
السلام عليكم ورحمة الله بخصوص السؤال الاول البرنامج الاول به هذه الخاصية وهي عرض المنافذ المتاحة والتعامل مع COM1 نفسه مع باقي المنافذ وبالنسبة للسؤال الثاني حول ارسال بيانات Binary , اذا كنت تقصد كتابة تلك الارقام وارسالها فلا جديد واذا كنت تريد الكتابة بالطريقة الاعتيادية وارسالها على شكل ثنائي فوجب عليك تحويل تلك البيانات الى شكل ثنائي عن طريق تحويل تلك الارقام الى الشكل الثنائي ولو كانت حروف تحول المقابل لها في Ascii او الرقم المرادف لكل حرف او رمز الى الشكل الثنائي ومن ثم عند الطرف الاخر تقوم بعكس العملية . اما بخصوص الاخير فستدخل في امور اخرى وهي speech recogination وهي تمييز الكلام بالاضافة الى ان كيفية التعامل مع اللغة العربية قليل الموارد ( كتب الشرح ) 

 اسم العضو:intell87  الخميس,05/ربيع الأول/1431 هـ,09:52 مساءً
greeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet thanks its a realy useful tutorial ربنا يكرمك وشكرا على الافادة (emM7_prv) 

 اسم العضو:احمد طلال  الثلاثاء,08/ربيع الثاني/1431 هـ,05:22 صباحاً
والله موضوع متعوب علية ... جزاك الله الف خير اخي الحبيب... 

 اسم العضو:casperdino  الجمعة,15/ذو الحجة/1432 هـ,11:33 مساءً
thank you man very much 

 اسم العضو:Max Bayne  الخميس,04/فر/1433 هـ,03:22 صباحاً
جزاك الله خيرا اخي الكريم كنت اتمنا تنسيق الموضوع اكثر حتي يكون جزابا للقراءة والمتابعة ولكن جزاك الله خيرا والله الموفق والمستعان 

 اسم العضو:صعبه المنال  الأربعاء,17/رجب/1433 هـ,10:06 مساءً
[SIZE=5]شكرا اخي على الموضوع الاكثر من رائع ولكن عندي استفسارات ادا مافي ازعاج هل ممكن من خلال الاكواد اعمل تسجيل للمكالمات او عمل تقارير عن عدد المتصلين وعرضها اداممكن تضع الاكواد المختصه بها الشي وكمان هل في بطئ في عمليه الشات لانه بخط الهاتف الارضي؟ وعفوا ع الاطاله[/SIZE] 

 اسم العضو:salafyboss  الأربعاء,27/شعبان/1435 هـ,05:45 مساءً
بسم الله ماشاء الله موضوع ممتاز بارك الله لك اخي الحبيب لم استطع تحميل الكتاب فهل اطمع ان يساعدني احد الزملاء برفعه مرة اخري جزاكم الله بكل خير 

جميع الحقوق محفوظة لـمنتديات المحيط العربي 2004 - 2019