يطرح السؤال الكثير من الأشخاص الذين بدأوا لتعلم البرمجة - هل من المقبول نسخ ولصق كود شخص آخر؟ بالنظر إلى أن الشخص مخلوق كسول ، وأن وقت المبرمج يكلف المال - الإجابة ، في رأيي ، واضحة - نعم. ولكن بالنسبة للأشخاص الذين ينقلون هذا المبدأ إلى درجة السخف ، والذين ينسخون بدون تفكير أو فهم ، وأيضًا لأولئك الذين يكتبون دبلومًا ، فإن هذا المقال مخصص لهذه لوحة المفاتيح والمقالة. ونعم ، تحتوي لوحة المفاتيح هذه على زرين بالضبط - النسخ واللصق.
تحت القطع ستكون قصة عن التجميع والبرامج الثابتة - حتى سنرى ارتداد محلل منطقيلذا ، قررت تجميع لوحة المفاتيح هذه. قررت أن أبدأ بالمكونات - 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 مللي ثانية. نعم ، أعلم أن هذا ليس كافيًا ، ولكن من الجدير بالذكر أن لدي فقط أزرار من الشريط ، ولم يكن لدى جهات الاتصال الوقت حتى الآن لأكسدة أو تغيير الشكل. وبمرور الوقت ، سيزداد الوضع سوءًا. كيف تتعامل مع الارتداد؟ هناك ثلاث طرق رئيسية:- مشغل Schmidt + RC - يسمح لك بالحصول على الإشارة المثالية
- دائرة RC - تسمح لك بعمل شريحة للانبعاثات (زيادة الإشارة بسلاسة)
ولكن لدينا وحدة تحكم دقيقة كاملة - وبالتالي لدينا 3 طرق متاحة: التأخيرات.إحدى طرق التعامل مع الارتداد هي التحقق مما إذا كان الزر لا يزال يتم الضغط عليه بعد مقدار معين من الارتداد. إذا تم تنفيذ التعليمات البرمجية من خلال التأخير ، فسيتم حظر الرمز ، ولكن يمكن رؤية كيفية القيام بذلك بشكل صحيح في مئات المقالات حول مكافحة الارتداد و arduino.لذا ، أدركنا أن الزر مضغوط - ماذا بعد ذلك؟ أخبر الكمبيوتر أنه تم الضغط على CTRL + C / V.يتم ذلك باستخدام المكتبة القياسية ل digispark.جاء الرمز الناتج على النحو التالي:#include "DigiKeyboard.h"
#define COPY 2
#define PASTE 0
#define GND 1
void setup() {
pinMode(COPY, INPUT);
digitalWrite(COPY, HIGH);
pinMode(PASTE, INPUT);
digitalWrite(PASTE, HIGH);
pinMode(GND, OUTPUT);
digitalWrite(GND, LOW);
}
void loop() {
if (!digitalRead(COPY) || !digitalRead(PASTE)) {
delay(30);
if (!digitalRead(COPY)) {
DigiKeyboard.sendKeyStroke(KEY_C , MOD_CONTROL_LEFT);
delay(30);
}
else if (!digitalRead(PASTE)) {
DigiKeyboard.sendKeyStroke(KEY_V , MOD_CONTROL_LEFT);
delay(200);
}
}
}
هنا مشروع في 3 ساعات حصلت عليه. لا تخف من نسخ كود شخص آخر!النسخ واللصق من Stack Overflow