Სარჩევი:

ერთი პინი 4 × 4 კლავიატურა: 10 ნაბიჯი
ერთი პინი 4 × 4 კლავიატურა: 10 ნაბიჯი

ვიდეო: ერთი პინი 4 × 4 კლავიატურა: 10 ნაბიჯი

ვიდეო: ერთი პინი 4 × 4 კლავიატურა: 10 ნაბიჯი
ვიდეო: ლუკა და მარიამი 2024, ნოემბერი
Anonim
ერთი პინი 4 × 4 კლავიატურა
ერთი პინი 4 × 4 კლავიატურა

ყოველ ჯერზე, როდესაც ვხედავ კლავიატურას, მას აქვს ბევრი ქინძისთავები, ეს არის თქვენი Arduino ქინძისთავების დიდი ნარჩენები, ასე რომ შეგვიძლია კლავიატურის გაშვება ერთი და მხოლოდ ერთი პინით?.პასუხი აქ არის.

ნაბიჯი 1: მასალების შედგენა

მასალების ბილი
მასალების ბილი

აპარატურა:

01 Arduino UNO

02 პურის დაფები

01 LCD I2C– ით

16 დააჭირეთ ღილაკს

04 რეზისტორები 1.5 kΩ

04 რეზისტორი 620 Ω

04 რეზისტორი 220 Ω

08 რეზისტორი 100 Ω

01 რეზისტორი 1 kΩ

07 მხტუნავ მავთულები

პროგრამული უზრუნველყოფა:

Arduino IDE დაინსტალირებულია თქვენს კომპიუტერში

ნაბიჯი 2: სქემატური და ციკრუტი

სქემატური და ციკრუტი
სქემატური და ციკრუტი
სქემატური და ციკრუტი
სქემატური და ციკრუტი

იდეა იმაში მდგომარეობს, რომ ჩვენ გვაქვს 4*4 მატრიცა ბიძგის ღილაკზე, რომელიც დაკავშირებულია ვერტიკალურად მიწასთან მარჯვენა ტყვიით და ჰორიზონტალურად სხვა ტყვიით (ღილაკის ტყვიით) და რეზისტენტებით 1.5 kΩ, 620Ω, 220Ω და 100Ω, ბოლოები 4 რიგები უკავშირდება ოთხ 100Ω რეზისტორს, როგორც ეს ნაჩვენებია სქემატურად.

ყოველ ჯერზე ღილაკზე დაჭერისას თქვენ დახურავთ წრეს და დენი გადის სხვადასხვა ბილიკზე და რეზისტორების სხვადასხვა ჯაჭვზე, ამიტომაც pin A0 იღებს სხვადასხვა ანალოგურ კითხვას თითოეული დაჭერის ღილაკზე. ყველაფერი რაც თქვენ გჭირდებათ ახლა არის კოდირება.

ნაბიჯი 3: კოდი

#ჩართეთ

#ჩართეთ

LiquidCrystal_I2C LCD (0x3f, 20, 4);

int ღილაკი = A0;

int readvalue;

ბათილად დაყენება ()

{

სერიული.დაწყება (9600);

lcd. დაწყება ();

pinMode (ღილაკი, INPUT);

lcd. განათება ();

lcd.print ("გამარჯობა მსოფლიო");

დაგვიანება (2000);

lcd. წმინდა ();

lcd.print ("ერთი პინი 4*4 კლავიატურა");

დაგვიანება (2000); }

ბათილი მარყუჟი ()

{

readvalue = analogRead (ღილაკი);

Serial.println (readvalue);

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

სხვა {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

სხვა {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}

სხვა {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}

სხვა {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}

სხვა {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}

სხვა {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}

სხვა {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}

სხვა {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}

სხვა {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}

სხვა {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}

სხვა {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}

სხვა {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}

სხვა {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}

სხვა {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}

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

ნაბიჯი 4: ღირებულებების კორექტირება

ღირებულებების კორექტირება
ღირებულებების კორექტირება

სერიული მონიტორის გახსნისას ის აჩვენებს მნიშვნელობას 1023, თუ დააჭერთ ღილაკს ის მოგცემთ კიდევ ერთ კითხვას თქვენ უნდა მიიღოთ ეს მნიშვნელობები და შეიტანოთ ცვლილებები კოდში

ნაბიჯი 5: პროექტი კრიტიკისა და განხილვის შემდეგ

პროექტი კრიტიკისა და მიმოხილვის შემდეგ
პროექტი კრიტიკისა და მიმოხილვის შემდეგ

ეჭვგარეშეა, რომ ჩვენ ყველანი აქ ვართ იმისთვის, რომ ვისწავლოთ და გავუზიაროთ ჩვენი ცოდნა, საზოგადოების მიერ დატოვებული ზოგიერთი კომენტარის წყალობით, რომელიც ძალიან დამხმარე იყო, მე გადავწყვიტე შემეტანა ცვლილებები და გაუმჯობესება ჩემს პროექტში:

აპარატურა:

მე გადავწყვიტე ყველა კომპონენტი შევაერთო PCB– ში, რათა თავიდან ავიცილოთ პურის დაფებზე ცუდი კავშირის პრობლემა.

Კოდი:

მეგობარმა მირჩია გამომეყენებინა პროგრამული უზრუნველყოფა და ეს მხოლოდ მარყუჟია (მაგალითად, მარყუჟის „for“), რომ პროგრამას წაკითხვის წაკითხვას გარკვეული დრო დასჭირდეს, რაც იმას ნიშნავს, რომ ის ბევრ კითხულობს (ჩემს გამოცდაში 500), მაგრამ სჭირდება მხოლოდ ბოლო

for (i = 1; i <= 500; i ++) {// მიიღეთ მხოლოდ მე -500 ანალოგი

მნიშვნელობა = analogRead (ღილაკი);} // ეს არის გარკვეული დრო, რათა თავიდან აიცილოთ ცუდი კითხვა

მისმა მეორე მეგობარმა მირჩია შემედარებინა "readvalue" რიგი მნიშვნელობებით და არა ერთი, რადგან "readvalue" იღებს ბევრ მნიშვნელობას ერთი და იმავე ღილაკზე. მაგალითად, "A" იძლევა კითხვას: 849, 850, 851 852, 853, 854, 855 ეს არის 7 მნიშვნელობის დიაპაზონი: ბარიერი (852) და 3 მნიშვნელობა მარცხნივ და მარჯვნივ. რაც ჩვენ უნდა გავაკეთოთ აქ არის შევადაროთ აბსოლუტური მნიშვნელობა განსხვავების "readvalue" და "852" შორის "3".

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

ნაბიჯი 6: ზოგიერთი Soldring სამუშაოს შემდეგ

მას შემდეგ, რაც ზოგიერთი Soldring მუშაობა
მას შემდეგ, რაც ზოგიერთი Soldring მუშაობა
მას შემდეგ, რაც ზოგიერთი Soldring მუშაობა
მას შემდეგ, რაც ზოგიერთი Soldring მუშაობა
მას შემდეგ, რაც ზოგიერთი Soldring მუშაობა
მას შემდეგ, რაც ზოგიერთი Soldring მუშაობა

ნაბიჯი 7: ჭეშმარიტების მომენტი

როგორც ხედავთ, პროგრამა ხანდახან აბნევს ღილაკებს, მაგრამ მაინც მუშაობს, თეორიულად წრეში არაფერია ცუდი, მაგრამ კოდს მეტი კალიბრაცია სჭირდება.

ნაბიჯი 8: დასასრული

ვიმედოვნებ, რომ მოგწონთ ეს პროექტი და თქვენ ცდილობთ ამის გაკეთებას, შეიძლება თქვენ ჩემზე უკეთესად გააკეთებთ.

მკითხეთ, თუ გაქვთ შეკითხვები, დატოვეთ კომენტარები და არ დაგავიწყდეთ ხმის მიცემა, თუ მოგწონთ ეს.

გირჩევთ: