CopyPaste DIY keyboard أو لوحة المفاتيح المثالية في عالم حيث تتم كتابة كل سطر من التعليمات البرمجية بالفعل

يطرح السؤال الكثير من الأشخاص الذين بدأوا لتعلم البرمجة - هل من المقبول نسخ ولصق كود شخص آخر؟ بالنظر إلى أن الشخص مخلوق كسول ، وأن وقت المبرمج يكلف المال - الإجابة ، في رأيي ، واضحة - نعم. ولكن بالنسبة للأشخاص الذين ينقلون هذا المبدأ إلى درجة السخف ، والذين ينسخون بدون تفكير أو فهم ، وأيضًا لأولئك الذين يكتبون دبلومًا ، فإن هذا المقال مخصص لهذه لوحة المفاتيح والمقالة. ونعم ، تحتوي لوحة المفاتيح هذه على زرين بالضبط - النسخ واللصق.

صورة

تحت القطع ستكون قصة عن التجميع والبرامج الثابتة - حتى سنرى ارتداد محلل منطقي

لذا ، قررت تجميع لوحة المفاتيح هذه. قررت أن أبدأ بالمكونات - digispark (وشاح صغير مع attiny85 وربط USB يمكن إدخاله مباشرة في الكمبيوتر) يتيح له التقاط ضغطات المفاتيح ومحاكاة لوحة المفاتيح. الآن ليس لدي أزرار - ليس لدي أزرار ميكانيكية عادية للوحة المفاتيح ، لكني لا أرغب في الانتظار ، لذا دعنا نأخذ أزرار smd. مثل هؤلاء:

أزرار


بعد تحديد المكونات ، سنقوم الآن برسم اللوحة الأمامية لطباعتها على طابعة في المستقبل. الأبعاد 45 مم * 21 مم ، أحجام الوسادة للأزرار 10 مم * 10 مم
اكتب شيئًا في الأعلى والأسفل.

اتضح شيء من هذا القبيل:



المشكلة التالية هي أزرار smd ، لذلك يجب لحامها إلى نوع من الألواح. نظرًا لأن تسمم اللوح من أجل مثل هذا الشيء لا معنى له - فنحن نخدش القماش مع الحرف T:



المسافة بين مراكز الأزرار هي 15 ملم. قم بلصقها على لوحة مرتجلة.

نحن لحام ثلاثة أسلاك. عند الضغط على الزر ، سيغلق أحد الأسلاك الخارجية إلى المركزي.



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

يجب أن تكون النتيجة ما رأيته في بداية المقال. زاوية أخرى.



لذا ، بمساعدة الأجهزة البسيطة ، يمكنك إنشاء لوحة مفاتيح بزرين ، ولكن لماذا؟


نقوم بتوصيل ثلاثة أسلاك في digispark.



مخطط "لوحة المفاتيح"



بعد ذلك ، نحتاج إلى جعل digispark يتظاهر بأن يكون لوحة مفاتيح وإرسال CTRL + C / CTRL + V بالضغط على الزر.

لذا ، نحتاج إلى التقاط النقرة. بادئ ذي بدء ، إذا قمت بتوصيل السلك المركزي بـ + 5 فولت وقمت بتوصيل الأسلاك الجانبية بالدبابيس المكونة للإدخال ، فعند الضغط على الزر ، نعم ، سيكون هناك 1 على الدبوس ، ولكن عندما لا يتم الضغط على الدبوس ، فسوف يلتقط التداخل ويفشل في تتبع ما هو إلحاحا ، وما عائق. يتم حل هذه المشكلة ببساطة مدهشة - تحتاج إلى سحب المسامير على الأرض من خلال المقاوم الكبير (عشرات الأوم). عند فتح ورقة البيانات على وحدة التحكم الدقيقة ، يمكنك أن ترى أنه بداخلها يمكنك تشغيل المصعد ، ولكن فقط إلى VCC (+ الطاقة). في الواقع ، هذه ليست مشكلة - تحتاج فقط إلى توصيل الدبوس المركزي بـ GND (الأرض) وعكس منطق العمل.

يمكنك أن تتخيلها بهذه الطريقة:



ولكن هناك مشكلة أخرى. نحن نعيش في عالم غير كامل حيث الأزرار بها اتصال ميكانيكي.
وهو ناقص. ووحدة التحكم الخاصة بنا سريعة - وبالتالي اتضح أنه في وقت تبديل الزر لا يغلق على الفور ، لكن مقاومته تقفز لبضعة ميلي ثانية - وهذا يسمى الارتداد. نظرًا للارتداد ، قد تقرر وحدة التحكم الضغط على الزر أكثر من مرة ، ولكن ، على سبيل المثال ، 10. فيما يلي توضيح لهذه الظاهرة من الإنترنت:



ولكنها أيضًا ليست مثيرة للاهتمام! ربما ليس لدينا أي ارتداد. لمعرفة ذلك ، اكتشفت محلل منطقي. لنرى الآن ... نحن نقوم بتجميع إعداد اختبار - رفع 10-com ، 16 مليون قياس في الثانية

التركيب


نرى أن الضغط استمر 0.1176 مللي ثانية. نحن تقريبًا



لحظة تحرير الزر (مظللة باللون الأحمر).



على الجانب هناك بعض قياسات "الانبعاثات" ، وفي جميع الارتداد استمر حوالي 0.1435 مللي ثانية. نعم ، أعلم أن هذا ليس كافيًا ، ولكن من الجدير بالذكر أن لدي فقط أزرار من الشريط ، ولم يكن لدى جهات الاتصال الوقت حتى الآن لأكسدة أو تغيير الشكل. وبمرور الوقت ، سيزداد الوضع سوءًا. كيف تتعامل مع الارتداد؟ هناك ثلاث طرق رئيسية:

  1. مشغل Schmidt + RC - يسمح لك بالحصول على الإشارة المثالية
  2. دائرة RC - تسمح لك بعمل شريحة للانبعاثات (زيادة الإشارة بسلاسة)

ولكن لدينا وحدة تحكم دقيقة كاملة - وبالتالي لدينا 3 طرق متاحة: التأخيرات.
إحدى طرق التعامل مع الارتداد هي التحقق مما إذا كان الزر لا يزال يتم الضغط عليه بعد مقدار معين من الارتداد. إذا تم تنفيذ التعليمات البرمجية من خلال التأخير ، فسيتم حظر الرمز ، ولكن يمكن رؤية كيفية القيام بذلك بشكل صحيح في مئات المقالات حول مكافحة الارتداد و arduino.

لذا ، أدركنا أن الزر مضغوط - ماذا بعد ذلك؟ أخبر الكمبيوتر أنه تم الضغط على CTRL + C / V.

يتم ذلك باستخدام المكتبة القياسية ل digispark.

جاء الرمز الناتج على النحو التالي:

#include "DigiKeyboard.h" // library for emulate keyboard
#define COPY 2 // copy button pin
#define PASTE 0// paste button pin
#define GND 1// center must be connected to ground
void setup() {
  pinMode(COPY, INPUT); // set pin to input
  digitalWrite(COPY, HIGH);// turn on pullup
  pinMode(PASTE, INPUT);
  digitalWrite(PASTE, HIGH);
  pinMode(GND, OUTPUT); // set pin to output
  digitalWrite(GND, LOW);// and set on pin GND
}


void loop() {
  // if something COPY or PASTE clicked
  if (!digitalRead(COPY) || !digitalRead(PASTE)) {
    delay(30); // wait(debounce)
    if (!digitalRead(COPY)) { // if copy still pressed send CTRL+C
      DigiKeyboard.sendKeyStroke(KEY_C , MOD_CONTROL_LEFT);
      delay(30);
    }
    else if (!digitalRead(PASTE)) {// if paste still pressed send CTRL+V
      DigiKeyboard.sendKeyStroke(KEY_V , MOD_CONTROL_LEFT);
      delay(200);
    }
  }
}

هنا مشروع في 3 ساعات حصلت عليه. لا تخف من نسخ كود شخص آخر!

النسخ واللصق من Stack Overflow


All Articles