فهرست مطالب:

کلیدهای آردوینو و انگشت شست: 9 مرحله
کلیدهای آردوینو و انگشت شست: 9 مرحله

تصویری: کلیدهای آردوینو و انگشت شست: 9 مرحله

تصویری: کلیدهای آردوینو و انگشت شست: 9 مرحله
تصویری: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, نوامبر
Anonim
کلیدهای آردوینو و انگشت شست
کلیدهای آردوینو و انگشت شست

در این مقاله ما استفاده از سوئیچ های فشار/چرخ انگشت شست را با سیستم های آردوینو بررسی می کنیم. در اینجا چند نمونه از منبع PMD Way آورده شده است.

مرحله 1:

تصویر
تصویر

برای افراد ناآگاه ، هر سوئیچ یک بخش عمودی است و می توان آنها را به یکدیگر متصل کرد تا اندازه های مختلف را تشکیل دهند. می توانید از دکمه ها برای انتخاب ارقام صفر تا نه استفاده کنید. گزینه های دیگری وجود دارد که دارای چرخ هستند و می توانید به جای دکمه های افزایش/کاهش با انگشت شست خود را حرکت دهید.

قبل از روزهای رابط کاربری فانتزی ، این سوئیچ ها روشهای بسیار متداول برای تنظیم ورود داده های عددی بودند. با این حال آنها هنوز در دسترس هستند ، بنابراین بیایید ببینیم چگونه کار می کنند و چگونه می توانیم از آنها استفاده کنیم. مقدار سوئیچ از طریق اعشار اعشاری یا اعشاری مستقیم در دسترس است. قسمت پشت سوئیچ را به شکل BCD در نظر بگیرید.

گام 2:

تصویر
تصویر

ما در سمت چپ مشترک داریم ، سپس مخاطبین 1 ، 2 ، 4 و 8. اگر یک ولتاژ کوچک (مثلاً 5 ولت) به معمولی اعمال کنید ، می توانید مقدار سوئیچ را با افزودن مقادیر مخاطبین موجود در حالت بالا به عنوان مثال ، اگر 3 را انتخاب کنید - مخاطبین 1 و 2 در ولتاژ مشترک خواهند بود. مقادیر بین صفر تا نه را می توان به صورت زیر در جدول نشان داد.

مرحله 3:

تصویر
تصویر

در حال حاضر باید متوجه شوید که خواندن ارزش یک سوئیچ آسان است - و شما درست می گویید ، اینطور است. ما می توانیم 5 ولت را به پریز معمولی ، خروجی ها را به پین های ورودی دیجیتال بردهای آردوینو متصل کنیم ، سپس از () digitalRead برای تعیین مقدار هر خروجی استفاده کنیم. در طرح از برخی ریاضیات اساسی برای تبدیل مقدار BCD به عدد اعشاری استفاده می کنیم. بنابراین بگذارید همین حالا این کار را انجام دهیم.

از نظر سخت افزاری ، ما باید یک چیز دیگر را نیز در نظر بگیریم-کلید دنده ای از نظر الکتریکی مانند چهار دکمه فشار دهنده معمولی عمل می کند. این بدان معناست که ما باید از مقاومتهای کششی استفاده کنیم تا تفاوت واضحی بین حالتهای بالا و پایین داشته باشیم. بنابراین شماتیک یک سوئیچ مطابق شکل بالا است.

مرحله 4:

اکنون اتصال ساده خروجی های دارای برچسب 1 ، 2 ، 4 و 8 به (برای مثال) پین های دیجیتالی 8 ، 9 ، 10 و 11. یک موضوع ساده است. در مرحله بعد ، ما باید یک طرح داشته باشیم که بتواند ورودی ها را بخواند و خروجی BCD را به اعشاری تبدیل کند. طرح زیر را در نظر بگیرید:

/ * از سپر صفحه نمایش عددی SAA1064 استفاده می کند https://www.gravitech.us/7segmentshield.html در صورت نداشتن سپر SAA1064 از مانیتور سریال استفاده می کند */ #شامل "Wire.h" #تعریف q1 8 #تعریف q2 9 # تعریف q4 10 #تعریف q8 11 void setup () {Serial.begin (9600)؛ Wire.begin ()؛ // پیوستن به گذرگاه i2c (آدرس اختیاری برای کارشناسی ارشد) تأخیر (500) ؛ pinMode (q1 ، INPUT) ؛ // thumbwheel '1' pinMode (q2، INPUT)؛ // thumbwheel '2' pinMode (q4، INPUT)؛ // انگشت شست '4' pinMode (q8 ، INPUT) ؛ // thumbwheel '8'} void dispSAA1064 (int Count) // عدد صحیح را به Count Gravitech SAA1064 ارسال می کند {const int lookup [10] = {0x3F، 0x06، 0x5B، 0x4F، 0x66، 0x6D، 0x7D، 0x07، 0x7F ، 0x6F} ؛ int هزاران ، صدها ، دهها ، پایگاه ؛ 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 (جستجو [پایگاه]) ؛ 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 ()) ؛ // مقدار سوئیچ را به Shield نمایش می دهد Serial.println (readSwitch ())؛ // مقدار سوئیچ را به جعبه مانیتور سریال ارسال می کند}

عملکرد readSwitch () کلید است. مقدار سوئیچ را با افزودن نمایش عددی هر خروجی سوئیچ محاسبه می کند و مجموع را به عنوان نتیجه برمی گرداند. برای این مثال ما از یک محافظ صفحه نمایش عددی استفاده کردیم که توسط NXP SAA1064 کنترل می شود.

مرحله 5:

Image
Image

عملکرد readSwitch () کلید است. مقدار سوئیچ را با افزودن نمایش عددی هر خروجی سوئیچ محاسبه کرده و مجموع را به عنوان نتیجه برمی گرداند. برای این مثال ما از یک صفحه نمایش عددی استفاده می کنیم که توسط NXP SAA1064 کنترل می شود.

اگر یکی ندارید ، مشکلی نیست - نتایج نیز به مانیتور سریال ارسال می شود. اکنون ، بیایید آن را در عمل در ویدیو ببینیم.

مرحله 6:

بسیار خوب به نظر نمی رسد ، اما اگر به ورودی عددی نیاز دارید ، فضای فیزیکی زیادی را ذخیره می کند و یک روش دقیق ورود را ارائه می دهد.

خب! حالا شما مالک آن هستید. آیا واقعاً از این موارد در پروژه استفاده می کنید؟ برای یک رقم - بله. برای چهار؟ احتمالاً نه-شاید استفاده از صفحه کلید 12 رقمی راحت تر باشد. ایده ای وجود دارد…

مرحله 7: چند سوئیچ

تصویر
تصویر

اکنون ما نحوه خواندن چهار رقم را بررسی می کنیم - و همه پین های دیجیتالی را در این روند هدر نمی دهیم. در عوض ، ما از IC گسترش دهنده پورت 16 بیتی Microchip MCP23017 استفاده می کنیم که از طریق گذرگاه I2C ارتباط برقرار می کند. دارای شانزده پین ورودی/خروجی دیجیتالی است که می توانیم برای خواندن وضعیت هر سوئیچ از آنها استفاده کنیم.

قبل از حرکت به جلو ، لطفاً توجه داشته باشید که دانش مفروض برای این مقاله مورد نیاز است - گذرگاه I2C (قسمت اول و دوم) و MCP23017. ابتدا اتصالات سخت افزاری و سپس طرح آردوینو را شرح می دهیم. شماتیک مورد استفاده برای مثال سوئیچ تک را به خاطر بیاورید.

وقتی سوئیچ مستقیماً به آردوینو متصل شد ، وضعیت هر پین را می خوانیم تا مقدار سوئیچ مشخص شود. ما دوباره این کار را در مقیاس بزرگتر با استفاده از MCP23017 انجام می دهیم. نمودار pinout را در نظر بگیرید:

مرحله 8:

ما 16 پین داریم که به چهار سوئیچ وصل می شود. مشترکات برای هر سوئیچ هنوز به 5 ولت متصل می شوند و هر مخاطب سوئیچ هنوز دارای یک مقاومت تاشو 10k به 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 بخوانید ، روی SAA1064/4 رقمی نمایشگر LED 7 * * // // 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 ؛ void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38) ؛ Wire.write (0) ؛ Wire.write (B01000111) ؛ // خروجی 12mA ، بدون خالی رقم Wire.endTransmission () ؛ } void setup () {Serial.begin (9600)؛ Wire.begin ()؛ // راه اندازی گذرگاه I2C initSAA1064 ()؛ } void loop () {// ورودی های بانک A Wire.beginTransmission (0x20) را بخوانید ؛ Wire.write (0x12) ؛ Wire.endTransmission ()؛ سیم. درخواست از (0x20 ، 1) ؛ GPIOA = Wire.read ()؛ // این بایت حاوی داده های سوئیچ برای رقم 1 و 2 است // ورودی های بانک B Wire.beginTransmission (0x20) را بخوانید ؛ Wire.write (0x13) ؛ Wire.endTransmission ()؛ سیم. درخواست از (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 ("رقم 1 =")؛ Serial.println (dig1 ، BIN) ؛ Serial.print ("رقم 2 =")؛ Serial.println (dig2 ، BIN) ؛ Serial.print ("رقم 3 =")؛ Serial.println (dig3 ، BIN) ؛ Serial.print ("رقم 4 =")؛ Serial.println (dig4 ، BIN) ؛ Serial.println ()؛ Serial.print ("رقم 1 =")؛ Serial.println (dig1، DEC)؛ Serial.print ("رقم 2 =")؛ Serial.println (dig2، DEC)؛ Serial.print ("رقم 3 =")؛ Serial.println (dig3، DEC)؛ Serial.print ("رقم 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) ؛ }

و برای غیرم believersمنان … تظاهرات ویدئویی.

خب! حالا شما مالک آن هستید. چهار رقم به جای یک ، و بیش از گذرگاه I2C ، پین های ورودی/خروجی دیجیتال آردوینو را حفظ می کند. با استفاده از هشت MCP23017 می توانید 32 رقم را همزمان بخوانید. از انجام آن لذت ببرید!

شما می توانید سوئیچ های BCD و اعشاری در اندازه های مختلف را از PMD Way ، با ارسال رایگان به سراسر جهان سفارش دهید.

این پست توسط pmdway.com برای شما ارسال شده است - همه چیز برای سازندگان و علاقه مندان به لوازم الکترونیکی ، با ارسال رایگان در سراسر جهان.

توصیه شده: