ዝርዝር ሁኔታ:

የመጫወቻ ማዕከል አዝራሮችን ይሰኩ እና ይጫወቱ 7 ደረጃዎች (ከስዕሎች ጋር)
የመጫወቻ ማዕከል አዝራሮችን ይሰኩ እና ይጫወቱ 7 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የመጫወቻ ማዕከል አዝራሮችን ይሰኩ እና ይጫወቱ 7 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የመጫወቻ ማዕከል አዝራሮችን ይሰኩ እና ይጫወቱ 7 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: Arcade games and electronics repair basics 2024, ህዳር
Anonim
የመጫወቻ ማዕከል አዝራሮችን ይሰኩ እና ያጫውቱ
የመጫወቻ ማዕከል አዝራሮችን ይሰኩ እና ያጫውቱ

እኔ በቅርቡ የእኔን ፕሮጀክቶች ለመሥራት አርዱዲኖን መጠቀም ጀመርኩ። እንደ ዲዛይነር ለጨዋታዎቼ/በይነተገናኝ ፕሮጄክቶችዎ ብጁ በይነገጾችን መስራት እወዳለሁ።

ተከታታይ ግንኙነትን መጠቀም በጣም የተወሳሰበ እና ለችግሮች እና ለሳንካዎች የተጋለጠ በመሆኑ ያጋጠመኝ አንድ ችግር ጨዋታዎቼን ለመቆጣጠር ውጫዊ አዝራሮችን እንድጠቀም የሚፈቅድልኝ ፈጣን እና ቀላል መፍትሔ ፈልጌ ነበር።

ከማንኛውም ኮምፒተር ጋር ወዲያውኑ ሊጠቀሙበት የሚችሉት መሰኪያ እና የመጫወቻ መሣሪያ እንደፈለግኩ አርዱዲኖ ሊዮናርዶን ገዛሁ። እሱ ከኡኖ ጋር ተመሳሳይ ነው ፣ ግን በጥቂት ልዩነቶች። ለዚህ ፕሮጀክት በኔ ጥቅም የምጠቀምበት ዋናው ልዩነት እንደ ደብቅ የመሥራት ችሎታ ነው። HID ፣ ወይም የሰው በይነገጽ መሣሪያ ለእያንዳንዱ መሣሪያ ብጁ ነጂዎችን መጫን ሳያስፈልግ ኮምፒተርዎ ከቁልፍ ሰሌዳዎች እና ከኮምፒዩተር መዳፊት ግብዓትን እንዲያውቅና እንዲቀበል የሚያስችል የዩኤስቢ ፕሮቶኮል ነው።

ማሳሰቢያ -እዚህ እንደሚታየው firmware ን ካዘመኑ Uno ን መጠቀም ይችላሉ።

ደረጃ 1: ቁሳቁሶች

ለዚህ ፕሮጀክት የሚከተሉትን ያስፈልግዎታል

1x HID ችሎታ ያለው ማይክሮ መቆጣጠሪያ (እንደ አርዱዲኖ ማይክሮ ፣ ዱን እና ሊዮናርዶ ያሉ ፣ አርዱዲኖ ሊዮናርዶን እጠቀማለሁ)

1x ዩኤስቢ ወደ አርዱዲኖ ገመድ (ለሊዮናርዶ የዩኤስቢ ማይክሮ ነው)

3x የመጫወቻ ማዕከል አዝራሮች (እነዚህን ገዛኋቸው)

1x የማይሸጥ የዳቦ ሰሌዳ

3x 10k ohm resistors

3x 220 ohm resistors

ዝላይ ሽቦዎች

ነገሮችን የበለጠ ዘላቂ ለማድረግ በእርግጥ ብዙ አዝራሮችን ማከል ወይም ሁሉንም ነገር ወደ የዳቦ ሰሌዳ መሸጥ ይችላሉ።

ደረጃ 2 ፕሮቶታይፕ ማድረግ

ፕሮቶታይፕ ማድረግ
ፕሮቶታይፕ ማድረግ
ፕሮቶታይፕ ማድረግ
ፕሮቶታይፕ ማድረግ
ፕሮቶታይፕ ማድረግ
ፕሮቶታይፕ ማድረግ

ስለዚህ ፣ ለመጠቀም የፈለግኩትን የመጫወቻ ማዕከል አዝራሮችን ከመግዛቴ በፊት ይህንን በመደበኛ የግፊት ቁልፎች ሞከርኩ። አዝራሮቹን በመደበኛ መንገድ ያሽጉ ፣ እኔ 10K ohm resistors ን እንደ ተጠቀምኩ አምናለሁ።

ፕሮግራሙ ፣ ለሊዮናርዶ ምስጋና ይግባው ፣ በጣም ቀላል ነው። የቁልፍ ሰሌዳ ቤተ -መጽሐፍት ማካተት አለብዎት። እኔ የአርዱዲኖን መደበኛ ምሳሌ “የቁልፍ ሰሌዳ መልእክት” ለኮዴዬ መሠረት አድርጌዋለሁ።

አሁን ጥያቄው አዝራሮችዎ እንዴት እንዲሠሩ እንደሚፈልጉ ነው። ከተገፋፉ በመሠረቱ ሁለት ምርጫዎች አሉዎት ፣ ነጠላ አዝራሮች መጫኛዎች እና ቀጣይ የፊደላት ዥረት። በእውነቱ እርስዎ በሚፈልጉት በፕሮጀክትዎ ላይ የተመሠረተ ነው።

እንደ መዝለል ወይም እንደ ማብሪያ/ማጥፊያ ቁልፍ አንድ ቁልፍ ከተጫነ አንድ ነገር እንዲከሰት ከፈለጉ ነጠላውን የግፊት ዘዴ ይመርጣሉ። በዚህ ዘዴ የአዝራሩን ሁኔታ ይመለከታሉ ፣ ወደ ላይ ወይም ወደ ታች ነው? ከዚያ ከቀዳሚው ሁኔታ ጋር ያወዳድሩታል ፣ ቀድሞ ወደ ላይ ወይም ወደ ታች ነበር? የቀድሞው የአዝራር ሁኔታ ከአሁኑ የአዝራር ሁኔታ ጋር ተመሳሳይ ከሆነ ምንም ነገር አይከሰትም። ነገር ግን የአዝራር ሁኔታው ከተለወጠ ፣ በእርስዎ ውስጥ አንድ አዝራርን ተጭነው ወይም መልቀቅ አንድ ነገር ይከሰታል። በእኔ ኮድ ውስጥ ቁልፉ ሲገፋ ብቻ ፊደል ይተይባል ፣ ሲለቀቅ ሳይሆን ይህንን መለወጥ ይችላሉ።

#"የቁልፍ ሰሌዳ. h" ን ያካትቱ

const int buttonLeft = A0; የግቤት ቁልፍ/ የግፊት ፒን

const int buttonRight = A1; const int buttonUp = A2;

int previousButtonStateLeft = ከፍተኛ; // የግፋ አዝራርን ሁኔታ ለመፈተሽ

int previousButtonStateRight = ከፍተኛ; int previousButtonStateUp = ከፍተኛ;

ባዶነት ማዋቀር () {

// የግፊት አዝራሩን ግቤት ያድርጉ - ፒንሞዴ (አዝራር ግራ ፣ ግቤት) ፤ pinMode (አዝራር ቀኝ ፣ ግቤት); pinMode (አዝራር አፕ ፣ ግቤት); // በቁልፍ ሰሌዳው ላይ ቁጥጥርን ያስጀምሩ: Keyboard.begin (); }

ባዶነት loop () {

// የግፊት ቁልፉን ያንብቡ: int buttonStateLeft = digitalRead (buttonLeft); // የአዝራር ሁኔታው ከተለወጠ ፣ ((buttonStateLeft! = previousButtonStateLeft) // እና አሁን ተጭኖ ከሆነ && (buttonStateLeft == HIGH)) {// መልእክት ይተይቡ Keyboard.print (“a”); } // በሚቀጥለው ጊዜ ለማወዳደር የአሁኑን የአዝራር ሁኔታ ያስቀምጡ - ቀዳሚው ButtonStateLeft = buttonStateLeft;

// የግፋ ቁልፉን ያንብቡ-

int buttonStateRight = digitalRead (buttonRight); // የአዝራር ሁኔታው ከተቀየረ ፣ ((buttonStateRight! } // በሚቀጥለው ጊዜ ለማወዳደር የአሁኑን የአዝራር ሁኔታ ያስቀምጡ - ቀዳሚው ButtonStateRight = buttonStateRight;

// የግፋ ቁልፉን ያንብቡ-

int buttonStateUp = digitalRead (buttonUp); // የአዝራር ሁኔታው ከተቀየረ ፣ ((buttonStateUp! } // በሚቀጥለው ጊዜ ለማወዳደር የአሁኑን የአዝራር ሁኔታ ያስቀምጡ - ቀዳሚው ButtonStateUp = buttonStateUp; }

እርስዎ በግራ ወይም በቀኝ እንቅስቃሴ እርስዎ እንደሚፈልጉት አዝራሩ እስከተገፋ ድረስ አንድ ነገር ያለማቋረጥ እንዲከሰት ከፈለጉ ፣ የቀደመውን የአዝራር ሁኔታ ሳያረጋግጥ ደብዳቤ እንዲጽፍ ይፍቀዱለት። እንዳያብድ ለመከላከል እና አዝራሮችዎ ሊኖራቸው የሚችለውን ማንኛውንም የመቋቋም ችሎታ ለመቋቋም ትንሽ መዘግየትን ማከልዎን ያስታውሱ። ይህንን ችግር ለመፍታት የበለጠ የሚያምር መንገዶች አሉ ፣ ግን ይህ ቀላል እና ፈጣን ነው።

#"የቁልፍ ሰሌዳ. h" ን ያካትቱ

const int buttonLeft = A0; የግቤት ቁልፍ/ የግፊት ፒን

const int buttonRight = A1; const int buttonUp = A2;

ባዶነት ማዋቀር () {

// የግፋ አዝራሩን ግቤት ያድርጉ - ፒንሞዴ (አዝራር ግራ ፣ ግቤት) ፤ pinMode (አዝራር ቀኝ ፣ ግቤት); pinMode (አዝራር አፕ ፣ ግቤት); // በቁልፍ ሰሌዳው ላይ ቁጥጥርን ያስጀምሩ: Keyboard.begin (); }

ባዶነት loop () {

// የግፊት ቁልፉን ያንብቡ: int buttonStateLeft = digitalRead (buttonLeft); ከሆነ (buttonStateLeft == HIGH) // አዝራሩ ከተጫነ {// መልእክት ይተይቡ Keyboard.print ("a"); መዘግየት (50); // ለመነሳት መዘግየት እና ኮምፒተር እንዲይዙዎት}

// የግፋ ቁልፉን ያንብቡ-

int buttonStateRight = digitalRead (buttonRight); ከሆነ (buttonStateRight == HIGH) // አዝራሩ ከተጫነ {// መልእክት ይተይቡ Keyboard.print ("w"); መዘግየት (50); // ለመነሳት መዘግየት እና ኮምፒተር እንዲይዙዎት}

// የግፋ ቁልፉን ያንብቡ-

int buttonStateUp = digitalRead (buttonUp); ከሆነ (buttonStateUp == HIGH) // አዝራሩ ከተጫነ {// መልእክት ይተይቡ Keyboard.print ("d"); መዘግየት (50); // ለመነሳት መዘግየት እና ኮምፒተር እንዲይዙዎት}}

ለፍላጎቶችዎ በጣም በሚስማማው ላይ በመመስረት ሁል ጊዜ የሁለቱም ዘዴዎች ድብልቅን መጠቀም ይችላሉ።

ደረጃ 3 መያዣውን በጨረር መቁረጥ

መያዣውን በጨረር መቁረጥ
መያዣውን በጨረር መቁረጥ

ለጉዳዩ 3 ሚሜ ኤምዲኤፍ ፣ በ 2 ሚሜ Plexiglas ማስገቢያ ተጠቅሜያለሁ። ቆንጆ እና አንጸባራቂ ለማድረግ በኋለኛው ደረጃ በጉዳዩ ውስጠኛው ክፍል ላይ አንዳንድ ኤልኢዲዎችን ማከል ስፈልግ ማስገቢያውን ጨመርኩ።

የ svg ፋይልን ለማምረት እና ልኬቶቼን አስገባሁ። በሥዕላዊ መግለጫው ውስጥ ከፍቼ ቀዳዳዎቹን በፈለግኩበት ላይ ጨመርኩ። ገላጭ ከሌለዎት ለዚህ እርምጃ Inkscape ን መጠቀም ይችላሉ።

በርሱ ውስጥ ጥቂት ቀዳዳዎች ያሉት ቀላል ሳጥን ስለሆነ በእርግጥ የሌዘር አጥራቢን መጠቀም አያስፈልግዎትም። የበለጠ ባህላዊ የኃይል መሳሪያዎችን (ወይም የእጅ መሳሪያዎችን እንኳን በመጠቀም) እሱን ለመፍጠር በቀላሉ ቀላል መሆን አለበት እኔ በጣም ሰነፍ ነኝ እና የሌዘር መቁረጫ መዳረሻ ነበረኝ።

ደረጃ 4: የመጫወቻ ማዕከል አዝራሮችን መሸጥ

የመጫወቻ ማዕከል አዝራሮች
የመጫወቻ ማዕከል አዝራሮች
የመጫወቻ ማዕከል አዝራሮች
የመጫወቻ ማዕከል አዝራሮች
የመጫወቻ ማዕከል አዝራሮች
የመጫወቻ ማዕከል አዝራሮች

የመጫወቻ ማዕከል አዝራር (ወይም የእኔ ቢያንስ) በሦስት ክፍሎች የተዋቀረ ነው። የፕላስቲክ መያዣው ፣ የኤልዲው መያዣ (በውስጡ ከ LED ጋር) እና የማይክሮ መቀየሪያ። የማይክሮ መቀየሪያው የአዝራሩ ትክክለኛው የአዝራር አካል ነው እና ከእርስዎ አርዱinoኖ ጋር ለመገናኘት የሚያስፈልግዎት ነው። በማይክሮ መቀየሪያ ላይ ሶስት ተርሚናሎች (የሚጣበቁ የብረት ሽቦዎች ፣ ሽቦዎችዎን የሚሸጡበት) አሉ። ከላይ (ወይም ከታች ፣ የሚፈልጉት) መሬት ነው። ሌሎቹ ሁለቱ ተርሚናሎች መደበኛ ክፍት (አይ) እና መደበኛ ዝግ (ኤንሲ) ናቸው። የለም ማለት ማብሪያ / ማጥፊያው ከተጫነ ግንኙነት ይፈጥራል ማለት ነው። ኤሲ ማለት አዝራሩ ከተጫነ ግንኙነቱን ይሰብራል ማለት ነው። ለዚህ ፕሮጀክት NO ን እንጠቀማለን። በስዕሎቹ ውስጥ በማይክሮ መቀየሪያዬ ላይ መሬቱን ፣ አይ እና ኤንሲን ምልክት አደረግሁ።

የእኔ አዝራሮች በርተዋል ፣ ስለዚህ ሽቦዎችን ወደ ኤልኢዲ መያዣው ሸጥኩ። የትኛው ወገን አኖድ እንደሆነ እና የትኛው ካቶዴድ (የ LED አወንታዊ እና አሉታዊ ጎኖች) እንዳሉ ለማወቅ ሽቦዎችዎን ቀለም መቀባትዎን ያረጋግጡ።

በሽያጭ በሌለው የዳቦ ሰሌዳ ለመጠቀም ቀላል ለማድረግ የራስጌ ፒኖችን በሽቦዎቼ ላይ ሸጥኩ። እኔ ሽቦውን ወደ ራስጌ ፒን ሸጥኩ እና የበለጠ ጠንካራ እንዲሆኑ ለማድረግ ትንሽ የሙቀት መቀነሻ ቱቦን በዙሪያዬ አደረግሁ።

ደረጃ 5 ቁልፎቹን ተቆልለው ከቦርድዎ ጋር ያገናኙዋቸው

አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው
አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው
አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው
አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው
አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው
አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው
አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው
አዝራሮቹን ይቆልሉ እና ከቦርድዎ ጋር ያገናኙዋቸው

በእርስዎ ጉዳይ ላይ የመጫወቻ ማዕከል አዝራሮችን ለመደርደር ጊዜው አሁን ነው። የመቆለፊያውን ቀለበት ከፕላስቲክ መያዣው ውስጥ ያስወግዱ እና በጉዳዩ ውስጥ ባለው ቀዳዳ በኩል ይለጥፉት። አዝራሩን በቦታው ለማስጠበቅ በሌላኛው በኩል የተቆለፈውን ቀለበት ይከርክሙት። በ LED መያዣው ውስጥ ተጣብቀው ወደ ቦታው ለመቆለፍ ያዙሩት። በማይክሮ መቀያየሪያዎቹ ውስጥ ይንቀጠቀጡ (ቦታውን ለመያዝ እርስ በእርስ የሚጣጣሙ ትናንሽ nobs እና ቀዳዳዎች አሉ)።

መቀያየሪያዎቹን ከቦርዱ ጋር ለማገናኘት እርስዎ ያከሏቸውን ወይም ያላከሉዋቸውን የግፊት ቁልፎችን ያስወግዱ። ከማይክሮ መቀየሪያው መሬት ወደ አርዱዲኖ እና ወደ ተከላካዩ (የግፋ አዝራሩ እግር ባለበት) የሚመራውን ሽቦ ያገናኙ። ከማይክሮ መቀየሪያው NO ወደ አርዱዲኖ 5v የሚወስደውን ሽቦ ያገናኙ።

ለኤችዲኤዲ ሽቦዎች አሉታዊውን ሽቦ ከመሬት እና ከአዎንታዊው በ 220 OHM resistor ወደ 5v ያገናኙ። እንደዚህ ከለዋቸው ሁል ጊዜ በርተው ይኖራሉ። ከፈለጉ በኮዱ ውስጥ ማከል እና ከፈለጉ ከአዝራሮቹ ጋር በማመሳሰል እንዲያበሩ እና እንዲያጠ getቸው ማድረግ ይችላሉ።

ደረጃ 6: ሲኦልን ኮድ ማድረግ

ስለዚህ ፣ አሁን ያማሩትን አዲስ አዝራሮችዎን ከአሮጌ ኮድ ጋር አያይዘውታል እና በድንገት እንደአሁን አይሰራም። ፊደሎቹ በአንድ ጊዜ ሁለት ወይም ሶስት ይታያሉ እና በቀላል የኤችቲኤምኤል 5 ጨዋታዎች እንደፈለገው አይሰራም። ወደ ገሃነም ለማውረድ እንኳን በደህና መጡ።

በመጀመሪያ ነገሮች መጀመሪያ። በፕሮቶታይፕ ወቅት የጻፍነው ኮድ? እሱ በጥሩ ሁኔታ ይሠራል እና ቀላል ነው ፣ ግን የሚያምር አይደለም። ተጨማሪ አዝራሮችን ማከል ከፈለጉ የኮድ ቁርጥራጮችን መቅዳት እና መለጠፍ እና በውስጣቸው ያሉትን ሁሉንም እሴቶች መለወጥ አለብዎት። ከመካከላቸው አንዱን ከረሱ ወደ አሳሹ ገሃነም ይገባሉ። አንድ ጭብጥ እዚህ ያግኙ? ኮድ መስጠት ገሃነም ነው ፣ ግን በጣም አስደሳች ፣ ችግርን የሚፈታ ሲኦልን ነው።

ቆንጆ ፣ አጭር ኮድ እንፈልጋለን። ስለዚህ ሁሉንም የግለሰብ ቁልፍ ኢንቲጀሮች ወደ ድርድሮች እንለውጣለን። በዚህ መንገድ ፣ ብዙ አዝራሮችን ማከል ከፈለጉ የአዝራሩን መጠን ፣ የሚገኙበትን ካስማዎች እና ውጤታቸውን ብቻ መለወጥ አለብዎት። እንዲሁም ቁልፍ ግቤቶችን ወደ ASCII እንለውጣለን ምክንያቱም… በተሻለ ሁኔታ ይሠራል?

አሁን እንደ እኔ ከሆንክ ቁልፎቹን ለመጠቀም ቀላል እና ቀላል መንገድ ትጽፋለህ እና እንደፈለከው አይሰራም። ስለዚህ አዲስ ስሪቶችን ይፈጥራሉ (ልጆችን ያስታውሱ ፣ የሚጨመሩ መጠባበቂያዎች!) ፣ የተለያዩ ነገሮችን ይሞክሩ ፣ አሁንም በደንብ የማይሰራውን ይበልጥ የተወሳሰበ ኮድ ይፃፉ እና በመጨረሻም ከሰዓታት በፊት ወደፃፉት ቀላል ኮድ ይመለሱ እና ትንሽ ስህተትን ያስተውሉ ሁሉንም ነገር ወዲያውኑ ያስተካክላል።

እኔ ያንን ጉዞ ልተውልዎ ፣ የሥራው ኮድ እዚህ አለ -

የኃላፊነት ማስተባበያ - ይህ ጽሑፍ የተፃፈው ከሰዓት ኮድ እና ሳንካ በጣም ቀላል ኮድ ካስተካከለ በኋላ ነው። እባክዎን ማንኛውንም የተስፋ መቁረጥ ምልክቶች ችላ ይበሉ እና ከዚህ በታች በተለጠፈው የሥራ ኮድ ላይ ያተኩሩ ፤)

#የቁልፍ ሰሌዳ. ኤች##የመለየት አዝራር ቁጥር 3 ን ያካትቱ

int buttonPin = {

A0 ፣ A1 ፣ A2}; // አዝራሮቹ የት አሉ? int asciiLetter = {97, 100, 119}; // በ ASCII ውስጥ ያሉ ደብዳቤዎች ፣ እዚህ - a ፣ d ፣ w int buttonState [buttonAmount]; // አዝራሩ ተገፍቷል ወይስ አልተገፋም?

ባዶነት ማዋቀር () {

ለ (int i = 0; i <buttonAmount; i ++) {// ዑደት በድርድር pinMode (buttonPin ፣ INPUT)); // ሁሉንም ካስማዎች ወደ ግብዓት ያቀናብሩ}}

ባዶነት loop () {

ለ (int i = 0; i <buttonAmount; i ++) // በድርድር በኩል ዑደት {buttonState = digitalRead (buttonPin ); // አዝራሮቹ ምን እየሰሩ ነው? ከሆነ (buttonState == HIGH) {// አዝራሩ ከተጫነ Keyboard.press (asciiLetter ); // ተጓዳኝ ደብዳቤውን ይላኩ} ሌላ // አዝራሩ ካልተጫነ {Keyboard.release (asciiLetter ); // ደብዳቤውን ይልቀቁ}}

}

ደረጃ 7: ሁሉም ነገር ይሠራል

በእርስዎ ተሰኪ ይደሰቱ እና ብጁ መቆጣጠሪያን ይጫወቱ!

ይህንን አስተማሪ ከወደዱት እባክዎን በውድድሩ ውስጥ ለእኔ ድምጽ መስጠቱን ያስቡበት!

የሚመከር: