विषयसूची:

ओसु! कीबोर्ड: 8 कदम (चित्रों के साथ)
ओसु! कीबोर्ड: 8 कदम (चित्रों के साथ)

वीडियो: ओसु! कीबोर्ड: 8 कदम (चित्रों के साथ)

वीडियो: ओसु! कीबोर्ड: 8 कदम (चित्रों के साथ)
वीडियो: HOW Funky Friday CHARTS THEIR SONGS?! (Roblox) 2024, जुलाई
Anonim
ओसु! कीबोर्ड
ओसु! कीबोर्ड

मैंने हाल ही में osu नाम का एक रिदम गेम खेलना शुरू किया है! और एक व्यावसायिक मिनी कीबोर्ड का वीडियो देखने के बाद मैंने सोचा कि यह स्वयं को डिजाइन करने के लिए एक मजेदार परियोजना होगी। इसके कुछ समय बाद मैंने फैसला किया कि इसे अपने पहले प्रोजेक्ट के रूप में इंस्ट्रक्शंस पर रखना एक अच्छा विचार होगा।

यदि आप इस परियोजना को बिल्कुल अंतिम निर्देश पर दोहराना चाहते हैं तो मेरे अतिथि बनें, लेकिन मेरे द्वारा किए गए कुछ निर्णय सबसे कम कीमत या सर्वोत्तम गुणवत्ता पर आधारित नहीं हैं। कुछ घटकों को लगभग विशुद्ध रूप से चुना जाता है क्योंकि मैंने उन्हें चारों ओर लेटा हुआ था। यदि आप इसे संभाल सकते हैं तो मैं आपको अपनी परियोजना को अनुकूलित करने के लिए प्रोत्साहित करूंगा।

नोट 1: एसएमडी घटकों (छोटे इलेक्ट्रॉनिक्स) का उपयोग किया जाता है, इसलिए यदि आप इस परियोजना को दोहराते हैं तो सोल्डरिंग कौशल की आवश्यकता होती है। शायद एक आसान मिलाप संस्करण जोड़ा जाएगा, लेकिन ये एलईडी गर्त छेद पैकेज में नहीं आते हैं

नोट 2: मैंने कोड को कई बार अपडेट किया है और अब मैं संस्करण 3ish तक पहुंच गया हूं। मैं सभी कोड ऑनलाइन छोड़ दूंगा लेकिन मेरा सुझाव है कि आप अंतिम संस्करण का उपयोग करें। इसमें वर्तमान में एलईडी कार्यक्षमता नहीं है, लेकिन यह सबसे अच्छा प्रदर्शन करने वाला होना चाहिए।

चरण 1: सामग्री और स्पष्टीकरण

सामग्री और स्पष्टीकरण
सामग्री और स्पष्टीकरण

आप अपनी परियोजना कैसे बनाते हैं इसके आधार पर आपको विभिन्न घटकों की आवश्यकता हो सकती है, लेकिन ये घटक वे हैं जिनका मैंने उपयोग किया था। यदि आपके पास समय है और आप पैसे बचाना चाहते हैं, तो aliexpress ऑर्डर करें और PCB को ऑर्डर न करें।

1 Arduino प्रो माइक्रो + यूएसबी केबल

3 कैलाश बॉक्स लाल स्विच

3 10k रोकनेवाला (0805 एसएमडी)

3 100nF संधारित्र (0805 SMD)

4 एपीए102 आरजीबी एलईडी (5050 एसएमडी)

3 कीकैप्स

इस परियोजना में 1 मुद्रित सर्किट बोर्ड (पीसीबी) प्रदान किया गया

इस प्रोजेक्ट में दिया गया 1 3डी प्रिंटेड केस

मैं Arduino Pro माइक्रो का उपयोग क्यों करूं?

अधिकांश arduino बोर्ड जैसे Uno (Atmega328) में USB संचार के लिए मूल समर्थन नहीं है। हां, आप उन्हें यूएसबी पर बहुत आसानी से प्रोग्राम कर सकते हैं और मुझे लगता है कि वर्कअराउंड हैं, लेकिन जब यूएसबी संचार की बात आती है तो मैं इसे सरल रखना पसंद करता हूं और मुझे नहीं पता कि वर्कअराउंड उत्तरदायी हैं या नहीं। वे बोर्ड USB संचार को संभव बनाने के लिए एक बाहरी चिप का उपयोग करते हैं जबकि Arduino pro micro (Atmega32U4) में इसे बनाया गया है।

स्विच

कई यांत्रिक स्विच हैं जिनका आप उपयोग कर सकते हैं। कैलाश या चेरी एमएक्स से रैखिक, स्पर्शनीय या क्लिकी। आपको जो पसंद हो उसे चुनें। मैंने कैलाश स्विच का इस्तेमाल किया क्योंकि वे ऐलएक्सप्रेस पर सस्ते थे। यदि आप पीसीबी का उपयोग करना चुनते हैं तो आपको कैलाश बॉक्स स्विच की आवश्यकता होगी। रंग भावना को निर्धारित करता है।

इलेक्ट्रॉनिक घटक

इस अध्याय में उनके बारे में समझाने के लिए बहुत कुछ नहीं है, लेकिन यदि आप पीसीबी का उपयोग नहीं करते हैं तो मैं सोल्डरिंग आसानी के लिए सामान्य गर्त छेद घटकों की सिफारिश करूंगा। दुर्भाग्य से उपयोग की जाने वाली एलईडी ट्रफ होल पैकेज में उपलब्ध नहीं हैं। मैं एसएमडी पैकेज पर तारों का उपयोग करने की भी सिफारिश नहीं करूंगा जब तक कि आप अपने सोल्डरिंग कौशल में बहुत आश्वस्त न हों। यहां तक कि एक पीसीबी पर एसएमडी के लिए "उन्नत" सोल्डरिंग कौशल समान हैं।

निवास

मैं इस परियोजना में एक आवास प्रदान करता हूं, लेकिन इस समय यह त्रुटिपूर्ण है। बोल्ट फिट करने के लिए संशोधनों की आवश्यकता होती है, एल ई डी के लिए उद्घाटन इष्टतम नहीं होते हैं, आर्डिनो उजागर होता है और यूएसबी को फिट करने के लिए एक हिस्से को काटने की आवश्यकता होती है। भविष्य में एक नया आवास जोड़ा जा सकता है। यदि आपके पास एक 3D प्रिंटर है, तो आगे बढ़ें और इसे प्रिंट करें, लेकिन कृपया इस त्रुटिपूर्ण मामले को प्रिंट करने के लिए अपने रास्ते से बाहर न जाएं यदि आप नहीं करते हैं और किसी प्रकार के प्रोजेक्ट बॉक्स का उपयोग करते हैं।

चरण 2: योजनाबद्ध

योजनाबद्ध
योजनाबद्ध

इस परियोजना के लिए योजनाबद्ध बल्कि सरल है, लेकिन मैं उन लोगों के लिए घटकों की व्याख्या करना चाहता हूं जो रुचि रखते हैं और इस कार्यान्वयन को नहीं जानते हैं।

Arduino से कनेक्शन स्विच करें

स्विच Arduino पिन 0, 2 और 3 से जुड़े हुए हैं क्योंकि उन पिनों को बाहरी इंटरप्ट के रूप में उपयोग किया जा सकता है। इसे आगे कोड अनुभाग में समझाया गया है।

बहस सर्किट

योजनाबद्ध के बाईं ओर एक सर्किट है जिसे 3 बार कॉपी किया जाता है। इस सर्किट का उपयोग स्विच को डिबाउंस करने के लिए किया जाता है। यह जानने के लिए कि डिबगिंग क्या है, आपको स्विच बाउंसिंग को समझना होगा और इसे समझना मुश्किल नहीं है।

पहली तस्वीर पेंट करने के लिए पहले इस सिमुलेशन को देखें (स्विच को तेजी से क्लिक करें और नीचे दिए गए सिग्नल को देखें)

जब आप किसी स्विच को दबाते या छोड़ते हैं तो वह बाउंस हो जाता है और आपका सिग्नल कुछ मिलीसेकंड के लिए दो बार उच्च और निम्न के बीच वैकल्पिक होता है। एक Arduino वास्तव में तेज़ है और इस कम समय में हर उच्च और निम्न को पढ़ता है। जब भी उच्च या निम्न पढ़ा जाता है तो प्रोग्राम एक कुंजी प्रेस या रिलीज भेजेगा ताकि प्रत्येक प्रेस के साथ आपके कंप्यूटर को एकाधिक कुंजी प्रेस प्राप्त हो सकें। ताल खेल के लिए आदर्श नहीं है।

यह डिबाउंस सर्किट सिग्नल के गिरते किनारे को धीमा कर देगा। Arduino के लिए संकेत उतनी तेजी से नहीं बदल पाएगा जितना कि उछलता है इसलिए इसे एक प्रेस के रूप में पढ़ा जाएगा। इसके बारे में चिंता न करें कि यह अगले वास्तविक प्रेस के लिए धीमा हो जाएगा क्योंकि यह होगा।

उन्नत:

Atmaga32U4 0.2Vcc - 0.1V = 0.9 वोल्ट पर एक डिजिटल कम पढ़ता है। इसके डिस्चार्ज में किसी भी समय कैपेसिटर का वोल्टेज Vcc * e^(-t/RC) होता है। यदि आप अपने स्विच पर एक अलग डेब्यू टाइम मापते हैं तो आप अपने रेसिस्टर और कैपेसिटर वैल्यू की गणना कर सकते हैं।

सूत्र प्रपत्र

एल ई डी

आरजीबी एलईडी एपीए102 एलईडी हैं जो एक घड़ी और डेटा लाइन का उपयोग करके व्यक्तिगत रूप से संबोधित करने योग्य हैं। उन्हें काम करने के लिए किसी बाहरी घटक की आवश्यकता नहीं होती है। कई एल ई डी के लिए आपको 5 वोल्ट और ग्राउंड के समानांतर कैपेसिटर का उपयोग करना चाहिए लेकिन केवल 4 एल ई डी के साथ आपको इसकी आवश्यकता नहीं है।

चरण 3: बोर्ड डिजाइन

बोर्ड डिजाइन
बोर्ड डिजाइन

पीसीबी को JLCPCB में डिजाइन किया गया था। मैं उनके द्वारा प्रायोजित नहीं हूं लेकिन सस्ते प्रोटोटाइप के लिए वे उत्कृष्ट पीसीबी बनाते हैं। 2 डॉलर के लिए आपको एक ही बोर्ड के 10 मिलते हैं, लेकिन शिपिंग मेरे लिए लगभग 11 डॉलर थी। यदि आप अनिवार्य रूप से आरजीबी प्रकाश नहीं चाहते हैं और सिर्फ एक बनाने की योजना बना रहे हैं, तो आपको पीसीबी के बिना अपना कीबोर्ड बनाने पर विचार करना चाहिए।

बोर्ड का डिजाइन काफी सीधे आगे था। मुझे स्विच के लिए केवल एक घटक जोड़ने की आवश्यकता थी, लेकिन कुछ वीडियो देखने के बाद मुझे यह समझ में आ गया। केवल एक चीज जो मुझे महसूस हुई, वह यह है कि छेदों का स्थान स्विच के बहुत करीब है।

पीसीबी को ऑर्डर करने के लिए https://jlcpcb.com/ पर जाएं और 2 लेयर्ड विकल्प चुनें। यह आपसे एक Gerber फ़ाइल मांगेगा। ".zip" फ़ाइल डाउनलोड करें और इसे विंडो पर खींचें। आपको इसे अनज़िप करने की आवश्यकता नहीं है। सेटिंग्स ठीक होनी चाहिए और आप आगे जाकर ऑर्डर पूरा कर सकते हैं।

चरण 4: केस डिजाइन और असेंबली टिप्स

केस डिजाइन और असेंबली टिप्स
केस डिजाइन और असेंबली टिप्स
केस डिजाइन और असेंबली टिप्स
केस डिजाइन और असेंबली टिप्स
केस डिजाइन और असेंबली टिप्स
केस डिजाइन और असेंबली टिप्स
केस डिजाइन और असेंबली टिप्स
केस डिजाइन और असेंबली टिप्स

डिज़ाइन

जैसा कि पहले उल्लेख किया गया है, मेरा डिज़ाइन त्रुटिपूर्ण है लेकिन आप चाहें तो इसे अभी भी प्रिंट कर सकते हैं। डिज़ाइन फ़्यूज़न 360 में बनाया गया था। यह एक मुफ़्त 3D मॉडलिंग सॉफ़्टवेयर है और आविष्कारक और सॉलिडवर्क्स के मेरे अनुभव के साथ इसके साथ काम करना बहुत आसान था। मामले के कोनों पर मंडल प्रिंटबेड से छीलने से रोकने के लिए हैं।

यदि आप अपना मामला खुद बनाते हैं तो वास्तव में केवल एक चीज महत्वपूर्ण है। आपके स्विच को मजबूती से रखा जाना चाहिए और हिलने-डुलने में असमर्थ होना चाहिए। मैंने आयामों के साथ चौकोर कटआउट की तस्वीरें प्रदान की हैं ताकि आप इसे अपने स्वयं के डिज़ाइन के लिए उपयोग कर सकें, मान लें कि आप कैलाश बॉक्स स्विच का उपयोग करते हैं।

सभा

अब आपके पास इकट्ठा करने के लिए आवश्यक सभी घटक हैं। इस पहले संस्करण को असेंबल करने का एक आदेश है क्योंकि स्विच को मिलाप किया जाता है।

1. एसएमडी घटकों को मिलाएं। ये प्रतिरोधक, कैपेसिटर और एलईडी हैं।

2. Arduino प्रो माइक्रो मिलाप।

3. सोल्डरिंग से पहले 3 स्विच को 3डी प्रिंटेड कवरप्लेट में रखें। स्विच को टांका लगाने के बाद कवरप्लेट को हटाया नहीं जा सकता। स्विच को हटाने की सलाह नहीं दी जाती है और वे उन्हें नष्ट कर सकते हैं।

4. अब स्विच को जगह में मिला दें। इसे जितनी जल्दी हो सके करें क्योंकि प्लास्टिक के स्विच उन्हें पिघला सकते हैं और बर्बाद कर सकते हैं या उनके क्लिकों की संख्या में भारी कमी कर सकते हैं।

5. इकट्ठे कवरप्लेट को 3डी प्रिंटेड केस में रखें और टेप से सुरक्षित करें या यदि वे कीकैप्स के साथ हस्तक्षेप नहीं करते हैं तो बोल्ट का उपयोग करें।

6. कीकैप्स को स्विच पर रखें और आपका काम हो गया।

सिफारिशों

अपना कोड अपलोड करने के बाद arduino पर LED को डिसाइडर या मास्क करें। यदि आपका कोड अपलोड नहीं होता है, लेकिन तैयार उत्पाद के रूप में देखने के लिए अच्छा नहीं है, तो एलईडी अच्छा है। कौशल और नुकीले चिमटी की आवश्यकता है।

इसके अलावा नीचे की तरफ कुछ ग्रिप पैर एंटी स्लिप के लिए अच्छे हैं और आरजीबी लाइट को चमकने दें।

चरण 5: कोड V1 (हार्डवेयर डेब्यू)

कोड V1 (हार्डवेयर डेब्यू)
कोड V1 (हार्डवेयर डेब्यू)
कोड V1 (हार्डवेयर डेब्यू)
कोड V1 (हार्डवेयर डेब्यू)

इस परियोजना के लिए कोड शुरुआती अनुकूल नहीं है इसलिए यदि आप अभी arduino में प्रोग्राम करना शुरू कर रहे हैं तो यह कोड संभवतः आपको थोड़ा डरा देगा। हालांकि मैं यह समझाने की कोशिश करूंगा कि जितना हो सके उतना अच्छा क्या हो रहा है। इस पाठ में कुछ बातें बाद में समझाई गई हैं, इसलिए यदि आपके कोई प्रश्न हैं तो कृपया पहले पूरी बात पढ़ें।

कोड अपलोड करना

सबसे पहले सभी 3 ".ino" फाइलों को डाउनलोड करें और उन्हें एक फोल्डर में रखें। यदि आपके पास Arduino IDE नहीं है, तो इसे आधिकारिक arduino साइट पर मुफ्त में डाउनलोड करें।

अपने Arduino को अपने पीसी से कनेक्ट करें और "OSU_Keyboard_code_V1.ino" खोलें। टूल्स बोर्ड में "Arduino/Genuino Micro" चुनें। टूल्स में भी सही COM पोर्ट चुनें। यह कभी-कभी बदल सकता है। अपने Arduino पर कोड अपलोड करने के लिए बस स्क्रीन के ऊपर बाईं ओर स्थित तीर पर क्लिक करें और तब तक प्रतीक्षा करें जब तक कि यह आपको नीचे बाईं ओर पूरा न कर दे।

OSU_कीबोर्ड_कोड_V1

शामिल करना और परिभाषित करना

सबसे पहले आपको कीबोर्ड लाइब्रेरी को शामिल करना होगा। यह Arduino को कीबोर्ड के रूप में उपयोग करना संभव बनाता है।

आगे मैं कुछ मूल्यों को परिभाषित करता हूं। परिभाषित एक चर की तरह है लेकिन प्रोग्राम के चलने के दौरान वे बदल नहीं सकते हैं। पहले 9 कीबोर्ड कैरेक्टर, आर्डिनो पिन नंबर और पोर्ट बिट्स के लिए हैं।

फिर एलईडी डेटा और घड़ी के पोर्ट बिट्स।

इसके अलावा एलईडी की संख्या परिभाषित की गई है और रंग पहिया के कोण के लिए एक चर है।

सेट अप

कोड का यह हिस्सा केवल एक बार निष्पादित किया जाएगा जब आर्डिनो प्लग इन किया जाएगा।

पहले एल ई डी की घड़ी और डेटा पिन को आउटपुट के रूप में और स्विच पिन को इनपुट के रूप में सेट किया जाता है। यह पिनमोड () का उन्नत संस्करण है। यदि आप रुचि रखते हैं तो "डायरेक्ट पोर्ट मैनिपुलेशन" की खोज करें।

Keyboard.begin() बस यूएसबी कनेक्शन को कीबोर्ड के रूप में शुरू करता है।

अगले 3 इंटरप्ट स्विच पिन से जुड़े हुए हैं। हर बार जब स्विच पिन पर कोई परिवर्तन पाया जाता है तो एक छोटा प्रोग्राम निष्पादित किया जाएगा। यह छोटा सा कार्यक्रम आगे बनाया जाएगा।

कुंडली

Arduino संचालित होने पर यह हिस्सा लगातार दोहराएगा।

मैं इसका उपयोग केवल एल ई डी के रंग को बदलने और अद्यतन करने के लिए करता हूं।

बीच में आता है

यहां छोटे-छोटे प्रोग्राम बनाए जाते हैं, जिन्हें स्विच पिन में बदलाव का पता चलने पर ही निष्पादित किया जाएगा। वे समान हैं सिवाय इसके कि वे किस पिन पर प्रतिक्रिया करते हैं।

पहले यह जांचता है कि बटन दबाया गया है या छोड़ा गया है और सही कीबोर्ड कमांड भेजता है।

एलईडी (एक अलग क्रम में समझाया गया)

यदि आप उत्सुक हैं कि एल ई डी को कैसे नियंत्रित किया जाता है, तो आपको APA102 डेटाशीट को देखना चाहिए।

एक टुकड़ा

यह फिर से डिजिटल राइट का डायरेक्ट पोर्ट मैनिपुलेशन वर्जन है।

पहले यह जांचता है कि क्या उसे 0 या 1 भेजना चाहिए और क्रमशः डेटा पिन को कम या अधिक खींचता है। फिर यह क्लॉक पिन को बहुत ही छोटा लिखता है और फिर से कम लिखता है।

वनबाइट

यह एक बिट को "फॉर" लूप के साथ 8 बार दोहराता है। यह बाइट में पहले बिट को पढ़ता है और इसके मान को वनबिट फ़ंक्शन में भेजता है और अगले 7 बिट्स के लिए भी ऐसा ही करता है।

लेडडेटा

यह एक एलईडी के लिए आवश्यक डेटा प्रदान करने के लिए एक बाइट को 4 बार दोहराता है। पहली बाइट 111xxxxx से शुरू होती है और XXXXX के स्थान पर 5 बिट चमक मान होती है। ब्राइटनेस को 0 से 31 (2^5 = 32 लेवल) पर सेट किया जा सकता है।

अगले 3 बाइट नीले, हरे और लाल मानों के लिए हैं। प्रत्येक रंग के लिए एक बाइट।

कलरव्हीलदिसएलईडी

यह फ़ंक्शन कॉल करता है एलईडीडाटा रंग पहिया में कोण के आधार पर इसे आरजीबी रंग देता है।

16 बिट मान 60 डिग्री के 6 समान दूरी वाले खंडों में लाभांश है। छवियों को देखने से आपको बेहतर ढंग से समझने में मदद मिल सकती है।

(एक 8 बिट संस्करण भी प्रदान किया गया है लेकिन टिप्पणी की गई है क्योंकि यह बहुत चंचल है)

स्टार्टएंडफ्रेम

हर बार जब आप एल ई डी में नए रंग भेजना चाहते हैं और एल ई डी के वास्तविक रंग को अपडेट करना चाहते हैं तो स्टार्ट फ्रेम का उपयोग करने की आवश्यकता है

मैं केवल स्टार्ट फ्रेम का उपयोग करता हूं क्योंकि एंडफ्रेम की जरूरत नहीं है। प्रारंभ फ़्रेम 0 के 4 बाइट्स है। अंतिम फ़्रेम 255 (11111111) के 4 बाइट्स है।

चरण 6: कोड V2 (टाइमर के साथ सॉफ्टवेयर डेब्यू)

कोड V2 (टाइमर के साथ सॉफ्टवेयर डेब्यू)
कोड V2 (टाइमर के साथ सॉफ्टवेयर डेब्यू)

खेलने के कुछ समय बाद मैंने हार्डवेयर डिब्यू के साथ कुछ डबल टैपिंग समस्याओं पर ध्यान दिया। यह कुछ अन्य मूल्य प्रतिरोधों या कैपेसिटर के साथ तय किया जा सकता है, लेकिन चूंकि बटन और ढक्कन हटाने योग्य नहीं हैं, मुझे लगा कि सॉफ्टवेयर डिबगिंग एक अच्छा समाधान होगा। सॉफ्टवेयर डिब्यूज को काम करना चाहिए, हार्डवेयर डिबेट को लागू किया गया है या नहीं। अपने वर्तमान सेटअप में मैंने ढक्कन को नहीं हटाया, इसलिए मैंने केवल प्रतिरोधों और कैपेसिटर को जगह में छोड़ दिया।

मैं कोड को पिछले संस्करण की तरह व्यापक रूप से नहीं समझाऊंगा क्योंकि इसे समझाना थोड़ा कठिन है।

मूल रूप से अधिकांश कोड समान काम करते हैं और एलईडी कोड को अछूता छोड़ दिया जाता है। क्या बदल गया है बाहरी व्यवधान अब arduino कार्यों का उपयोग नहीं करते हैं। अब यह शुद्ध सी कोड में काम करता है। और अब जो जोड़ा गया है वह है सॉफ्टवेयर इंटरप्ट। इसके लिए मैंने एवीआर टाइमर का उपयोग एक निश्चित समय तक प्रतीक्षा करने के लिए किया जब तक कि बाउंसिंग बंद न हो जाए। क्योंकि टाइमर्स इंटरप्ट के आधार पर होते हैं, इसलिए डिकॉउंस टाइम लूप में होने वाली किसी भी चीज़ से प्रभावित नहीं होता है।

केवल नकारात्मक पक्ष जो मैं लेकर आ सकता हूं वह यह है कि आर्डिनो विलंब कार्यों का अब उपयोग नहीं किया जा सकता है। क्योंकि देरी फ़ंक्शन टाइमर 0 का उपयोग करते हैं और यह प्रोग्राम बहस करने के लिए टाइमर 0 का उपयोग करता है।

छवि में आप देख सकते हैं कि कोड मोटे तौर पर कैसे काम करता है। मेम बिट इंगित करता है कि टाइमर चल रहा है या नहीं। जो नहीं दर्शाया गया है वह यह है कि बटन के अंत में इनपुट कम है। इस मामले में केवल एक कीप्रेस भेजा जाएगा जबकि बटन पहले ही जारी किया जा चुका है। जिसका अर्थ है कि जहां तक कंप्यूटर का संबंध है, कुंजी को दबाए रखा जाएगा। इस दुर्लभ अपवाद के लिए एक टाइमर की समय सीमा समाप्त होने पर एक चेक पहले से तैयार किया जाएगा। यदि टाइमर के अंत में बटन दबाया नहीं जाता है, तो एक keyrelease कमांड भेजा जाएगा।

चरण 7: कोड V3 (वर्टिकल काउंटर के साथ सॉफ्टवेयर डेब्यू) (अनुशंसित) (कोई एलईडी नहीं)

कोड V3 (वर्टिकल काउंटर के साथ सॉफ्टवेयर डेब्यू) (अनुशंसित) (कोई एलईडी नहीं)
कोड V3 (वर्टिकल काउंटर के साथ सॉफ्टवेयर डेब्यू) (अनुशंसित) (कोई एलईडी नहीं)

इस कोड में भी एक संस्करण है जहाँ आपको प्रतिरोधों को खींचने की आवश्यकता नहीं है। सुनिश्चित करें कि आप प्रत्येक बटन को इनपुट और ग्राउंड से कनेक्ट करते हैं! बिल्ड-इन पुल-अप का उपयोग किया जाता है।

मैंने कोड V2 में कुछ अपंजीकृत प्रेस का भी अनुभव किया। मुझे लगता है कि कोड अपने टाइमर- और बाहरी रुकावट के साथ बहुत जटिल हो गया है और मैं कुछ अपवादों को याद कर सकता हूं। इस कारण से मैंने सॉफ्टवेयर डिबॉन्स विधियों के लिए इंटरनेट पर खोज के साथ खरोंच से शुरुआत की।

(ईमानदारी से, इस परियोजना का कम से कम आधा हिस्सा इस बिंदु पर डिबगिंग बटन बन गया है)

कुछ खोज के बाद मैं इस पोस्ट पर आया:

www.compuphase.com/electronics/debouncing….

ईमानदार होने के लिए, मुझे पूरी तरह से यह समझने में काफी समय लगा कि यह वास्तव में कैसे काम करता है। इसमें कुछ जटिल बिट जोड़तोड़ शामिल हैं, लेकिन मैं इसे यथासंभव आसान बनाने की कोशिश करूंगा। हालांकि मेरे स्पष्टीकरण केवल पोस्ट के अतिरिक्त होंगे, इसलिए आपको कम से कम "वर्टिकल काउंटर", "एनोटेटेड कार्यान्वयन" और "विलंबता को कम करना" पढ़ना चाहिए।

मेरी व्याख्या

टाइमिंग डायग्राम (वेवड्रोम में बनाया गया) मैंने जोड़ा है जिससे बिट गणित को कम से कम थोड़ा और समझने में मुश्किल हो। ध्यान दें कि छवि में 2 काउंटर बिट्स हैं, लेकिन मेरे कोड में 3 हैं। इसका मतलब है कि लंबी बहस का समय।

एक बिट प्रति मान

लंबवत काउंटर कार्यान्वयन के साथ समानांतर में एक ही समय में एकाधिक बटनों को डिब्यू करना संभव है। सभी मान बाइट (uint8_t) प्रकार के होते हैं और इसमें 8 बिट होते हैं। हमें इस बात से कोई सरोकार नहीं है कि इनमें से किसी भी बाइट में क्या मूल्य है, बल्कि हम बिट्स में ही रुचि रखते हैं। डिबेट किए जाने वाले प्रत्येक बटन प्रत्येक बाइट के केवल एक बिट का उपयोग करते हैं। पहला बटन प्रत्येक बाइट के केवल पहले बिट का उपयोग करता है, दूसरा बटन दूसरे बिट आदि का उपयोग करता है।

सभी एक ही समय पर

बिट गणित का उपयोग करके इन पिन डिबॉन्स को समानांतर में निष्पादित करना संभव है। और, हालांकि बिट गणित बहुत जटिल है, यह प्रोसेसर के लिए बहुत ही कुशल है।

इस प्रकार 8 बिट डेटा प्रकार के साथ 8 बटनों के लिए ऐसा करना संभव है। बड़े डेटाटाइप का उपयोग करने से एक बार में अधिक बहस की अनुमति मिलती है।

बहस

डेब्यू रूटीन को हर 1 मिलीसेकंड में टाइमर इंटरप्ट के साथ निष्पादित किया जाता है।

जब बटन दबाया जाता है तो बटन स्टेट, जो कि डिबॉन्स की गई स्थिति है, तुरंत कम हो जाएगा, जो एक बटन प्रेस का संकेत देता है। किसी रिलीज का पता लगाने के लिए बटन को काफी देर तक ऊंचा रखना होगा, यह दर्शाता है कि यह एक निश्चित समय के लिए बाउंस नहीं हुआ है। टॉगल का उपयोग बटन परिवर्तन को इंगित करने के लिए किया जाता है। काउंटर बिट्स का उपयोग … के लिए किया जाता है। गिनती कितनी देर तक नहीं हुई है।

डेल्टा इनपुट और डिबॉन्स्ड अवस्था के बीच अंतर को इंगित करता है। अंतर होने पर ही काउंटर की गिनती होगी। बाउंस का पता चलने पर काउंटर रीसेट हो जाएगा (डेल्टा 0 है)।

चरण 8: परिणाम

Image
Image

यदि सब कुछ ठीक रहा तो अब आपके पास ओसु खेलने के लिए एक कार्यशील कीबोर्ड होना चाहिए! पर। मैंने व्यक्तिगत रूप से किसी भी विलंबता पर ध्यान नहीं दिया है। यदि आप करते हैं, कृपया मुझे बताए। इसके अलावा यदि कोई प्रश्न हैं तो बेझिझक कुछ भी पूछें।

V2 के बारे में पिछले उल्लेख एक वादे के रूप में नहीं हैं, इसलिए इस परियोजना को स्थगित न करें क्योंकि आप V2 की प्रतीक्षा करना चाहते हैं।

मुझे आशा है कि आप अपने कीबोर्ड का आनंद लेंगे!

ओसु! नाम: Thomazzz3

समस्या निवारण

यदि आपको लगता है कि आपको अपने कीबोर्ड में समस्या आ रही है, तो पहले एक टेक्स्ट एडिटर खोलें और प्रत्येक कुंजी को थोड़े समय के लिए एक बार दबाएं।

क्या एक या एक से अधिक कुंजियाँ काम नहीं करती हैं?

यह संभव है कि टांका लगाने के दौरान आपने आंतरिक रूप से एक स्विच को नष्ट कर दिया हो। यदि आपके पास एक मल्टीमीटर है, तो इसे निरंतरता/बीपिंग पर रखें, इसे स्विच के समानांतर रखें जबकि Arduino कनेक्ट नहीं है और कुंजी दबाएं। यह बीप होना चाहिए।

क्या आपके द्वारा अभी-अभी टाइप किए गए अक्षर Osu में आपके द्वारा कॉन्फ़िगर की गई कुंजियों से मेल खाते हैं! ?

पहले 3 #Defines (' ' is nesecary!) में arduino कोड में वर्णों को बदलें।

या अपना ओसु बदलो! कॉन्फ़िगर की गई कुंजियों का उपयोग करने के लिए सेटिंग्स।

क्या एक या एक से अधिक कुंजियों को कई बार दोहराया जाता है?

डिबॉन्स सर्किट आपके स्विच के लिए उचित रूप से काम नहीं करता है या सही ढंग से सोल्डर नहीं किया गया है। अपने सोल्डर कनेक्शन की जाँच करें। यदि यह अभी भी होता है तो 1uF के संधारित्र मान का प्रयास करें। पीसीबी यूजर्स के लिए यह काफी मुश्किल होगा।

अगर आपको अपने एल ई डी से परेशानी हो रही है

क्या एल ई डी झिलमिलाहट करते हैं?

एक सोल्डर कनेक्शन ढीला हो सकता है। यदि आप पीसीबी का उपयोग करते हैं तो पुष्टि करें कि टांका लगाने वाला टिन वास्तव में प्रिंट पर पैड पर प्रवाहित होता है।

क्या कोई भी एलईडी काम नहीं करती है या एक निश्चित संख्या में एलईडी काम करना बंद कर देती है?

पहली एलईडी (ट्रैक का पालन करें) के कनेक्शन के बीच शॉर्ट्स की जांच करें और Arduino के आउटपुट और फिर से पहली एलईडी पर अच्छी तरह से जुड़े टिन की जांच करें। यदि पुष्टि सही है और अभी भी दोष है तो आपको पहली एलईडी को बदलने की आवश्यकता हो सकती है।

यदि यह ठीक हो जाता है तो यदि आवश्यक हो तो इसे अगले एल ई डी के लिए दोहराएं।

सिफारिश की: