Բովանդակություն:

Օսու! Ստեղնաշար ՝ 8 քայլ (նկարներով)
Օսու! Ստեղնաշար ՝ 8 քայլ (նկարներով)

Video: Օսու! Ստեղնաշար ՝ 8 քայլ (նկարներով)

Video: Օսու! Ստեղնաշար ՝ 8 քայլ (նկարներով)
Video: Armenian Grand Prix 2022 of Kyokushin karate / Հայաստանի Կիոկուշին կարատեի Գրան Պրի 2022 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 միկրո:

Արդուինոյի տախտակների մեծ մասը, ինչպիսին է Uno- ն (Atmega328), չունեն USB կապի բնիկ աջակցություն: Այո, դուք կարող եք դրանք շատ հեշտությամբ ծրագրավորել USB- ով, և ես կարծում եմ, որ կան լուծումներ, բայց ես սիրում եմ այն պարզ պահել, երբ խոսքը վերաբերում է USB հաղորդակցությանը, և չգիտեմ, արդյոք լուծումները նույնքան արձագանքող են: Այդ տախտակները օգտագործում են արտաքին չիպ ՝ USB հաղորդակցությունը հնարավոր դարձնելու համար, մինչդեռ Arduino pro micro (Atmega32U4) - ում այն ներկառուցված է:

Անջատիչները

Կան բազմաթիվ մեխանիկական անջատիչներ, որոնք կարող եք օգտագործել: Գծային, շոշափելի կամ սեղմիչ Kailh- ից կամ Cherry MX- ից: Ընտրեք, որը Ձեզ դուր է գալիս: Ես օգտագործեցի Kailh անջատիչները, քանի որ դրանք էժան էին Ailexpress- ում: Եթե որոշեք օգտագործել PCB- ն, ձեզ հարկավոր են Kailh BOX անջատիչներ: Գույնը որոշում է զգացումը:

Էլեկտրոնային բաղադրիչներ

Այս գլխում դրանց մասին շատ բան բացատրելու կարիք չկա, բայց եթե դուք չօգտագործեք PCB- ն, ես խորհուրդ կտամ զոդման հեշտության համար սովորական սովորական անցքերի բաղադրամասեր: Unfortunatelyավոք, օգտագործվող լուսարձակները հասանելի չեն փոսերի փաթեթներում: Ես նաև խորհուրդ չեմ տա լարեր օգտագործել SMD փաթեթների վրա, եթե դուք շատ վստահ չեք ձեր զոդման հմտությունների վրա: Նույնիսկ SMD- ի համար PCB- ի վրա «առաջադեմ» եռակցման հմտությունները հավասարեցված են:

Բնակարանային

Ես իսկապես բնակարան եմ տրամադրում այս նախագծում, բայց այն այս պահին թերի է: Պտուտակներ տեղադրելու համար անհրաժեշտ են փոփոխություններ, լուսարձակների բացերը օպտիմալ չեն, arduino- ն ցուցադրվում է, և USB- ի տեղավորման համար անհրաժեշտ է կտրել մի մասը: Ապագայում նոր բնակարան կարող է ավելացվել: Եթե ունեք 3D տպիչ, շարունակեք և տպեք այն, բայց խնդրում ենք մի՛ հեռացեք ձեր արատավոր պատյանը տպելու համար, եթե դա չեք անում և պարզապես օգտագործում եք ինչ -որ նախագծի տուփ:

Քայլ 2: Սխեմատիկ

Սխեմատիկ
Սխեմատիկ

Այս նախագծի սխեման բավականին պարզ է, բայց ես ուզում եմ բաղադրիչները բացատրել այն մարդկանց համար, ովքեր հետաքրքրված են և չգիտեն այս իրականացումը:

Անցում միացրեք Arduino- ին

Անջատիչները միացված են Arduino 0, 2 և 3 կապումներին, քանի որ դրանք կարող են օգտագործվել որպես արտաքին ընդհատումներ: Սա լրացուցիչ բացատրվում է ծածկագրերի բաժնում:

Դեբունցային սխեմա

Սխեմատիկայի ձախ կողմում մի շրջան է, որը պատճենվում է 3 անգամ: Այս սխեման օգտագործվում է անջատիչը անջատելու համար: Որպեսզի իմանաք, թե ինչ է դեոնսինգը, դուք պետք է հասկանաք անջատիչ վերադարձը, և դա դժվար չէ հասկանալ:

Առաջին նկարը նկարելու համար առաջին հերթին նայեք այս մոդելավորմանը (արագ սեղմեք անջատիչի վրա և նայեք ներքևի ազդանշանին)

Երբ անջատիչը սեղմում կամ բաց եք թողնում, այն ցատկում է, և ձեր ազդանշանը մի քանի միլիվայրկյան մի քանի անգամ փոխվում է բարձրի և ցածրի միջև: Արդուինոն իսկապես արագ է և կարդում է ամեն բարձր ու ցածր այս կարճ ժամանակում: Programրագիրը կուղարկի առանցքային մամուլ կամ հաղորդագրություն ամեն անգամ, երբ բարձր կամ ցածր կարդալը, ուստի յուրաքանչյուր սեղմման դեպքում ձեր համակարգիչը կստանա մի քանի ստեղն սեղմումներ: Իդեալական չէ ռիթմիկ խաղի համար:

Այս դեբոնսային սխեման կդանդաղեցնի ազդանշանի անկման եզրը: Arduino- ի ազդանշանը չի կարող փոխվել այնքան արագ, որքան առաջանում է ցատկումը, այնպես որ այն կկարդա մեկ սեղմումով: Մի անհանգստացեք, որ հաջորդ իսկական մամուլի համար այն կդանդաղի, քանի որ դա տեղի կունենա:

Ընդլայնված:

Atmaga32U4- ը թվային ցածր է կարդում 0.2Vcc - 0.1V = 0.9 վոլտ: Կոնդենսատորի լարումը ցանկացած պահի իր լիցքաթափման մեջ Vcc * e^(-t/RC) է: Եթե ձեր անջատիչի վրա այլ ելքի ժամանակ եք չափում, կարող եք հաշվարկել ձեր դիմադրության և կոնդենսատորի արժեքները:

բանաձևի ձև

LED- ները

Rgb LED- ները APA102 լուսարձակներ են, որոնք անհատապես հասցեագրելի են ժամացույցի և տվյալների գծի միջոցով: Դրանք աշխատեցնելու համար արտաքին բաղադրիչներ պետք չեն: Շատ LED- ների համար դուք պետք է օգտագործեք 5 վոլտին և գետնին զուգահեռ կոնդենսատոր, բայց ընդամենը 4 LED- ով դա ձեզ պետք չէ:

Քայլ 3: Տախտակի ձևավորում

Տախտակի ձևավորում
Տախտակի ձևավորում

PCB- ն նախագծված է JLCPCB- ում: Ինձ չեն հովանավորում, բայց էժան նախատիպերի համար նրանք հիանալի PCB են պատրաստում: 2 դոլարով դուք ստանում եք 10 նույն տախտակից, բայց առաքումն ինձ համար մոտ 11 դոլար էր: Եթե դուք անպայման չեք ցանկանում rgb լուսավորություն և պլանավորում եք պատրաստել միայն մեկը, ապա պետք է հաշվի առնեք ձեր ստեղնաշարը առանց PCB- ի պատրաստման մասին:

Տախտակի դիզայնը բավականին ուղիղ էր: Ինձ անհրաժեշտ էր միայն անջատիչների բաղադրիչ ավելացնել, բայց որոշ տեսանյութեր դիտելուց հետո հասկացա: Միակ բանը, որ ես հասկացա, այն է, որ անցքերի տեղադրումը մի փոքր շատ մոտ է անջատիչներին:

PCB պատվիրելու համար այցելեք https://jlcpcb.com/ և ընտրեք 2 շերտով տարբերակը: Այն ձեզանից Gerber ֆայլ կպահանջի: ներբեռնեք «.zip» ֆայլը և քաշեք այն պատուհանի մոտ: Անհրաժեշտ չէ այն բացել: Կարգավորումները պետք է լավ լինեն, և դուք կարող եք առաջ գնալ և կատարել պատվերը:

Քայլ 4. Գործի ձևավորման և հավաքման խորհուրդներ

Գործի նախագծման և հավաքման խորհուրդներ
Գործի նախագծման և հավաքման խորհուրդներ
Գործի նախագծման և հավաքման խորհուրդներ
Գործի նախագծման և հավաքման խորհուրդներ
Գործի նախագծման և հավաքման խորհուրդներ
Գործի նախագծման և հավաքման խորհուրդներ
Գործի նախագծման և հավաքման խորհուրդներ
Գործի նախագծման և հավաքման խորհուրդներ

Դիզայն

Նախկինում պատկերված լինելով, իմ դիզայնը թերի է, բայց եթե ցանկանում եք, այն դեռ կարող եք տպել: դիզայնը կատարվել է Fusion 360 -ում: Դա անվճար 3D մոդելավորման ծրագիր է: Գործի անկյունների շրջանակները պետք է կանխեն տպածածկույթից կեղևը:

Եթե դուք ինքներդ եք գործում, միայն մեկ բան է իսկապես կարևոր: Ձեր անջատիչները պետք է ամուր տեղադրվեն և չկարողանան տեղաշարժվել: Ես տրամադրել եմ քառակուսի հատումների նկարներ չափսերով, որպեսզի կարողանաք օգտագործել այն ձեր սեփական դիզայնի համար ՝ ենթադրելով, որ օգտագործում եք Kailh BOX անջատիչներ:

Ժողով

Այժմ դուք ունեք բոլոր բաղադրիչները, որոնք անհրաժեշտ են հավաքման համար: Այս առաջին տարբերակը հավաքելու հրաման կա, քանի որ անջատիչները միացված են:

1. Sոդեք SMD բաղադրիչները: դրանք ռեզիստորներն են, կոնդենսատորները և LED- ները:

2. Sոդեք Arduino pro micro- ը:

3. Եռակցումից առաջ տեղադրեք 3 անջատիչը 3D տպագիր ծածկույթի մեջ: Անջատիչների եռակցումից հետո ծածկը չի կարող հեռացվել: Անջատիչների ապակոդավորումը խորհուրդ չի տրվում և կարող է դրանք քանդել:

4. Այժմ միացրեք անջատիչները տեղում: Դա արեք հնարավորինս արագ, քանի որ պլաստիկ անջատիչները կարող են հալվել և փչացնել դրանք կամ կտրուկ նվազեցնել կտտոցների թիվը:

5. Տեղադրված ծածկը դրեք 3D տպված պատյանում և ամրացրեք ժապավենով կամ օգտագործեք պտուտակներ, եթե դրանք չեն խանգարում բանալիների գլխարկներին:

6. Տեղադրեք keyCaps- ը անջատիչների վրա և ավարտված եք:

Առաջարկություններ

Ձեր ծածկագիրը վերբեռնելուց հետո ապամոնտաժեք կամ դիմակավորեք arduino- ի LED- ները: Լեդերը հաճելի են ունենալ, եթե ձեր կոդը չի վերբեռնվում, բայց հաճելի չէ դիտվել որպես պատրաստի արտադրանք: Պահանջվում է հմտություն և ուղղահայաց պինցետ:

Նաև ներքևի որոշ բռնակներով ոտքերը հարմար են սայթաքման դեմ և թույլ են տալիս rgb լույսը փայլել:

Քայլ 5. Կոդ V1 (ապարատային դեբոնս)

Կոդ V1 (ապարատային դեբոնս)
Կոդ V1 (ապարատային դեբոնս)
Կոդ V1 (ապարատային դեբոնս)
Կոդ V1 (ապարատային դեբոնս)

Այս նախագծի ծածկագիրը սկսնակների համար հարմար չէ, այնպես որ, եթե դուք նոր եք սկսում ծրագրավորել arduino- ով, ապա այս ծածկագիրը, հավանաբար, ձեզ մի փոքր կվախեցնի: Այնուամենայնիվ, ես կփորձեմ հնարավորինս լավ բացատրել, թե ինչ է կատարվում: Որոշ բաներ ավելի ուշ բացատրվում են այս տեքստում, այնպես որ, եթե հարցեր ունեք, նախ կարդացեք ամբողջը:

Կոդի վերբեռնում

Նախ ներբեռնեք բոլոր 3.ino ֆայլերը և դրեք դրանք մեկ թղթապանակում: Եթե դուք չունեք Arduino IDE, պարզապես ներբեռնեք այն անվճար arduino պաշտոնական կայքում:

Միացրեք ձեր Arduino- ն ձեր համակարգչին և բացեք «OSU_Keyboard_code_V1.ino»: Գործիքների տախտակում ընտրեք «Arduino/Genuino Micro»: Նաև Գործիքներում ընտրեք ճիշտ COM նավահանգիստը: Սա երբեմն կարող է փոխվել: Ձեր Arduino- ում կոդը վերբեռնելու համար պարզապես կտտացրեք էկրանի վերևի ձախ մասում գտնվող սլաքին և սպասեք, մինչև այն ձեզ ասի, որ այն ավարտված է ներքևի ձախ մասում:

OSU_Keyboard_code_V1

Ներառյալ և սահմանող

Նախ անհրաժեշտ է ներառել Ստեղնաշարի գրադարանը: Սա հնարավորություն է տալիս օգտագործել Arduino- ն որպես ստեղնաշար:

Հաջորդը ես որոշ արժեքներ եմ սահմանում: Define- ը նման է փոփոխականի, բայց դրանք չեն կարող փոխվել, երբ ծրագիրը աշխատում է: Առաջին 9 -ը նախատեսված են ստեղնաշարի բնույթի, arduino- ի համարի և պորտի բիթերի համար:

Այնուհետեւ LED տվյալների եւ ժամացույցի նավահանգիստի բիթերը:

Նաև սահմանվում է լուսարձակների քանակը և փոփոխական `գունավոր անիվի անկյունի համար:

Կարգավորում

Կոդի այս հատվածը կկատարվի միայն մեկ անգամ, երբ arduino- ն միացված է:

Սկզբում LED- ների ժամացույցի և տվյալների կապի նշանները դրվում են որպես ելքեր, իսկ անջատիչի կապերը `որպես մուտքեր: Սա pinMode- ի () առաջադեմ տարբերակն է: Եթե հետաքրքրված եք, որոնեք «ուղիղ նավահանգստի մանիպուլյացիա»:

Keyboard.begin () պարզապես usb կապը սկսում է որպես ստեղնաշար:

Հաջորդ 3 ընդհատումները միացված են անջատիչի կապերին: Ամեն անգամ, երբ անջատիչի քորոցում փոփոխություն է հայտնաբերվում, մի փոքրիկ ծրագիր կիրականացվի: Այս փոքրիկ ծրագիրը հետագայում կկատարվի:

Օղակ

Այս հատվածը շարունակաբար կկրկնվի, քանի դեռ arduino- ն աշխատում է:

Ես այն օգտագործում եմ միայն LED- ների գույնը փոխելու և թարմացնելու համար:

Ընդհատում է

Այստեղ պատրաստվում են այն փոքրիկ ծրագրերը, որոնք կիրականացվեն միայն այն ժամանակ, երբ անջատիչի կապում փոփոխություն հայտնաբերվի: Նրանք նույնական են, բացառությամբ այն բանի, թե որ քորոցին են արձագանքում:

Սկզբում այն ստուգում է, արդյոք կոճակը սեղմված է կամ բաց թողնված, և ուղարկում է ստեղնաշարի ճիշտ հրամանը:

LED (բացատրվում է այլ հերթականությամբ)

Եթե ձեզ հետաքրքիր է, թե ինչպես են վերահսկվում LED- ները, ապա պետք է նայեք APA102 տվյալների թերթին:

OneBit

Սա կրկին թվային գրելու ուղղակի պորտի մանիպուլյացիոն տարբերակն է:

Նախ ստուգում է, արդյոք այն պետք է ուղարկի 0 կամ 1 և համապատասխանաբար քաշում է տվյալների քորոցը ցածր կամ բարձր: Այնուհետև այն շատ կարճ է գրում ժամացույցի բարձրությունը և նորից գրում ցածր:

OneByte

Սա կրկնում է oneBit- ը 8 անգամ «for» օղակով: Այն կարդում է առաջին բիթը բայթում և իր արժեքը փոխանցում է oneBit գործառույթին և նույնն անում հաջորդ 7 բիթերի համար:

LedData

Սա կրկնում է oneByte- ը 4 անգամ ՝ մեկ led- ի համար անհրաժեշտ տվյալները տրամադրելու համար: Առաջին բայթը սկսվում է 111xxxxx- ով և 5 բիթ պայծառության արժեքով xxxxx- ի տեղում: Պայծառությունը կարող է սահմանվել 0 -ից 31 -ի (2^5 = 32 մակարդակ):

Հաջորդ 3 բայթերը կապույտ, կանաչ և կարմիր արժեքների համար են: Յուրաքանչյուր գույնի համար մեկ բայթ:

ColorWheelThisLed

Այս գործառույթը կոչում է ledData ՝ տալիս է նրան rgb գույները ՝ կախված գունային անիվի անկյունից:

16 բիթանոց արժեքը բաժանում է 60 աստիճանի հավասարաչափ տարածված 6 հատվածներում: Պատկերներին նայելը կարող է օգնել ձեզ ավելի լավ հասկանալ:

(տրամադրվում է նաև 8 բիթանոց տարբերակ, բայց մեկնաբանվում է, քանի որ այն չափազանց թրթռում է)

StartEndFrame

Մեկնարկի շրջանակը պետք է օգտագործվի ամեն անգամ, երբ ցանկանում եք նոր գույներ ուղարկել led- ներին և ցանկանում եք արդիականացնել led- ների իրական գույնը

Ես օգտագործում եմ միայն մեկնարկային շրջանակը, քանի որ վերջնագծի կարիքը չկա: Մեկնարկի շրջանակը 4 բայթ է 0. Վերջի շրջանակը `4 բայթ 255 -ից (11111111):

Քայլ 6: Կոդ V2 (ծրագրակազմը ժխտում է ժամաչափերով)

Կոդ V2 (ծրագրակազմը դուրս է գալիս ժամանակաչափերով)
Կոդ V2 (ծրագրակազմը դուրս է գալիս ժամանակաչափերով)

Որոշ ժամանակ խաղալուց հետո ես նկատեցի ապարատային դեբոնսի կրկնակի հպման խնդիրներ: Սա կարող է շտկվել այլ արժեքային ռեզիստորների կամ կոնդենսատորների միջոցով, բայց քանի որ կոճակները և կափարիչը շարժական չեն, ես մտածեցի, որ ծրագրաշարի ապամոնտաժումը լավ լուծում կլինի: Softwareրագրային ապահովման ապամոնտաժումը պետք է աշխատի, եթե ապարատային ապամոնտաժումն իրականացվի, թե ոչ: Իմ ընթացիկ կարգավորման մեջ ես չկարողացա կափարիչը հանել, այնպես որ ես պարզապես թողեցի դիմադրիչները և կոնդենսատորները տեղում:

Ես չեմ բացատրի ծածկագիրը նույնքան ծավալուն, որքան նախորդ տարբերակը, քանի որ դա մի փոքր ավելի դժվար է բացատրել:

Հիմնականում ծածկագրի մեծ մասը նույնն է աշխատում, և led ծածկագիրը մնում է անփոփոխ: այն, ինչ փոխվեց, արտաքին ընդհատումներն այլևս չեն օգտագործում arduino գործառույթները: Այժմ այն աշխատում է մաքուր C կոդով: Եվ հիմա այն, ինչ ավելացվում է, ծրագրաշարի ընդհատումն է: Դրա համար ես օգտագործեցի AVR ժմչփները `որոշակի ժամանակ սպասելու համար, մինչև որ վերադարձը դադարեցվի: Քանի որ ժամանակաչափերն ընդհատվում են ՝ ելքի ժամանակը չի ազդում հանգույցում կատարվող որևէ բանի վրա:

Միակ բացասական կողմը, որին կարող եմ անդրադառնալ, այն է, որ arduino- ի հետաձգման գործառույթներն այլևս չեն կարող օգտագործվել: Քանի որ հետաձգման գործառույթներն օգտագործում են erամաչափ 0 -ը, և այս ծրագիրը օգտագործում է erամաչափ 0 -ը ՝ դուրս գալու համար:

Պատկերում կարող եք տեսնել, թե ինչպես է կոդն աշխատում կոպիտ կերպով: Մեմ բիթը ցույց է տալիս, թե արդյոք ժամանակաչափն աշխատում է: Այն, ինչ պատկերված չէ, այն է, որ կոճակի վերջում սեղմելիս մուտքը ցածր է: Այս դեպքում միայն կոճակը կուղարկվի, մինչ կոճակն արդեն ազատված է: Դա նշանակում է, որ բանալին կպահվի համակարգչի մասով: Այս հազվագյուտ կատարման համար չեկը կձևակերպվի, երբ ժամաչափի ժամկետը լրանա: Եթե ժմչփի վերջում կոճակը սեղմված չէ, կուղարկվի հիմնական թողարկման հրաման:

Քայլ 7: Կոդ V3 (ծրագրակազմը դուրս է գալիս ուղղահայաց հաշվիչով) (խորհուրդ է տրվում) (առանց լուսադիոդի)

Կոդ V3 (ծրագրային անջատում ուղղահայաց հաշվիչով) (խորհուրդ է տրվում) (լուսադիոդ չկա)
Կոդ V3 (ծրագրային անջատում ուղղահայաց հաշվիչով) (խորհուրդ է տրվում) (լուսադիոդ չկա)

Այս ծածկագիրը նույնպես ունի տարբերակ, որտեղ ձեզ հարկավոր չեն ներքև քաշվող դիմադրիչներ: Համոզվեք, որ յուրաքանչյուր կոճակ միացնում եք մուտքին և GROUND- ին: Օգտագործվում է ներկառուցված քաշքշուկը:

Ես նաև որոշ չգրանցված մամլիչներ եմ զգացել V2 ծածկագրում: Կարծում եմ, որ ծածկագիրը պարզապես չափազանց բարդ դարձավ իր ժամանակաչափով և արտաքին ընդհատումներով, և գուցե ես որոշ բացառություններ բաց թողեցի: Այդ պատճառով ես զրոյից սկսեցի փնտրել ինտերնետում ծրագրային ապահովման հեռացման մեթոդներ:

(անկեղծ ասած, այս նախագծի առնվազն կեսը այս պահին դարձել է կոճակի հեռացում)

Որոշ որոնումներից հետո հանդիպեցի այս գրառմանը.

www.compuphase.com/electronics/debouncing….

Honestիշտն ասած, ինձ բավականին ժամանակ պահանջվեց, որպեսզի լիովին հասկանամ, թե ինչպես է այն աշխատում: Այն ներառում է բավականին բարդ մի քանի մանիպուլյացիաներ, բայց ես կփորձեմ դա հնարավորինս հեշտացնել: Այնուամենայնիվ, իմ բացատրությունները կլինեն միայն գրառման լրացում, այնպես որ դուք պետք է գոնե կարդաք «ուղղահայաց հաշվիչները», «ծանոթագրված իրականացումը» և «նվազեցման ուշացումը»:

Իմ բացատրությունը

Իմ ավելացրած ժամանակացույցի դիագրամը (պատրաստված WaveDrom- ում) պետք է գոնե մի փոքր ավելի հասկանալի դարձնի այս դժվարամիտ բիթ մաթեմատիկան: Նկատի ունեցեք, որ պատկերն ունի 2 հաշվիչ, բայց իմ կոդը `3. Սա նշանակում է ավելի երկար դուրսբերման ժամանակ:

Մեկ բիթ մեկ արժեքի համար

Ուղղահայաց հաշվիչի իրագործմամբ հնարավոր է միաժամանակ մի քանի կոճակներ դուրս բերել զուգահեռաբար: Բոլոր արժեքները Byte տիպի են (uint8_t) և բաղկացած են 8 բիթից: մեզ չի հետաքրքրում, թե ինչ արժեք է պարունակում այս բայթերից որևէ մեկը, այլ մեզ հետաքրքրում են բիթերն ինքնուրույն: Մերժման ենթակա յուրաքանչյուր բուտոն օգտագործում է յուրաքանչյուր բայթից միայն մեկ բիթ: Առաջին կոճակը օգտագործում է յուրաքանչյուր բայտի միայն առաջին բիթը, երկրորդ կոճակը օգտագործում է երկրորդ բիթը և այլն:

Բոլորը միևնույն ժամանակ

Օգտագործելով բիթ մաթեմատիկա, հնարավոր է զուգահեռաբար կատարել այս քորոցների հեռացումը: Եվ, չնայած բիթ մաթեմատիկան բավականին բարդ է, այն շատ արդյունավետ է պրոցեսորի համար:

8 բիթանոց տիպի դեպքում հնարավոր է դա անել 8 կոճակի դեպքում: Ավելի մեծ տվյալների տիպերի օգտագործումը թույլ է տալիս միանգամից ավելի շատ ցնցումներ կատարել:

Դեբունսը

Հեռացման ռեժիմը կատարվում է յուրաքանչյուր 1 միլիվայրկյանում `ժամաչափի ընդհատմամբ:

երբ կոճակը սեղմվում է կոճակը Պետությունը, որը դեբունացված վիճակն է, աննկատ իջնելու է ՝ նշելով կոճակը սեղմելը: Թողարկում հայտնաբերելու համար կոճակը պետք է բավականաչափ բարձր լինի, ինչը նշանակում է, որ այն որոշակի ժամանակ չի ցատկել: Toggle- ն օգտագործվում է կոճակի փոփոխությունը նշելու համար: Հաշվիչի բիթերը օգտագործվում են…. հաշվելով, թե որքան ժամանակ է, ինչ վերադարձ չի եղել:

Դելտան ցույց է տալիս տարբերություն մուտքի և դեոնսացված վիճակի միջև: Միայն տարբերության դեպքում հաշվիչը կհաշվի: հաշվիչը կվերակայվի, երբ ցատկում հայտնաբերվի (դելտան 0 է):

Քայլ 8: Արդյունքը

Image
Image

Եթե ամեն ինչ լավ ընթանա, ապա այժմ պետք է աշխատող ստեղնաշար ունենաս ՝ Օսուին նվագելու համար: վրա. Ես անձամբ ընդհանրապես որևէ ուշացում չեմ նկատել: Եթե այո, խնդրում եմ ինձ տեղյակ պահեք: Բացի այդ, եթե որևէ հարց կա, ազատ զգացեք որևէ բան տալու:

V2- ի մասին նախորդ հիշատակումները չեն նշանակում որպես խոստում, այնպես որ մի հետաձգեք այս նախագիծը, քանի որ ցանկանում եք սպասել V2- ին:

Հուսով եմ, որ ձեզ դուր կգա ձեր ստեղնաշարը:

Օսու! անունը ՝ Thomazzz3

Անսարքությունների վերացում

Եթե կարծում եք, որ ստեղնաշարի հետ խնդիրներ ունեք, նախ բացեք տեքստային խմբագիր և սեղմեք յուրաքանչյուր ստեղնը մեկ անգամ կարճ ժամանակով:

Արդյո՞ք մեկ կամ մի քանի ստեղներ չեն աշխատում:

Հնարավոր է, որ դուք զոդման ժամանակ ներքին անջատիչ եք ոչնչացրել: Եթե ունեք մուլտիմետր, միացրեք այն անընդհատության/ազդանշանային ազդանշանի վրա, տեղադրեք այն անջատիչին զուգահեռ, մինչդեռ Arduino- ն միացված չէ և սեղմեք ստեղնը: Այն պետք է ազդանշան տա:

Արդյո՞ք ձեր մուտքագրած կերպարները համընկնում են Osu- ում կազմաձևված ստեղների հետ: ?

Փոփոխեք arduino կոդի նիշերը առաջին 3 #Սահմանումներում ('' անհրաժեշտ է):

Կամ փոխեք ձեր Օսուն: կարգավորումներ ՝ կազմաձևված ստեղները օգտագործելու համար:

Արդյո՞ք մեկ կամ մի քանի ստեղներ կրկնվում են մի քանի անգամ:

Հնարավոր է, որ անջատման սխեման չաշխատի ձեր անջատիչների համար կամ ճիշտ միացված չէ: Ստուգեք ձեր զոդման կապերը: Եթե այն դեռ հայտնվի, փորձեք 1uF կոնդենսատորի արժեքը: Դա շատ դժվար կլինի PCB օգտագործողների համար:

Եթե խնդիրներ ունեք LED- ների հետ

Արդյո՞ք LED- ները թարթում են:

Erոդման միացումը կարող է թուլացած լինել: Եթե դուք օգտագործում եք PCB- ն, հաստատեք, որ զոդման անագը իրոք հոսել է տպագրության պահոցի վրա:

Արդյո՞ք լուսադիոդներից ոչ մեկը չի աշխատում կամ որոշակի թվով LED- ներ չեն դադարում աշխատել:

Ստուգեք շորտերի առկայությունը առաջին լուսադիոդի կոնտակտների միջև (հետևեք հետքերին) և Arduino- ի ելքերի վրա ստուգեք լավ կապի առկայությունը և կրկին առաջին LED- ը: Եթե հաստատված է, որ ճիշտ է և դեռևս թերություն, գուցե անհրաժեշտ լինի փոխարինել առաջին LED- ը:

Եթե դա շտկվի, անհրաժեշտության դեպքում կրկնել հաջորդ LED- ների համար:

Խորհուրդ ենք տալիս: