جدول المحتويات:

مفاتيح Arduino و Thumbwheel: 9 خطوات
مفاتيح Arduino و Thumbwheel: 9 خطوات

فيديو: مفاتيح Arduino و Thumbwheel: 9 خطوات

فيديو: مفاتيح Arduino و Thumbwheel: 9 خطوات
فيديو: 10 2 9 Switches Types and classification 2024, شهر نوفمبر
Anonim
مفاتيح Arduino و Thumbwheel
مفاتيح Arduino و Thumbwheel

في هذه المقالة ، ندرس استخدام مفاتيح عجلة الدفع / الإبهام مع أنظمة Arduino الخاصة بنا. فيما يلي بعض الأمثلة التي تم الحصول عليها من PMD Way.

الخطوة 1:

صورة
صورة

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

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

الخطوة 2:

صورة
صورة

لدينا مشتركين على اليسار ، ثم جهات الاتصال لـ 1 و 2 و 4 و 8. إذا قمت بتطبيق جهد صغير (على سبيل المثال 5 فولت) على مشترك ، فيمكن قياس قيمة المحول عن طريق إضافة قيم جهات الاتصال الموجودة في حالة عالية. على سبيل المثال ، إذا حددت 3 - ستكون جهات الاتصال 1 و 2 عند الجهد المشترك. يمكن تمثيل القيم بين صفر وتسعة على هذا النحو في الجدول.

الخطوه 3:

صورة
صورة

الآن يجب أن تدرك أنه سيكون من السهل قراءة قيمة المفتاح - وأنت على صواب ، هذا صحيح. يمكننا توصيل 5 فولت بالمشترك ، والمخرجات بدبابيس الإدخال الرقمية للوحات Arduino الخاصة بنا ، ثم استخدام digitalRead () لتحديد قيمة كل إخراج. في الرسم ، نستخدم بعض الرياضيات الأساسية لتحويل قيمة BCD إلى رقم عشري. لذلك دعونا نفعل ذلك الآن.

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

الخطوة الرابعة:

الآن أصبح من السهل توصيل المخرجات المسمى 1 و 2 و 4 و 8 (على سبيل المثال) المسامير الرقمية 8 و 9 و 10 و 11. قم بتوصيل 5 فولت بنقطة المحول "C" و GND بـ… GND. بعد ذلك ، نحتاج إلى رسم تخطيطي يمكنه قراءة المدخلات وتحويل إخراج BCD إلى رقم عشري. ضع في اعتبارك الرسم التخطيطي التالي:

/ * يستخدم درع العرض الرقمي SAA1064 https://www.gravitech.us/7segmentshield.html يستخدم الشاشة التسلسلية إذا لم يكن لديك درع SAA1064 * / # تضمين "Wire.h" #define q1 8 #define q2 9 # تحديد q4 10 # تعريف q8 11 إعداد باطل () {Serial.begin (9600)؛ Wire.begin () ؛ // انضم إلى ناقل i2c (العنوان اختياري للسيد) تأخير (500) ؛ pinMode (q1 ، الإدخال) ؛ // عجلة الإبهام '1' pinMode (q2 ، INPUT) ؛ // عجلة الإبهام '2' pinMode (q4 ، INPUT) ؛ // عجلة الإبهام '4' pinMode (q8 ، INPUT) ؛ // thumbwheel '8'} void dispSAA1064 (int Count) // يرسل عددًا صحيحًا 'Count' إلى Gravitech SAA1064 shield {const int lookup [10] = {0x3F ، 0x06 ، 0x5B ، 0x4F ، 0x66 ، 0x6D ، 0x7D ، 0x07 ، 0x7F ، 0x6F} ، آلاف ، مئات ، عشرات ، قاعدة ؛ Wire.beginTransmission (0x38) ؛ Wire.write (0) ؛ Wire.write (B01000111) ؛ Wire.endTransmission () ؛ Wire.beginTransmission (0x38) ؛ Wire.write (1) ؛ الآلاف = العد / 1000 ؛ المئات = (العدد- (آلاف * 1000)) / 100 ؛ العشرات = (العد - ((آلاف * 1000) + (مئات * 100))) / 10 ؛ الأساس = العد - ((آلاف * 1000) + (مئات * 100) + (عشرات * 10)) ؛ Wire.write (بحث [Base]) ؛ Wire.write (بحث [عشرات]) ؛ Wire.write (بحث [مئات]) ؛ Wire.write (بحث [بالآلاف]) ؛ Wire.endTransmission () ؛ تأخير (10) ؛ } int readSwitch () {int total = 0؛ if (digitalRead (q1) == HIGH) {total + = 1؛ } if (digitalRead (q2) == HIGH) {total + = 2؛ } if (digitalRead (q4) == HIGH) {total + = 4؛ } if (digitalRead (q8) == HIGH) {total + = 8؛ } العائد الإجمالي ؛ } void loop () {dispSAA1064 (readSwitch ()) ؛ // يرسل قيمة التبديل لعرض الدرع Serial.println (readSwitch ()) ؛ // يرسل قيمة التبديل إلى صندوق المراقبة التسلسلي}

وظيفة readSwitch () هي المفتاح. يقوم بحساب قيمة المحول عن طريق إضافة التمثيل العددي لكل ناتج من مخرجات التبديل وإرجاع الإجمالي كنتيجة له. في هذا المثال ، استخدمنا درع عرض رقمي يتم التحكم فيه بواسطة NXP SAA1064.

الخطوة الخامسة:

Image
Image

وظيفة readSwitch () هي المفتاح. يقوم بحساب قيمة المحول عن طريق إضافة التمثيل العددي لكل ناتج من مخرجات التبديل وإرجاع الإجمالي كنتيجة له. في هذا المثال ، استخدمنا درع عرض رقمي يتم التحكم فيه بواسطة NXP SAA1064.

إذا لم يكن لديك واحد ، فلا بأس - يتم إرسال النتائج أيضًا إلى الشاشة التسلسلية. الآن ، دعنا نراه عمليًا في الفيديو.

الخطوة السادسة:

حسنًا ، لا يبدو كثيرًا ، ولكن إذا كنت بحاجة إلى إدخال رقمي ، فإنه يوفر الكثير من المساحة المادية ويوفر طريقة دقيقة للدخول.

لذلك هناك لديك. هل ستستخدمها بالفعل في مشروع؟ لرقم واحد - نعم. لأربعة؟ ربما لا - ربما يكون من الأسهل استخدام لوحة مفاتيح مكونة من 12 رقمًا. هناك فكرة …

الخطوة 7: مفاتيح متعددة

صورة
صورة

الآن سوف نفحص كيفية قراءة أربعة أرقام - وعدم إضاعة كل تلك الدبابيس الرقمية في هذه العملية. بدلاً من ذلك ، سوف نستخدم IC موسع المنفذ ذو 16 بت Microchip MCP23017 الذي يتصل عبر ناقل I2C. يحتوي على ستة عشر دبابيس إدخال / إخراج رقمية يمكننا استخدامها لقراءة حالة كل مفتاح.

قبل المضي قدمًا ، يرجى ملاحظة أن بعض المعرفة المفترضة مطلوبة لهذه المقالة - ناقل I2C (الجزءان الأول والثاني) و MCP23017. سنصف أولاً توصيلات الأجهزة ، ثم رسم Arduino. أذكر التخطيطي المستخدم لمثال التبديل الفردي.

عندما تم توصيل المحول مباشرة بـ Arduino ، نقرأ حالة كل دبوس لتحديد قيمة المحول. سنفعل هذا مرة أخرى ، على نطاق أوسع باستخدام MCP23017. النظر في مخطط pinout:

الخطوة الثامنة:

لدينا 16 دبوسًا ، مما يسمح بتوصيل أربعة مفاتيح. لا تزال المشاعات الخاصة بكل مفتاح متصلة بـ 5 فولت ، ولا يزال لدى كل جهة اتصال للمفتاح مقاومة منسدلة 10 كيلو إلى GND. ثم نقوم بتوصيل 1 ، 2 ، 4 ، 8 دبابيس من الرقم الأول بـ GPBA0 ~ 3 ؛ الرقم الثاني 1 ، 2 ، 4 ، 8 إلى GPA4 ~ 7 ؛ الأرقام الثلاثة 1 و 2 و 4 و 8 إلى GPB0 ~ 3 والرقم الرابع هو 1 و 2 و 4 و 8 إلى GPB4 ~ 7.

الآن كيف نقرأ المفاتيح؟ قد تجعلك كل هذه الأسلاك تعتقد أنه صعب ، لكن الرسم بسيط للغاية. عندما نقرأ قيمة GPBA و B ، يتم إرجاع بايت واحد لكل بنك ، مع البت الأكثر أهمية أولاً. ستطابق كل أربع بتات إعداد المحول المتصل بدبابيس الإدخال / الإخراج المطابقة. على سبيل المثال ، إذا طلبنا البيانات لكل من بنوك IO وتم تعيين المحولات على 1 2 3 4 - سيرجع البنك A 0010 0001 وسيرجع البنك B 0100 0011.

نستخدم بعض عمليات bitshift لفصل كل أربع بتات في متغير منفصل - مما يترك لنا قيمة كل رقم. على سبيل المثال ، لفصل قيمة المفتاح الرابع ، نقوم بإزاحة البتات من البنك B >> 4. يؤدي هذا إلى دفع قيمة المفتاح الثالث إلى الخارج ، وتصبح البتات الفارغة على اليسار صفرًا.

لفصل قيمة المفتاح الثالث ، نستخدم معامل أحادي المعامل المركب & - والذي يترك قيمة المفتاح الثالث. تُظهر الصورة تحليلاً لقيم التبديل الثنائي - تُظهر قيم GPIOA و B الأولية ، ثم القيمة الثنائية لكل رقم والقيمة العشرية.

الخطوة 9:

لذلك دعونا نرى الرسم التوضيحي:

/ * مثال 40a - اقرأ أربعة مفاتيح BCD لعجلة الدفع عبر MCP23017 ، اعرض على شاشة LED ذات 7 مقاطع SAA1064 / 4 أرقام * / // MCP23017 دبابيس 15 ~ 17 إلى GND ، عنوان ناقل I2C هو 0x20 // SAA1064 I2C عنوان ناقل 0x38 # تتضمن "Wire.h" // لتعريفات أرقام LED int الأرقام [16] = {63، 6، 91، 79، 102، 109، 125، 7، 127، 111، 119، 124، 57، 94، 121، 113 } ؛ بايت GPIOA ، GPIOB ، dig1 ، dig2 ، dig3 ، dig4 ؛ initSAA1064 () باطلة {// setup 0x38 Wire.beginTransmission (0x38) ؛ Wire.write (0) ؛ Wire.write (B01000111) ؛ // 12mA الإخراج ، لا يوجد رقم طمس Wire.endTransmission () ؛ } إعداد باطل () {Serial.begin (9600) ؛ Wire.begin () ؛ // بدء تشغيل ناقل I2C initSAA1064 () ؛ } حلقة فارغة () {// اقرأ مدخلات البنك أ Wire.beginTransmission (0x20) ؛ Wire.write (0x12) ؛ Wire.endTransmission () ؛ Wire.request From (0x20، 1) ؛ GPIOA = Wire.read () ، // يحتوي هذا البايت على بيانات التبديل للأرقام 1 و 2 // اقرأ مدخلات البنك B Wire.beginTransmission (0x20) ؛ Wire.write (0x13) ؛ Wire.endTransmission () ؛ Wire.request From (0x20، 1) ؛ GPIOB = Wire.read () ، // يحتوي هذا البايت على بيانات التبديل للأرقام 3 و 4 // قيمة الاستخراج لكل مفتاح // dig1 LHS ، dig4 RHS dig4 = GPIOB >> 4 ؛ dig3 = GPIOB & B00001111 ؛ dig2 = GPIOA >> 4 ؛ dig1 = GPIOA & B00001111 ؛ // إرسال جميع بيانات GPIO وبيانات التبديل الفردية إلى الشاشة التسلسلية // من أجل التصحيح والمصلحة Serial.print ("GPIOA =") ؛ Serial.println (GPIOA ، BIN) ؛ Serial.print ("GPIOB =") ؛ Serial.println (GPIOB ، BIN) ؛ Serial.println () ، Serial.print ("digit 1 =") ؛ Serial.println (dig1 ، BIN) ؛ Serial.print ("digit 2 =") ؛ Serial.println (dig2 ، BIN) ؛ Serial.print ("digit 3 =") ؛ Serial.println (dig3 ، BIN) ؛ Serial.print ("digit 4 =") ؛ Serial.println (dig4، BIN) ؛ Serial.println () ، Serial.print ("digit 1 =") ؛ Serial.println (dig1 ، DEC) ؛ Serial.print ("digit 2 =") ؛ Serial.println (dig2 ، DEC) ؛ Serial.print ("digit 3 =") ؛ Serial.println (dig3 ، DEC) ؛ Serial.print ("digit 4 =") ؛ Serial.println (dig4 ، DEC) ؛ Serial.println () ، // إرسال قيمة التبديل إلى شاشة LED عبر SAA1064 Wire.beginTransmission (0x38) ؛ Wire.write (1) ؛ Wire.write (أرقام [dig4]) ؛ Wire.write (أرقام [dig3]) ؛ Wire.write (أرقام [dig2]) ؛ Wire.write (أرقام [dig1]) ؛ Wire.endTransmission () ؛ تأخير (10) ؛ تأخير (1000) ؛ }

وللكافرين… عرض بالفيديو.

لذلك هناك لديك. أربعة أرقام بدلاً من واحد ، وفوق ناقل I2C الذي يحافظ على دبابيس الإدخال / الإخراج الرقمية من Arduino. باستخدام ثمانية MCP23017s ، يمكنك قراءة 32 رقمًا في وقت واحد. استمتع بفعل ذلك!

يمكنك طلب كل من المفاتيح BCD والمفاتيح العشرية بأحجام مختلفة من PMD Way ، مع التوصيل المجاني في جميع أنحاء العالم.

هذا المنشور يقدمه لك pmdway.com - كل شيء للصانعين وعشاق الإلكترونيات ، مع التوصيل المجاني في جميع أنحاء العالم.

موصى به: