• 0
jemy man

التحكم ب بورت LPT

سؤال

السلام عليكم ورحمة الله وبركاته

اريد المساعدة منكم في موضوع التحكم ب بورت LPT عن طريق لغة الجافا؟؟؟؟؟؟؟؟

انا اعمل مشروعي هو التحكم بمتورين فاريد ان ارسل له اشارة عن طريق بورت ال LPT او ال USB ولكن ال USB اطن انه صعب على الجميع لذا قررت العمل على ال LPT .

للايضاح :

انا اعمل مشروع تخرج في جامعة النجاح في فلسطين قسم علوم الحاسوب

(ارجوالافادة ان كانت الفكرة جيدة او ضعيفة مع الافادة بما هو الخلل)

مشروعي هو كالاتي:

اريد التحكم بكاميرا عن طريق لغة الجافا (وذلك لوجود GUI سهل فيها)

هذه الكاميرا مركبة على متوريت احدهما يحركها افقي و الاخر عمودي ( وهذا هو الجزء الصعب الاول) عن طريق احد البورتات الموجودة في الكمبيوتر

طبعا سوف يكون هناك برنامجين (Client & Server) وذلك لتنظيم عملية التحكم بالكاميرا اي انه لا يجوز تحكم اكثر من مستخدم بالكاميرا بنفس الوقت (وهذا هو الجزء الثاني "لا اظن انه صعب")

وطبعا صورة الكاميرا يجب ان تظهر على البرنامج و هنا ايضا اواجه مشكلة

طبعا انا اواجه كل هذه المشاكل لانني بدات منذ يومين بالبرنامج ومعلوماتي الدراسية كما يعلم الجميع لن تكون شامله لهذه الافكار

لذا انا احاول الحصول على المعلومات اللازمة لاتمام المشروع بنجاح

ارجوالافادة ان كان البرنامج يستحق العناء ام اغير فكرة المشروع او اعطائي اجوبة لاستفساراتي

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

17 إجابة على هذا السؤال .

  • 0

بالحقيقة و يا محاسن الصدف

الآن امام عيني على طاولتي دارة للتحكم عن بعد موصولة بنفذ الطابعة و اتحكم بسيارة فيها محركين واحد لليمين و اليسار و الثاني للامام و الخلف

و اظن ان هذا هو طلبك

سوف ارفق الكود المناسب لك بعد قليل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذه اسهل طريقة صدقني كلامي بعد اكثر من تجربه

import parport.ParallelPort;

class Ra {
  public static void main ( String []args )
  {
     ParallelPort lpt1 = new ParallelPort(0x378); // 0x378 is normally the base address for the LPT1 port
     int aByte;
     aByte = lpt1.read(); // read a byte from the port's STATUS pins
     System.out.println("Input from parallel port: " + aByte);
     aByte = Integer.parseInt(args[0]); // a simple and irrelevant operation
     lpt1.write(aByte); // write a byte to the port's DATA pins
     System.out.println("Output to port: " + aByte);
  }
}

ستحتاج ملفين

ضعهما كما هما بجانب الكلاس المولد حتى يعمل كل شئ

parport.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الكود بسيط كما ترى كتبت لك بعض الشرح و اذا كان لديك اي استفسار فاطرحه هنا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا اخي رامي كثير كثير

يعني انت انقذتني ووفرة علي ايام و اسابيع من البحث اللذي يمكن يكون بلا فائدة

بس بدي استفسر عن الكود اللذي اعطيتني اياه و يمكن تكون اسالتي (تافه وغبية) و لكن انا محتج اجوبة:

1- طبعا انا بدي احرك يمين وشمال يعني هل يلزمني (PIC) او يمكن ابعث بالاشارة الى دائرة المتور؟؟؟؟؟؟

2- القيم اللي بنبعثا للبورت وين نضعها هل في الـ (aByte)؟؟؟؟

3- يمكن القراءة من البورت صح عن طريق(lpt1.read) بس ما هي الاشارة التي ادخلها كم فولت وهل اشبك على البور مباشرة ام عبر دائرة؟؟؟؟؟؟

اذا في عندك صورة توضيحية لعملية شبك الاسلاك وما الى ذلك ارجوالافاده

طبعا انا بسأل هذه الاسئله لاني ادرس علوم حاسوب ولس هندسة حاسوب يعني انا لاافقه شيء عن ال(hardware) بس حابب اتعلم

و مرة اخرى شكرا كثير كثير على المساعدة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اخى jemy man

هاحاول اجاوبك على بعض الاسئلة

- طبعا انا بدي احرك يمين وشمال يعني هل يلزمني (PIC) او يمكن ابعث بالاشارة الى دائرة المتور؟؟؟؟؟؟

لو كنت تقصد تحريك موتور فى اتجاهين مختلفين فيمكنك استخدام relay

- القيم اللي بنبعثا للبورت وين نضعها هل في الـ (aByte)؟؟؟؟

لم افهم السؤال

- يمكن القراءة من البورت صح عن طريق(lpt1.read) بس ما هي الاشارة التي ادخلها كم فولت وهل اشبك على البور مباشرة ام عبر دائرة؟؟؟؟؟؟

ايضا لم افهم السؤال جيدا

ولكن عموما ,

يفضل عند استخدام الparallel port عدم استخدامه كمصدر للبور ولكن تستخدم مصدر بور خارجى وتستخدم ال parallel port ك switch فقط وذلك با ستخدام relay اذا كان الفولت قيمته كبيرة او ترانزستور اذا كانت الفولت صغير (فى حدود 25 فولت)

وذلك لتفادى اى مشكلة من الممكن ان تؤدى الى تلفه وربما تؤثر على البوردة لانه لايتحمل اكثر من 5 فولت و12mA

والفولت التى تحصل عليه منه لا يتعدى 5 فولت و 12mA

بالنسبة لموضوع ادخال اشارة على ال parallel port راجع الموضوع التالى

سلسلة دروس لشرح التعامل مع الparallel port وكيفية التحكم فى الاجهزة من خلاله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

المرفق صورة التوصيل باستخدام ريلي و كما قال الاخ لا تستخدم منفذ الطابعة كمصدر صحيح ان فولتط عالي و لكن لا يتجاوز 1 ميلي امبير يعني لا يقدر يشغل الا led و كثير عليه

هل تعرف كيفية توصيل الترانزيستور

post-6528-1127481128_thumb.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ...

لقد جربت طريقتك استاذ رامي العيساوي ولكن لم تفلح حيث تتم عمليه الترجمه بشكل صحيح , ولكن عند التنفيذ يحصل إستثناء ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا هو الاستثناء الذي يظهر :

Exception in thread "main" java.lang.UnsatisfiedLinkError: no parport in java.library.path
       at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1403)
       at java.lang.Runtime.loadLibrary0(Runtime.java:788)
       at java.lang.System.loadLibrary(System.java:832)
       at parport.ParallelPort.<clinit>(ParallelPort.java:71)
       at Ra.main(Ra.java:6)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انت وين وضعت ملف المكتبة.. المرفق يوجد ملف يمكن dll او ما شابه لازم يكون بجانبه

ضع كل شئ كما هو بجانب الملف javac مثل ما هو تماما المجلدات و الملفات لا تغير شئ و سوف يعمل ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

انا بشكر كل اللذين يحاولون مساعدتي (خاصة رامي و هاني) و اتمنى انهم يستحملوني لاني لست خبير بالهردوير (يعني الصبر علي)

المهم يا اخ هاني (hanysaad) الاسئله التي لم اوضحها سوف اطرحها بشكل اوضح .......

1- لنفرض اني ادخلت في المتغير (aByte) قيمه (1) فهذه القيمة على اي (PIN) سوف تظهر من الـ(PINs) التي للـ(Data) في (LPT) ؟؟؟؟؟ اي كيف يمكنني ان اعرف اي الـ(PINs) سوف تعطي اشارة عند ارسال رقم معين لكي اشبك هذا البين على المفتاح الذي سوف يغلق مثلا دائرة المتور الاول ؟؟؟؟؟ اتمنى اني اوضحت السؤال

2- بالنسبة لعملية القراءة اقصد بها انه في الكود الذي زودني به المشكور (رامي) الجملة التالية:

lpt1.read(aByte);

وهو يقرأ من البورت و يعيد القيمه المقروأه الى المتغير (aBtye) السؤال هو

ماهي ال(PINs) التي سوف اقرأ منها؟؟ يعني عندما اريد ان اعمل مثلا انذار اني وصلت الى مكان معين وذلك سوف يكون عبر اغلاق دائرة معينه فهذه الدائرة تكون موصوله مع البورت على بين معين (ماهو ؟ وكيف اختارة؟)

3- لقد واجهت نفس مشكلة (mohmf) مع العلم اني وضعت المجلد (parport) و الملف (win32com.dll) و الملف (Ra.java) في نفس المجلد ولكن نفس المشكل ارجو الافادة يارامي لوسمحت

اتمنى ان اكون اوضحت الاسئله وااااااااااااااااااااااسف على الاسئلة الكثيرة

تم تعديل بواسطه jemy man
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اين في اي مجلد وضعت ( المجلد - dll - ra.java ) ضعهم بداخل

bin

بجانب javac يعني

كما تعرف بان pin الذي تستطيع ارسال اشارات لهم هم 2- 3- 4- 5- 6- 7-8 -9 على ما اذكر و هنالك اربعة in and out و هنالك الباقي و هم سالب

ادخل على الحاسبة مال الويندوز و اجعلها علمية اكتب رقم و من ثم حوله الى bin و سوف تجد رقم من الاصفار و الواحدات مثلا ( 11010 ) هذا سوف يطفئ 2 و يشغل 3 و يطفئ 4 و يشغل 5 - 6

فهمت علي؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

<_< مختصر بس مفيــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــد

شكرا الك و بالنسبة لل(PINs) قرأة مضوع هاني وكان مفيد مع انه على لغة ثتانية بس الفكرة نفسها

وانا رح اجرب اضع الملفين مع ملف ال(bin)و بحكيلك عن النتيجة

وشكرا تاني مرة ومرة :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

النتيجة ....................

الكود لا يعمل مع تجربة

ارجو ان تضيف الايميل الخا بي عندك على المسنجر لكي تشرح الطريقة مع التطبيق العملي المباشر

اليميل هو:

[email protected]

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اخى jemy man

بالنسبة لاسألتك انا لا اعرف الكثير فى لغة الجافا

ولكن اسألتك تدور حول كيفية التعامل مع ال lpt عموما لذلك راجع الرابط الذى ذكرته لك ثانية وخصوصا الدرس الثانى والثالث والرابع

اخى رامي العيساوي

كما تعرف بان pin الذي تستطيع ارسال اشارات لهم هم 2- 3- 4- 5- 6- 7-8 -9 على ما اذكر و هنالك اربعة in and out و هنالك الباقي و هم سالب

بالتحيد يتكون ال parallel port من25 pin مقسمين الى ثلاثة اقسام كالتالى :

(Data port (8 pin) in and out

Status port (5 pin) input only

Control port (4 pin) in and out

بالاضافة الى 8 pin ارضى او Ground

والصورة التى توضح ذلك تجدها فى الموضوع

http://www.arabteam2000-forum.com/index.ph...ndpost&p=365889

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالنسبة للحزمة اذا لم تعمل ربما هنالك اشياء اخرى يجب ان تضيفها حاول ان تبحث عن مصدر الحزمة "parport.ParallelPort"

و عندها افتهم من اللي اخترعو هذه الحزمة و بالنسبة للمسنجر فلا يوجد شئ جديد لكي اقوله لك و اصلا انا لا ادخل الا قليل بسبب انشغالي التام ببرمجة النظام البنكي الخاص بالموقع

لذا اعتذر مجدداً و آسف اكثر و اي سؤال آخر بعد قيامك بالبحث اللازم اطرحه هنا و سوف اقوم بمساعدتك قدر المستطاع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا اخي رامي على هذا الموضوع

لقد قمت باخذ الحزمة وقد افادتني كثيرا بمشروعي

ولكن عندي سؤال وهو كيف استطيع ان اقرا حالة البنات الثمانية

توضيح:

عندما اقوم بوضع قيمة 16 مثلا على البورت سوف يعطي قيمت 1 للبن رقم 5

 lpt1.write(16);

ولكن عندما اقوم بعمل قرائة فلا يرجع البرنامج 16 فدائما يرجع 127 مهما كانت حالة البنات الثمانية

lpt1.read();

فكيف استطيع ان اقوم بوصل البنات بشكل صحيح حتى يعطيني القيمة الصحيحة عند القرائة؟؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لقد وجدت الحل لمسألة القرائة

وهي ان نغير عنوان الادرس من 0x378 الى 0x377

وبعدها نقوم بالقرائة فيعطينا القرائة الصحيحة للبنات الثمانية

فاذا كان البن الاول شغال يعطي 1

واذا كان البن الثاني شغال يعطي 2

فاذا كان البن الثالث شغال يعطي 4

فاذا كان البن الرابع شغال يعطي 16

فاذا كان البن الخامس شغال يعطي 32

وهكذا.................................

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .