فهرست مطالب:

صفحه کلید One 4 4 × 4: 10 مرحله
صفحه کلید One 4 4 × 4: 10 مرحله

تصویری: صفحه کلید One 4 4 × 4: 10 مرحله

تصویری: صفحه کلید One 4 4 × 4: 10 مرحله
تصویری: آموزش تایپ ده انگشتی در 10 دقیقه | Typing Learning 2024, نوامبر
Anonim
صفحه کلید یک پین 4 × 4
صفحه کلید یک پین 4 × 4

هر بار که من یک صفحه کلید می بینم ، پین های زیادی همراه آن است ، این پین های آردوینو شما هدر می رود ، بنابراین آیا می توانیم یک صفحه کلید را تنها با یک پین اجرا کنیم؟.پاسخ اینجاست

مرحله 1: صورتحساب مواد

صورتحساب مواد
صورتحساب مواد

سخت افزار:

01 آردوینو UNO

02 تخته نان

01 LCD با I2C

16 دکمه

04 مقاومت 1.5 کیلو وات

04 مقاومت 620 Ω

04 مقاومت 220 Ω

08 مقاومت 100 Ω

01 مقاومت 1 کیلو وات

07 سیم جامپر

نرم افزار:

Arduino IDE بر روی رایانه شما نصب شده است

مرحله 2: شماتیک و سیکروت

شماتیک و سیکروت
شماتیک و سیکروت
شماتیک و سیکروت
شماتیک و سیکروت

ایده این است که ما ماتریس 4*4 دکمه های فشاری داریم که به صورت عمودی با سرب راست به زمین و به صورت افقی با سربی دیگر (سربرگ دکمه) و مقاومتهای 1.5 کیلو وات ، 620Ω ، 220Ω و 100Ω متصل می شوند. همانطور که در شکل نشان داده شده است ، 4 ردیف توسط چهار مقاومت 100Ω متصل می شوند.

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

مرحله 3: کد

#عبارتند از

#عبارتند از

LiquidCrystal_I2C ال سی دی (0x3f ، 20 ، 4) ؛

دکمه int = A0؛

int readvalue؛

void setup ()

{

Serial.begin (9600)؛

lcd.begin ()؛

pinMode (دکمه ، ورودی) ؛

lcd.lightlight ()؛

lcd.print ("سلام جهان") ؛

تاخیر (2000) ؛

lcd.clear ()؛

lcd.print ("یک پین 4*4 صفحه کلید") ؛

تاخیر (2000) ؛ }

حلقه خالی ()

{

readvalue = analogRead (دکمه) ؛

Serial.println (readvalue)؛

if (readvalue == 852) {lcd.clear ()؛ lcd.print ("A")؛}

else {if (readvalue == 763) {lcd.clear ()؛ lcd.print ("B")؛}

else {if (readvalue == 685) {lcd.clear ()؛ lcd.print ("C")؛}

else {if (readvalue == 965) {lcd.clear ()؛ lcd.print ("D")؛}

else {if (readvalue == 565) {lcd.clear ()؛ lcd.print ("9")؛}

else {if (readvalue == 614) {lcd.clear ()؛ lcd.print ("6")؛}

else {if (readvalue == 360) {lcd.clear ()؛ lcd.print ("3")؛}

else {if (readvalue == 335) {lcd.clear ()؛ lcd.print ("#")؛}

else {if (readvalue == 396) {lcd.clear ()؛ lcd.print ("8")؛}

else {if (readvalue == 349) {lcd.clear ()؛ lcd.print ("5")؛}

else {if (readvalue == 235) {lcd.clear ()؛ lcd.print ("2")؛}

else {if (readvalue == 279) {lcd.clear ()؛ lcd.print ("0")؛}

else {if (readvalue == 452) {lcd.clear ()؛ lcd.print ("7")؛}

else {if (readvalue == 271) {lcd.clear ()؛ lcd.print ("4")؛}

else {if (readvalue == 170) {lcd.clear ()؛ lcd.print ("1")؛}

else {if (readvalue == 92) {lcd.clear ()؛ lcd.print ("*")؛} else {}}}}}}}}}}}}}}}}

مرحله 4: تصحیح ارزشها

تصحیح ارزشها
تصحیح ارزشها

وقتی مانیتور سریال را باز می کنید مقدار 1023 نشان داده می شود ، اگر یک دکمه را فشار دهید به شما قرائت دیگری می دهد ، باید این مقادیر را بگیرید و در کد تغییراتی ایجاد کنید.

مرحله 5: پروژه پس از انتقاد و مرور

پروژه پس از نقد و بررسی
پروژه پس از نقد و بررسی

شکی نیست که همه ما اینجا هستیم تا دانش خود را بیاموزیم و به اشتراک بگذاریم ، به لطف نظرات برخی از افراد جامعه که بسیار مفید بودند ، تصمیم گرفتم تعدادی تغییر و پیشرفت در پروژه خود ایجاد کنم:

سخت افزار:

من تصمیم گرفتم همه اجزا را در یک PCB لحیم کنم تا از مشکل اتصال بد در تخته های نان جلوگیری شود.

کد:

یکی از دوستان به من توصیه کرد که از نرم افزار حذف نرم افزار استفاده کنم و این فقط یک حلقه است (برای مثال حلقه "برای") تا برنامه زمان زیادی را برای انتخاب خوانده شود ، این بدان معناست که تعداد زیادی خوانده می شود (در امتحان من 500) اما طول می کشد فقط آخرین مورد

برای (i = 1 ؛ i <= 500 ؛ i ++) {// فقط 500 مین خواننده آنالوگ را بگیرید

value = analogRead (دکمه) ؛} // این به شما کمک می کند تا مدتی طول بکشد تا از خواندن بد جلوگیری کنید

یکی دیگر از دوستان به لطف او به من توصیه کرد که "readvalue" را با طیف وسیعی از مقادیر مقایسه نکنم ، زیرا "readvalue" مقدارهای زیادی را برای یک دکمه فشار می دهد. برای مثال "A" خواندن: 849 ، 850 ، 851 852 ، 853 ، 854 ، 855 بنابراین محدوده 7 مقدار است: یک آستانه (852) و 3 مقدار چپ و راست. آنچه ما در اینجا باید انجام دهیم این است که مقدار مطلق تفاوت بین "ارزش بازخوانی" و "852" را با "3" مقایسه کنیم.

if (abs (readvalue-852) <= 8) {lcd.clear ()؛ lcd.print ("A")؛}

مرحله 6: بعد از چند کار لحیم کاری

بعد از چند کار لحیم کاری
بعد از چند کار لحیم کاری
بعد از چند کار لحیم کاری
بعد از چند کار لحیم کاری
بعد از چند کار لحیم کاری
بعد از چند کار لحیم کاری

مرحله 7: لحظه حقیقت

همانطور که می بینید برنامه گاهی دکمه ها را اشتباه می گیرد اما همچنان کار می کند ، از لحاظ تئوری هیچ مشکلی در مدار وجود ندارد اما کد به کالیبراسیون بیشتری نیاز دارد.

مرحله 8: پایان

امیدوارم این پروژه را دوست داشته باشید و سعی کنید آن را انجام دهید ، شاید بهتر از من انجام دهید.

اگر س haveالی دارید از من بپرسید ، نظرات خود را بنویسید و اگر دوست دارید به من رای ندهید.

توصیه شده: