Სარჩევი:

ოსუ! კლავიატურა: 8 ნაბიჯი (სურათებით)
ოსუ! კლავიატურა: 8 ნაბიჯი (სურათებით)

ვიდეო: ოსუ! კლავიატურა: 8 ნაბიჯი (სურათებით)

ვიდეო: ოსუ! კლავიატურა: 8 ნაბიჯი (სურათებით)
ვიდეო: როგორ გავააქტიუროთ iphone 7 , 8 , X ზე შეეხე სტიკერის წამკითხველი. 2024, ივლისი
Anonim
ოსუ! კლავიატურა
ოსუ! კლავიატურა

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

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

შენიშვნა 1: SMD კომპონენტები (მცირე ელექტრონიკა) გამოიყენება ასე რომ, თუ თქვენ გაიმეორებთ ამ პროექტს, საჭიროა შედუღების უნარი. შეიძლება დაემატოს ადვილად გასაყიდი ვერსია, მაგრამ ეს ლიდერები არ შემოდის ხვრელის პაკეტში

შენიშვნა 2: მე რამდენჯერმე განვაახლე კოდი და უკვე 3ish ვერსიამდე ვარ. დავტოვებ ყველა კოდს ინტერნეტით, მაგრამ გირჩევთ გამოიყენოთ ბოლო ვერსია. მას ამჟამად არ გააჩნია led ფუნქციონირება, მაგრამ ის უნდა იყოს საუკეთესოდ შესრულებული.

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

მასალები და განმარტებები
მასალები და განმარტებები

იმისდა მიხედვით, თუ როგორ აკეთებთ თქვენს პროექტს, შეიძლება დაგჭირდეთ სხვადასხვა კომპონენტი, მაგრამ ეს კომპონენტები არის ის, რაც მე გამოვიყენე. თუ თქვენ გაქვთ დრო და გსურთ შეინახოთ ფული, შეუკვეთეთ ფორმა aliexpress და არ შეუკვეთოთ PCB.

1 Arduino pro მიკრო + USB კაბელი

3 Kailh BOX წითელი კონცენტრატორი

3 10k რეზისტორი (0805 SMD)

3 100nF კონდენსატორი (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 გასაღები

ამ პროექტში მოცემულია 1 ნაბეჭდი მიკროსქემის დაფა (PCB)

ამ პროექტში მოცემულია 1 3D ნაბეჭდი ქეისი

რატომ ვიყენებ Arduino pro მიკრო?

Arduino დაფების უმეტესობას, როგორიცაა Uno (Atmega328), არ გააჩნიათ USB კომუნიკაციის მშობლიური მხარდაჭერა. დიახ, თქვენ შეგიძლიათ მათი პროგრამირება USB– ით ძალიან მარტივად და მე ვფიქრობ, რომ არსებობს გამოსავალი, მაგრამ მე მომწონს, რომ ეს მარტივი იყოს, როდესაც საქმე ეხება USB კომუნიკაციას და არ ვიცი, არის თუ არა გამოსავალი ისეთივე საპასუხო. ეს დაფები იყენებენ გარე ჩიპს USB კომუნიკაციის შესაძლებლობისთვის, ხოლო Arduino pro micro (Atmega32U4) აქვს ჩამონტაჟებული.

გადამრთველები

ბევრი მექანიკური გადამრთველი შეგიძლიათ გამოიყენოთ. ხაზოვანი, შეხებადი ან დაწკაპუნებული Kailh– დან ან Cherry MX– დან. აირჩიე რომელი მოგწონს. მე გამოვიყენე Kailh კონცენტრატორები, რადგან ისინი იაფი იყო Ailexpress– ზე. თუ აირჩევთ PCB– ს გამოყენებას, დაგჭირდებათ Kailh BOX კონცენტრატორები. ფერი განსაზღვრავს გრძნობას.

ელექტრონული კომპონენტები

ამ თავში მათ შესახებ ბევრი რამ არ არის ახსნილი, მაგრამ თუ თქვენ არ იყენებთ PCB– ს, მე გირჩევთ შედუღების სიმარტივისთვის ჩვეულებრივი ხვრელის კომპონენტებს. სამწუხაროდ, ლიდერები არ არის ხელმისაწვდომი ხვრელების პაკეტებში. მე ასევე არ გირჩევთ მავთულის გამოყენებას SMD პაკეტებზე, თუ არ ხართ დარწმუნებული თქვენი შედუღების უნარებში. SMD– სთვისაც კი PCB– ზე არის გათანაბრებული „მოწინავე“შედუღების უნარი.

საცხოვრებელი

მე ნამდვილად ვიძლევი საცხოვრებელს ამ პროექტში, მაგრამ ის ამ მომენტში ხარვეზია. ჭანჭიკების შესაცვლელად საჭიროა ცვლილებები, ლიდერების ღიობები არ არის ოპტიმალური, არდუინო გამოაშკარავებულია და ნაწილი უნდა ამოიჭრას USB- ის მორგებისთვის. მომავალში შესაძლებელია ახალი საცხოვრებლის დამატება. თუ თქვენ გაქვთ 3D პრინტერი, გააგრძელეთ და დაბეჭდეთ იგი, მაგრამ არ გამოტოვოთ გზა ამ უსარგებლო საქმის დასაბეჭდად, თუ არ იყენებთ და უბრალოდ იყენებთ რაიმე სახის პროექტის ყუთს.

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

სქემატური
სქემატური

ამ პროექტის სქემა საკმაოდ მარტივია, მაგრამ მე მინდა ავუხსნა კომპონენტები იმ ადამიანებს, ვინც დაინტერესებულია და არ იცის ეს განხორციელება.

გადართეთ კავშირები არდუინოსთან

კონცენტრატორები დაკავშირებულია Arduino- ს ქინძისთავებთან 0, 2 და 3, რადგან ეს ქინძისთავები შეიძლება გამოყენებულ იქნას როგორც გარე წყვეტები. ეს კიდევ უფრო განმარტებულია კოდის განყოფილებაში.

დებიუანსის წრე

სქემის მარცხენა მხარეს არის წრე, რომელიც გადაწერილია 3 -ჯერ. ეს წრე გამოიყენება გადამრთველის გამოსარიცხად. იმის გასაგებად, თუ რა არის დემონსტრირება, თქვენ უნდა გესმოდეთ გადაბრუნების შეცვლა და ამის გაგება ძნელი არ არის.

პირველი შეხედეთ ამ სიმულაციას, რათა დახატოთ პირველი სურათი (სწრაფად დააწკაპუნეთ გადამრთველზე და შეხედეთ სიგნალს ქვემოთ)

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

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

Მოწინავე:

Atmaga32U4 კითხულობს ციფრულ დაბალს 0.2Vcc - 0.1V = 0.9 ვოლტზე. კონდენსატორის ძაბვა ნებისმიერ დროს მის განმუხტვაში არის Vcc * e^(-t/RC). თუ თქვენ გაზომავთ დებიუნაციის განსხვავებულ დროს თქვენს გადამრთველზე, შეგიძლიათ გამოთვალოთ თქვენი რეზისტორისა და კონდენსატორის მნიშვნელობები.

ფორმულის ფორმა

LED- ები

Rgb LED- ები არის APA102 led, რომლებიც ინდივიდუალურად არის მიმართული საათის და მონაცემთა ხაზის გამოყენებით. გარე კომპონენტები არ არის საჭირო მათი მუშაობისთვის. მრავალი LED- ისთვის თქვენ უნდა გამოიყენოთ კონდენსატორი 5 ვოლტისა და მიწის პარალელურად, მაგრამ მხოლოდ 4 LED- ით არ გჭირდებათ.

ნაბიჯი 3: დაფის დიზაინი

დაფის დიზაინი
დაფის დიზაინი

PCB შემუშავებულია JLCPCB– ში. მე არ ვარ მათ მიერ დაფინანსებული, მაგრამ იაფი პროტოტიპებისთვის ისინი ქმნიან ბრწყინვალე PCB– ს. 2 დოლარად თქვენ იღებთ 10 ერთსა და იმავე დაფას, მაგრამ გადაზიდვა ჩემთვის იყო დაახლოებით 11 დოლარი. თუ თქვენ არ გინდათ rgb განათება და გეგმავთ მხოლოდ ერთის დამზადებას, უნდა გაითვალისწინოთ თქვენი კლავიატურის დამზადება PCB– ის გარეშე.

დაფის დიზაინი საკმაოდ პირდაპირი იყო. მე მხოლოდ დამჭირდა კომპონენტის დამატება ჩამრთველებისთვის, მაგრამ რამდენიმე ვიდეოს ნახვის შემდეგ გავარკვიე. ერთადერთი, რაც მე მივხვდი, არის ის, რომ ხვრელების განთავსება არის ძალიან ახლოს კონცენტრატორებთან.

PCB– ის შესაკვეთად გადადით https://jlcpcb.com/ და შეარჩიეთ 2 ფენიანი ვარიანტი. ის მოგთხოვთ გერბერის ფაილს. ჩამოტვირთეთ ფაილი ".zip" და გადაიტანეთ იგი ფანჯარაში. თქვენ არ გჭირდებათ მისი მოხსნა. პარამეტრები კარგად უნდა იყოს და შეგიძლიათ გააგრძელოთ და შეასრულოთ შეკვეთა.

ნაბიჯი 4: შემთხვევის დიზაინი და შეკრების რჩევები

საქმის დიზაინი და შეკრების რჩევები
საქმის დიზაინი და შეკრების რჩევები
საქმის დიზაინი და შეკრების რჩევები
საქმის დიზაინი და შეკრების რჩევები
საქმის დიზაინი და შეკრების რჩევები
საქმის დიზაინი და შეკრების რჩევები
საქმის დიზაინი და შეკრების რჩევები
საქმის დიზაინი და შეკრების რჩევები

დიზაინი

როგორც უკვე აღვნიშნეთ, ჩემი დიზაინი ხარვეზია, მაგრამ მაინც შეგიძლიათ დაბეჭდოთ, თუ გსურთ. დიზაინი დამზადებულია Fusion 360. ეს არის უფასო 3D მოდელირების პროგრამა და გამომგონებლისა და მყარი სამუშაოების გამოცდილებით, საკმაოდ ადვილი იყო მუშაობა. კორპუსის კუთხეებში არსებული წრეები დაბრკოლების თავიდან ასაცილებლად.

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

შეკრება

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

1. შეაერთეთ SMD კომპონენტები. ეს არის რეზისტორები, კონდენსატორები და LED- ები.

2. შედუღეთ Arduino pro micro.

3. მოათავსეთ 3 გადამრთველი 3D დაბეჭდილ საფარში შედუღებამდე. გადასაფარებლის შედუღების შემდეგ საფარის ამოღება შეუძლებელია. არ არის რეკომენდებული ამომრთველების ჩამოსხმა და მათი განადგურება.

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

5. მოათავსეთ აწყობილი საფარი 3D ბეჭდვით ჩანთაში და დააფიქსირეთ ლენტით ან გამოიყენეთ ჭანჭიკები, თუ ისინი ხელს არ შეუშლიან კლავიშებს.

6. განათავსეთ keyCaps კონცენტრატორებზე და თქვენ მზად ხართ.

რეკომენდაციები

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

ასევე ქვედა ნაწილში გამართული ფეხი კარგია სრიალის საწინააღმდეგოდ და rgb სინათლე ანათებს.

ნაბიჯი 5: კოდი V1 (აპარატურის განმუხტვა)

კოდი V1 (აპარატურის განმუხტვა)
კოდი V1 (აპარატურის განმუხტვა)
კოდი V1 (აპარატურის განმუხტვა)
კოდი V1 (აპარატურის განმუხტვა)

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

კოდის ატვირთვა

ჯერ გადმოწერეთ სამივე.ino. ფაილი და ჩადეთ ერთ საქაღალდეში. თუ არ გაქვთ Arduino IDE უბრალოდ გადმოწერეთ უფასოდ ოფიციალურ arduino საიტზე.

შეაერთეთ თქვენი Arduino თქვენს კომპიუტერთან და გახსენით "OSU_Keyboard_code_V1.ino". Tools Board- ში აირჩიეთ "Arduino/Genuino Micro". ასევე ინსტრუმენტებში აირჩიეთ სწორი COM პორტი. ეს ზოგჯერ შეიძლება შეიცვალოს. კოდის თქვენს Arduino– ზე ასატვირთად უბრალოდ დააწკაპუნეთ ისარზე ეკრანის ზედა მარცხენა კუთხეში და დაელოდეთ სანამ ის გეტყვით, რომ დასრულებულია ქვედა მარცხენა კუთხეში.

OSU_Keyboard_code_V1

მათ შორის და განსაზღვრა

ჯერ უნდა შეიყვანოთ კლავიატურის ბიბლიოთეკა. ეს შესაძლებელს ხდის Arduino- ს კლავიატურად გამოყენებას.

შემდეგი, მე განვსაზღვრე რამდენიმე მნიშვნელობა. განსაზღვრება ისეთივეა, როგორც ცვლადი, მაგრამ პროგრამის გაშვებისას ისინი ვერ შეიცვლება. პირველი 9 არის კლავიატურის პერსონაჟისთვის, არდუინოს პინის ნომერი და პორტის ბიტი.

შემდეგ LED მონაცემებისა და საათის პორტი.

ასევე განისაზღვრება led- ების რაოდენობა და ცვლადი ფერის ბორბლის კუთხისთვის.

Აწყობა

კოდის ეს ნაწილი შესრულდება მხოლოდ ერთხელ, როდესაც arduino ჩართულია.

პირველ რიგში LED- ების საათი და მონაცემთა ქინძისთავები დადგენილია როგორც გამომავალი და გადამრთველის ქინძისთავები, როგორც შემავალი. ეს არის pinMode () მოწინავე ვერსია. თუ თქვენ დაინტერესებული ხართ მოძებნეთ "პირდაპირი პორტის მანიპულირება".

Keyboard.begin () უბრალოდ იწყებს USB კავშირს კლავიატურის სახით.

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

მარყუჟი

ეს ნაწილი განუწყვეტლივ მეორდება სანამ არდუინო იკვებება.

მე მას მხოლოდ LED- ების ფერის შეცვლისა და განახლებისთვის ვიყენებ.

აწყვეტინებს

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

პირველი ის ამოწმებს ღილაკს დაჭერილი თუ გამოშვებული და აგზავნის კლავიატურის სწორ ბრძანებას.

LED (ახსნილია სხვადასხვა თანმიმდევრობით)

თუ გაინტერესებთ როგორ კონტროლდება LED- ები, უნდა ნახოთ APA102 მონაცემთა ცხრილი.

OneBit

ეს არის ციფრული წერის პირდაპირი პორტის მანიპულირების ვერსია.

პირველ რიგში ის ამოწმებს უნდა გამოაგზავნოს 0 ან 1 და შესაბამისად გაიყვანს მონაცემთა პინს დაბალ ან მაღალ. შემდეგ ის წერს საათის პინს ძალიან მოკლედ და ისევ დაბლა წერს.

OneByte

ეს მეორდება oneBit 8 -ჯერ "for" მარყუჟით. ის კითხულობს პირველ ბიტს ბაიტში და გადასცემს თავის მნიშვნელობას oneBit ფუნქციას და იგივეს აკეთებს მომდევნო 7 ბიტისთვის.

ლედდატა

ეს მეორდება oneByte 4 -ჯერ, რათა უზრუნველყოს მონაცემები ერთი led– ისთვის. პირველი ბაიტი იწყება 111xxxxx და 5 ბიტიანი სიკაშკაშის მნიშვნელობით xxxxx– ის ადგილას. სიკაშკაშე შეიძლება იყოს 0 -დან 31 -მდე (2^5 = 32 დონე).

შემდეგი 3 ბაიტი არის ლურჯი, მწვანე და წითელი მნიშვნელობებისთვის. თითო ბაიტი თითოეული ფერისთვის.

ColorWheelThisLed

ეს ფუნქცია მოუწოდებს ledData აძლევს მას rgb ფერებს, რაც დამოკიდებულია ფერის ბორბლის კუთხეზე.

16 ბიტიანი ღირებულება არის დივიდენდი 6 თანაბარ მანძილზე 60 გრადუსზე. სურათების დათვალიერება დაგეხმარებათ უკეთ გაიგოთ.

(ასევე მოცემულია 8 ბიტიანი ვერსია, მაგრამ გამოაქვეყნეს კომენტარი, რადგან ის ძალიან მბჟუტავია)

StartEndFrame

დაწყების ჩარჩო უნდა იქნას გამოყენებული ყოველ ჯერზე, როდესაც გსურთ ახალი ფერის გაგზავნა led– ებზე და გსურთ განაახლოთ led– ების რეალური ფერი

მე ვიყენებ მხოლოდ დაწყების ჩარჩოს, რადგან ბოლო ჩარჩო არ არის საჭირო. საწყისი ჩარჩო არის 4 ბაიტი 0. ბოლო ჩარჩო არის 4 ბაიტი 255 (11111111).

ნაბიჯი 6: კოდი V2 (პროგრამული უზრუნველყოფა Debounce With Timers)

კოდი V2 (პროგრამული უზრუნველყოფა Debounce With Timers)
კოდი V2 (პროგრამული უზრუნველყოფა Debounce With Timers)

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

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

ძირითადად კოდის უმეტესობა ერთნაირად მუშაობს და led კოდი ხელუხლებელი რჩება. რა შეიცვალა გარე შეფერხებები არ გამოიყენოთ arduino ფუნქციები. ახლა ის მუშაობს სუფთა C კოდში. ახლა კი რა არის პროგრამული უზრუნველყოფის შეწყვეტა. ამისათვის მე გამოვიყენე AVR ქრონომეტრები, რომ დაველოდო გარკვეული დროის განმავლობაში, სანამ არ წყდებოდა ბზინვარება. იმის გამო, რომ ქრონომეტრები შეფერხებულია, განმუხტვის დროზე გავლენას არ ახდენს არაფერი, რაც ხდება მარყუჟში.

ერთადერთი მინუსი, რომლის მოფიქრებაც შემიძლია, არის ის, რომ არდუინოს დაყოვნების ფუნქციები აღარ გამოიყენება. იმის გამო, რომ შეფერხების ფუნქციები იყენებენ ტაიმერს 0 და ეს პროგრამა იყენებს ტაიმერს 0 დენონსაციისთვის.

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

ნაბიჯი 7: კოდი V3 (პროგრამული უზრუნველყოფის Debounce With Vertical Counter) (რეკომენდირებულია) (LED- ის გარეშე)

კოდი V3 (პროგრამული უზრუნველყოფის Debounce With Vertical Counter) (რეკომენდირებულია) (LED- ის გარეშე)
კოდი V3 (პროგრამული უზრუნველყოფის Debounce With Vertical Counter) (რეკომენდირებულია) (LED- ის გარეშე)

ამ კოდს ასევე აქვს ვერსია, სადაც თქვენ არ გჭირდებათ გამშვები რეზისტორები. დარწმუნდით, რომ დააკავშირებთ თითოეულ ღილაკს შესასვლელთან და GROUND- თან! გამოიყენება ჩამონტაჟებული გაყვანა

მე ასევე განვიცადე რამდენიმე არარეგისტრირებული პრესა კოდი V2- ში. მე ვფიქრობ, რომ კოდი გახდა ძალიან რთული თავისი ქრონომეტრებითა და გარე შეფერხებით და შეიძლება გამოვტოვე გამონაკლისი. ამ მიზეზით, მე ნულიდან ვცდილობდი ინტერნეტში ვეძებო პროგრამული უზრუნველყოფის განმუხტვის მეთოდები.

(გულწრფელად გითხრათ, ამ პროექტის ნახევარი მაინც გახდა ღილაკზე დენონსირება ამ ეტაპზე)

ძებნის შემდეგ წავაწყდი ამ პოსტს:

www.compuphase.com/electronics/debouncing….

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

ჩემი ახსნა

დროის დიაგრამა (დამზადებულია WaveDrom– ში), რომელიც მე დავამატე, ცოტათი გასაგები უნდა გახადოს ეს რთული მათემატიკური გაგება. გაითვალისწინეთ, რომ გამოსახულებას აქვს 2 საპირისპირო ბიტი, მაგრამ ჩემს კოდს აქვს 3. ეს ნიშნავს დებინუსის ხანგრძლივობას.

ერთი ბიტი თითო ღირებულებაზე

ვერტიკალური მრიცხველის განხორციელებით შესაძლებელია რამდენიმე ღილაკის დენონსირება ერთდროულად, პარალელურად. ყველა მნიშვნელობა არის ტიპის Byte (uint8_t) და შედგება 8 ბიტისგან. ჩვენ არ გვაინტერესებს რა ღირებულებას შეიცავს რომელიმე ეს ბაიტი, არამედ ჩვენ გვაინტერესებს ბიტები თავისთავად. ყველა დუბონირებული ბუტონი იყენებს მხოლოდ თითო ბიტს თითოეულ ბაიტს. პირველი ღილაკი იყენებს თითოეული ბაიტის მხოლოდ პირველ ბიტს, მეორე ღილაკს იყენებს მეორე ბიტს და ა.

ყველა ერთდროულად

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

8 ბიტიანი მონაცემთა ტიპით შესაძლებელია ამის გაკეთება 8 ღილაკისთვის. უფრო დიდი მონაცემთა ტიპების გამოყენება ერთდროულად უფრო მეტ დებიუანსს იძლევა.

დებიუანსი

განმუხტვის რუტინა ხორციელდება ყოველ 1 მილიწამში ტაიმერის შეფერხებით.

როდესაც ღილაკზე დაჭერილია buttonState, რომელიც არის დებუნცირებული მდგომარეობა, emedeately დაიკლებს, რაც მიუთითებს ღილაკის დაჭერაზე. გამოშვების დასადგენად, ღილაკი უნდა იყოს საკმარისად დიდი ხნის განმავლობაში, რაც მიუთითებს იმაზე, რომ ის გარკვეული დროის განმავლობაში არ გადახტომილა. გადართვა გამოიყენება ღილაკის ცვლილების აღსანიშნავად. მრიცხველის ბიტები გამოიყენება…. ითვლიან რამდენი ხანია არ არსებობს გადახტომა.

დელტა მიუთითებს განსხვავებას შეყვანისა და გამოცხადებულ მდგომარეობას შორის. მხოლოდ მაშინ, როდესაც არსებობს სხვაობა, მრიცხველი ჩაითვლება. მრიცხველი გადატვირთული იქნება, როდესაც გამოჩნდება ზარალი (დელტა არის 0).

ნაბიჯი 8: შედეგი

Image
Image

თუ ყველაფერი კარგად წავიდა, თქვენ უნდა გქონდეთ სამუშაო კლავიატურა ოსუს სათამაშოდ! ჩართული მე პირადად საერთოდ არ შემიმჩნევია რაიმე შეფერხება. თუ ასეა, გთხოვთ შემატყობინოთ. ასევე, თუ რაიმე შეკითხვა გაქვთ, თავისუფლად დაუსვით რაიმე.

V2– ის შესახებ წინა ხსენებები არ იგულისხმება როგორც დაპირება, ასე რომ არ გადადოთ ეს პროექტი, რადგან გსურთ დაელოდოთ V2– ს.

იმედი მაქვს მოგეწონებათ კლავიატურა!

ოსუ! სახელი: Thomazzz3

Დიაგნოსტიკა

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

ერთი ან რამდენიმე გასაღები არ მუშაობს?

შესაძლებელია შედუღებისას გაანადგუროთ გადამრთველი შინაგანად. თუ თქვენ გაქვთ მულტიმეტრი დააყენეთ უწყვეტობა/სიგნალი, დააყენეთ ის გადამრთველის პარალელურად, სანამ არდუინო არ არის დაკავშირებული და დააჭირეთ ღილაკს. უნდა იყოს სიგნალი.

ემთხვევა თუ არა თქვენ მიერ აკრეფილი სიმბოლოები ოსუსში კონფიგურაციულ კლავიშებს! ?

შეცვალეთ სიმბოლოები არდუინოს კოდში პირველ 3 #განსაზღვრებში ('' დამცავია!).

ან შეცვალე შენი ოსუ! პარამეტრები კონფიგურირებული გასაღებების გამოსაყენებლად.

რამდენჯერმე მეორდება ერთი ან რამდენიმე გასაღები?

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

თუ თქვენ გაქვთ პრობლემები თქვენს LED- ებთან

ციმციმებს LED- ები?

შედუღების კავშირი შეიძლება იყოს ფხვიერი. თუ თქვენ იყენებთ PCB– ს, დაადასტურეთ, რომ შედუღების კალის რეალურად შემოვიდა დაბეჭდილი ბალიში.

არცერთი led არ მუშაობს ან გარკვეული რაოდენობის LED- ები წყვეტს მუშაობას?

შეამოწმეთ შორტები პირველი შუქდიოდის კონექციებს შორის (მიჰყევით ბილიკებს) და შეამოწმეთ თუ არა კარგად დაკავშირებული თუნუქი არდუინოს გამოსასვლელებზე და ისევ პირველი LED. თუ დადასტურდება, რომ სწორია და მაინც ხარვეზია, შეიძლება დაგჭირდეთ პირველი LED- ის შეცვლა.

თუ ეს გამოასწორებს, საჭიროების შემთხვევაში გაიმეორეთ შემდეგი LED- ებისთვის.

გირჩევთ: