الثلاثاء، 25 فبراير، 2014

Arduino Due USB Host

لوحة المفاتيح Keyboard


توفر الأردوينو ديو DUE امكانيات كبيرة من ناحية المعدات Hardware اذا يمكنك توصيل عدة أجهزة بها عن طريق منفذ ال USB و الحصول على تحديثات من هذا الجهاز المتصل , و حتى اجراء عمليات تحكم عن طريقه .


من أهم هذه الأمثلة لوحة المفاتيح , و التي يمكننا بسهولة وصلها مع الأردوينو ديو DUE و كتابة برنامج بحيث نستفيد من الأوامر القادمة عن طريقه سواءاً بالقراءة او حتى التحكم بالعمليات المختلفة .

سأقدم عرضاً بسيطاً لهذه الأمكانيات , بالأضافة لعرض أهم الأوامر المستخدمة

في البداية ما ستحتاجه هو :





1)أردوينو ديو DUE
2)لوحة مفاتيح keyboard بمنفذ usb
3) اسلاك توصيل
4)وصلات لتوصيل لوحة المفاتيح بالأردوينو ديو DUE
5) مقاومات 510 اوم عدد 4.
6) بواعث ضوئية LED عدد 4 .

انتبه : لا تقوم بتوصيل البواعث الضوئية LED بدون مقاومات على الأقل 510 اوم , لان الديو DUE تيارها محدود جداً و لو ارتفع لحدود اعلى من 15ملي امبير ممكن ان يسبب تلفاً للبطاقة




كتوصيلة , لن تحتاج سوى لتوصيل لوحة المفاتيح بالمنفذ USB Native في الأردوينو و توصيل الأردوينو بالحاسوب عبر منفذ البرمجة programming port , و من ثم تحميل البرنامج .

تأكد من انك تستعمل نسخة اردوينو 1.5 او أكثر لأن الاصدارات القديمة لا تدعم الديو DUE .

اختار المنفذ التسلسلي الصحيح للاردوينو DUE و اختار Arduino Due Programming port من لائحة اللوحات Boards و حمل البرنامج .

البرنامج في الأسفل :


// Require keyboard control library
// this code for Arduino DUE , To be a USB Host for 
//Keyboard.
//Written for Genotronex blog
//http://www.genotronex.com
// Mohannad Rawashdeh

#include <KeyboardController.h>

USBHost usb;

KeyboardController KEYBOARD(usb);

char c;
void setup() {
  // put your setup code here, to run once:
   Serial.begin(38400);
   delay(1000);
   pinMode(10,OUTPUT);
   pinMode(11,OUTPUT);
   pinMode(12,OUTPUT);
   pinMode(13,OUTPUT);  
}
// each Controller Library need to has it's own Void
// when keyboard button pressed , Enter to this void 

void keyPressed(){
  
 Serial.print("Button pressed is :");  
  c=KEYBOARD.getKey();
  //check if we pressed any modifiers key
  int mod = KEYBOARD.getModifiers();
  Serial.print(" modifier:");
  Serial.print(mod);

  Serial.print(" >>> ");

  if (mod & LeftCtrl)
    Serial.print("L-Ctrl ");
  if (mod & LeftShift)
    Serial.print("L-Shift ");
  if (mod & Alt)
    Serial.print("Alt ");
  if (mod & LeftCmd)
    Serial.print("L-Cmd ");
  if (mod & RightCtrl)
    Serial.print("R-Ctrl ");
  if (mod & RightShift)
    Serial.print("R-Shift ");
  if (mod & AltGr)
    Serial.print("AltGr ");
  if (mod & RightCmd)
    Serial.print("R-Cmd ");
    Serial.println(c);
    Led_State();
}
void Led_State(){
  if(c=='o'){
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
    digitalWrite(12,LOW);
     
}
 if(c=='p'){
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);
    digitalWrite(12,LOW);
    
}
if(c=='q'){
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    digitalWrite(12,HIGH); 
}
}
void keyReleased(){
  // when butto released , the code pointer miove to here
  // we don't need to do any thing here
}
  
  

void loop() {
  // put your main code here, to run repeatedly: 
   usb.Task();
  
}

كشرح للأوامر كالآتي :

ستحتاج لتحميل المكتبة الخاصة بالوحة المفاتيح كالآتي

#include <KeyboardController.h>


ثم تعرف الأسم الوسيط للمكتبة كالآتي
USBHost usb;


و من ثم تعرف هذا الوسيط على انه لوحة المفاتيح كالآتي
KeyboardController KEYBOARD(usb);


هذا الأمر يوضع في جملة استدعاء خاصة , وظيفته كلما ضغطت على زر في لوحة المفاتيح سوف ينتقل البرنامج اليه و ينفذ الأوامر التي بداخله .

void keyPressed()



في حال انهيت الضغط على احد ازرار لوحة المفاتيح , ينتقل البرنامج لهذا الأمر الذي يوضع في جملة استدعاء خاصة .
void keyReleased()

يمكن معرفة الزر الذي تم الضغط عليه من خلال الأمر :



void keyReleased()

ازرار خاصة , ازرار ال ctrl, alt shift تخضع لوضع خاص يمكن معرفة اذا ما تم الضغط على احد هذه الأزرار عن طريق الأمر :
getModifiers()

و الذي يعُيد return لنا قيمة صحيحة كالآتي :


LeftCtrl = 1
LeftShift = 2
Alt = 4
LeftCmd = 8
RightCtrl = 16
RightShift = 32
AltGr = 64
RightCmd = 128


و في النهاية لا ننسى الأمر  الذي يوضع في جملة الدوران ليعطي التحكم للأوامر القادمة من الجهاز المربوط بمنفذ ال USB


usb.Task();

هذا الفيديو يوضح نتيجة هذا البرنامج .



يمكنك فعل المشاريع التالية , و التي قمت بها انا , مثلاً :

1) استخدام لوحة المفاتيح لأدخال أحرف و كلمات و عرضها على شاشة LCD

2)
 استخدام لوحة المفاتيح لأدخال أحرف و كلمات و عرضها على شاشة مضيئة LED

3) وضعها كنظام حماية من خلال تعيين كلمة سر من خلالها .

4) تحويل الأرقام و الأحرف المدخلة لوسيلة تحكم , كما هو في الفيديو .


16 التعليقات :

  1. شكرا يا اخي الفاضل علي هذا الموضوع القيم....من فضلك اريد ان اعرف الخطوات لجعل لوحة المفاتيح ترسل احرف و كلمات من خلال DUE الي الكمبيوتر

    ردحذف
    الردود
    1. جرب الكود فقط و هو يتضمن ارسال احرف و كلمات حتى :)

      حذف
  2. اولا اريد ان اشكرك علي الرد....كلامك صحيح لك الكود لا يعمل الا علي (serial monitor of arduino IDE application ) كيف اجعل الكود يعمل علي اي برنامج علي الكمبيوتر

    ردحذف
    الردود
    1. يمكن ان يعمل على اي برنامج سيريال المهم حدد منفذ COM Port الصحيح

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

      حذف
  3. هل ممكن ان تساعدني اكثر و توضح لي هذه المكتبة.

    ردحذف
  4. السلام عليكم ورحمة الله وبركاته
    اخي العزيز اريد عمل جهاز يحوي على اردوينو ديو uno يرسل كلمة انا اكتبها ويستقبلها جهاز آخر يحتوي على اردوينو آخر فتظهر الكلمة على شاشة LCD مركبة على المستقبل ممكن اعطائي اسماء القطع بالتفصيل اللازمة وفصل قطع الرسل والمستقبل شاكرا جهودك...

    ردحذف
    الردود
    1. استخدم nrf24L01 او استعمل Xbee كمرسل و مستقبل , اردوينو و شاشة و وسيلة ادخال للكلمات التي تريد ارسالها .

      حذف
    2. أزال المؤلف هذا التعليق.

      حذف
    3. شكرا..بس ممكن بالتفصيل عن المواد اللازمة وفصل مواد المرسل عن المستقبل وما الطريقة الاسهل لادخال الكلمات
      وكم مسافة بث xbee ؟
      آسف على ازعاجك...

      حذف

      حذف
    4. اردوينو اونو
      اردوينو ديو
      XBEE And Xbee programmer
      Or use 2 NRF24L01
      LCD
      المدى بين 100م - 1 كم حسب النوع

      حذف
  5. ما شاء الله يا بشمهندس مدونه رائعه للعالم العربي بالكامل اعزك الله وزاد علمك
    انا كنت بستفسر عن موضوع اسمه android open accessory
    وده ربط الاردوينو مع الاندرويد ياتري تقدر تزودنا من علمك حول الموضوعه؟

    ردحذف
    الردود
    1. شكراً للاطراء
      هناك طرق عديدة منها استخدام usb host shield او استخدام arduino mega ADK فهو يدعم هذه الخواص مع الأندرويد

      حذف
  6. السلام عليكم ممكن برمجه لوحه مفاتيح 3×4 وربطها مع شاشه 2×16 لأدخال باسورد صحيح وألا سيعمل جهاز الانذار

    ردحذف
  7. شكرا على العمل الرائع
    حابب اربط جهاز باركود ع arduino due واخد الرقم الجاي من الباركود لأغراض تحكم تانية
    ارجو المساعدة

    ردحذف
  8. ممكن تشرح ازاي اربط usb joystick بالاردوينوا ديو

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.