ãªãããããã¹ãŠå¿
èŠãªã®ã§ããïŒ
åçŽãªäžé£ã®ã¢ã¯ã·ã§ã³ããé¢ããå¿
èŠæ§ã«äŒãã§ãããããããããããè¡ãæ¹æ³ããªã©ã®è³ªåããããšããããã§ã¯ãéçšè
ã®åœã«å¿ããŠãgoogleæéç¶æ
ãã·ã³ããš30ïŒ
ããæéç¶æ
ãã·ã³ã䜿çšããããšèšãå¯èœæ§ãé«ãããã 次ã®è³ªåã¯ãã©ããã£ãŠïŒãã§ãã googleã«éä¿¡ã LEDãç¹æ»
ãããŠé¡ããæ±ãæãåã£ãã°ããã®ã±ãã«ããããåŠæ ¡ã§ãã€ãèªãæãããã®ã°ãŒã°ã«ã§ãã«ããŒã¶ãŒãšããŠåããŠããäžçãè²»ããã Wikipediaã®ãããªå
¬åŒãšæéç¶æ
æ©æ¢°ã«é¢ããèšäºããããå眮è©ã®ã¿ãæ確ã§ãã
ç§ã¯ãã£ãŒãããã§ããããŸããã30幎åã«ãã«ããŒã¶ãŒã®åã«ããã°ã©ããŒãšããŠåãããã€ã¯ãã³ã³ãããŒã©ãŒã®ããã°ã©ãã³ã°ãç¿åŸããªããå€ãã®çæãèžãã ã®ã§ãåå¿è
åãã«ã·ã³ãã«ãªèšèªã§ãã®èšäºãæžãããšã«ããŸããã
ãããã£ãŠãã¿ã¹ã¯ã¯ãããšãã°ãã¯ãªãã¯ãé·æŒããªã©ã®ãã¿ã³ã¯ãªãã¯ãç解ããããã«Arduinã«æããããšã§ãã åå¿è
ã¯ã«ãŒãïŒïŒé¢æ°ã§ãããå®è¡ãããããèªãã«æãããšãã§ããŸãããè€æ°ã®ãã¿ã³ãããå Žåã¯ã©ãã§ããããïŒ ããããå¥ã®ã³ãŒãã®å®è¡ã«å¹²æžããå¿
èŠããªãå Žåã¯ã©ãã§ããããïŒ åŸã§ãã¿ã³ã®ãããã¯ã«æ»ããªãããã«ãArduinoçšã®SmartButtonã©ã€ãã©ãªãäœæããŸããã ããã§ããããã©ã®ããã«æ©èœããããæžããŸãã
ç§ãã¡ãçããããšã劚ãããã®ãšãã®å¯ŸåŠæ¹æ³ã¯ïŒ
delayïŒïŒé¢æ°ã¯ç§ãã¡ã®ç掻ã劚ããŸããMCAã®å©ããåããŠãããå
æããç¬èªã®SmartDelayã¯ã©ã¹ãäœæããŸããã ç§ã¯ãã§ã«SmartDelayããçæãããæ°ããã¯ã©ã¹ïŒSmartDelayMsïŒãäœæããŸããããã¹ãŠãåãã§ãããããªç§åäœã§ãã ãã®èšäºã§ã¯ããã®ã©ã€ãã©ãªã䜿çšãããèªæ
¢ããŸãã
delayïŒïŒé¢æ°ã䜿çšããã®ãããã«æªããããããŠãããªãã§çããæ¹æ³ã«ã€ããŠã®è©±ã§èªè
ãç
©ãããªãããã«ãArduino IDEã§ã®éããããã³ã°é
延ã®å€ãèšäºReplacing delayïŒïŒãæåã«èªãããšããå§ãããŸãã ã³ãŒããäœæããéã«ãããã§å°ãäžã®èŠç¹ãç¹°ãè¿ããŸãã
çè«ã®ããã
ãããã«ããŠããããªãã«ã¯ãªããžã§ã¯ãããããŸã ã ãããããã¿ã³ããã£ã¹ãã¬ã€ãLEDã¹ããªããããããããã¿ã³ã¯ã®æ°ŽäœèšãšåŒã¶ããšãã§ããŸãã ã³ãŒãã1ã€ã®ã¹ã¬ããã§é çªã«å®è¡ãããã®ã§ã¯ãªããäžéšã®ã€ãã³ãã§å®è¡ãããå Žåããªããžã§ã¯ãã®ç¶æ
ãä¿åããŸãã 奜ããªååãä»ããããšãã§ããŸãããããã¯äºå®ã§ãã ãã¿ã³ã®å Žåãããšãã°ããæŒããããç¶æ
ãšã解æŸããããç¶æ
ããããŸãã ããšãã°ãããããã®å ŽåïŒç«ã¡ããŸã£ããã«é²ã¿ãå転ããŸãã ãããã®æ¡ä»¶ã®æ°ã¯æéã§ãã ãŸããç§ãã¡ã®å Žåãã¯ãã ãã¯ãªãã¯ãããã¯ãªãã¯ãããä¿çãã®ç¶æ
ãè¿œå ããŸãã åºå¥ããå¿
èŠããã5ã€ã®ç¶æ
ãæ¢ã«ãããŸãã ããã«ãæåŸã®3ã€ã ãã«èå³ããããŸãã ãã¿ã³ã¯ããã5ã€ã®ç¶æ
ã«ãããŸãã ã²ã©ãå€éšã®äžçã§ã¯ãäžè¬çã«ãã¿ã³ã«äŸåããªãã€ãã³ããçºçããŸããæã§æãé¢ããããæŸããããç°ãªãæéä¿æããããããªã©ã§ãã ããããã€ãã³ããšåŒã³ãŸãããã
ãããã£ãŠãæéæ°ã®ç¶æ
ãšã€ãã³ããäœçšãããã¿ã³ãªããžã§ã¯ãããããŸãã ããã¯æéç¶æ
ãã·ã³ ïŒ KA ïŒã§ãã KAçè«ã§ã¯ãå¯èœãªã€ãã³ãã®ãªã¹ãã¯èŸæžãšåŒã°ããã€ãã³ãã¯åèªãšåŒã°ããŸãã ç³ãèš³ãããŸãããã30幎åã«ãããçµéšããŸããããçšèªãããèŠããŠããŸããã çšèªã¯å¿
èŠãããŸããããïŒ
ãã®èšäºã§ã¯ãã€ãã³ãã«å¿ããŠå®å®è¹ãç¶æ
ããç¶æ
ã«å€æãããã°ãããã³ãŒããäœæããŸãã å®éã«ã¯ãæéãªãŒãããã³ ïŒ MCA ïŒã®ãã·ã³ã§ã ã
ããã€ã¹å
šäœã1ã€ã®å·šå€§ãªå®å®è¹ã«è©°ã蟌ãå¿
èŠã¯ãããŸãããããã€ã¹ãåå¥ã®ãªããžã§ã¯ãã«åå²ããããšãã§ããŸããåãªããžã§ã¯ãã¯ãç¬èªã®MCAã«ãã£ãŠåŠçãããåå¥ã®ã³ãŒããã¡ã€ã«ã«é
眮ãããŸãã å€ãã®ãªããžã§ã¯ããæ¢è£œã®arduinoã©ã€ãã©ãªãšããŠGitHubã«é
眮ãããããã®å®è£
ã詳ãã調ã¹ãããšãªãåŸã§äœ¿çšã§ããŸãã
ã³ãŒãã移æ€æ§ãšåå©çšãå¿
èŠãšããªãå Žåã¯ããã¹ãŠã1ã€ã®å€§ããªãã¡ã€ã«ã«ã¹ã«ã«ããããããšãã§ããŸããããã¯ãŸãã«åå¿è
ãè¡ãããšã§ãã
ç·Žç¿ãã
MCAã®èšèšã®åºç€ã¯è¡šã§ãã
- ãã¹ãŠã®å¯èœãªã€ãã³ããæ°Žå¹³ã«æžã蟌ã¿ãŸãã
- åçŽæ¹åã«ãã¹ãŠã®ç¶æ
ã
- ã¢ã¯ã·ã§ã³ã»ã«å
ã æ°ããç¶æ
ãžã®ç§»è¡ãã¢ã¯ã·ã§ã³ã§ãã
ãã¿ã³ã®å Žåã次ã®ããã«ãªããŸãã
ã¹ããŒã¿ã¹\ã€ãã³ã | æŒããã | ãªãªãŒã¹æžã¿ | æŒããã20ms | 250msãæŒãããŸãã | 1ç§æŒã | æŒããã3ç§ |
---|
æŒãããŠããªã | | | | | | |
ã¯ãªãã¯ãã | | | | | | |
æŒããã | | | | | | |
éå¬ | | | | | | |
é·ããã | | | | | | |
ãªããããªã«é£ããã®ïŒ èãããããã¹ãŠã®ç¶æ
ãèšè¿°ããèãããããã¹ãŠã®ã€ãã³ããèæ
®ããå¿
èŠããããŸãã
ã€ãã³ãïŒ
- æŒããã-ããã¯ãé£çµ¡å
ãéããŠããããšãããã£ããšãã§ãã
- ãªãªãŒã¹æžã¿-ããã¯ãé£çµ¡å
ãéããŠããããšãå€æãããšãã§ãã
- 20msãæŒã-é£çµ¡å
ã®ãã£ã¿ãªã³ã°ãèæ
®ã«å
¥ãããã°ããã®éã¯éå§ãç¡èŠããå¿
èŠããããŸãããã®åŸãã¯ãªãã¯ãšèŠãªãããŸãã
- 250msãæŒãããŠãã-ã¯ãªãã¯ã«ã¯250msã§ååã§ããã¯ãªãã¯ã«ãããæéã¯ããã ãã§ãã
- 1ãæŒãã-1ãè¶
ããçªå·ã¯æ¢ã«ä¿çäžã§ãã
- 3ç§ãæŒã-3ç§ä»¥äžä¿æãããšãšã©ãŒãšèŠãªãããŸãã
éœåã®è¯ããšãã«èªåã®æéãèšå®ã§ããŸãã åŸã§å¥ã®å Žæã®çªå·ãå€æŽããªãããã«ãããã«ããããæåã«çœ®ãæããããšããå§ãããŸã:)
#define SmartButton_debounce 20 #define SmartButton_hold 250 #define SmartButton_long 1000 #define SmartButton_idle 3000
ã¹ããŒã¿ã¹ïŒ
- æŒãããŠããªã-誰ããã¿ã³ã«è§ŠããŠããªãããšãå ±åããŸãã
- ãããã¹ã-é£çµ¡å
ã®ãããã¹ããçµããã®ãåŸ
ã£ãŠããŸãã
- ã¯ãªãã¯-ã¯ãªãã¯ããããŸããã
- Pressed-ãã¿ã³ãæŒãããŠããŸãã
- ããŒã«ã-ãã¿ã³ãæŒãããŸãŸã«ããŸãã
- ä¿æãé·ããã-äœããããããã£ãã®ã§ããã®å Žåã¯ã¯ãªãã¯ãæŸæ£ããããšãææ¡ããŸãã
ãããã£ãŠããã·ã¢èªãC ++ã«ç¿»èš³ããŸã
// byte btPin; // enum event {Press, Release, WaitDebounce, WaitHold, WaitLongHold, WaitIdle}; // enum state {Idle, PreClick, Click, Hold, LongHold, ForcedIdle}; // enum state btState = Idle; // unsigned long pressTimeStamp;
ã€ãã³ããšç¶æ
ã®äž¡æ¹ããbyteåãŸãã¯intåã®å€æ°å
šäœãšããŠã§ã¯ãªããenumãšããŠç€ºããããšããäºå®ã«æ³šæãåèµ·ããããšæããŸãã ãã®ãããªèšé²ã¯ãã¡ã¢ãªãã€ã¯ãã³ã³ãããŒã©ãŒã§éåžžã«é«äŸ¡ãªããããä¿åããªããããå°é家ã«ã¯ããŸãæãããŠããŸããããäžæ¹ã§ãéåžžã«æ確ã§ãã åæåã䜿çšããå Žåãåå®æ°ããšã³ã³ãŒããããæ°å€ãæ°ã«ããŸãããæ°å€ã§ã¯ãªãåèªã䜿çšããŸãã
enumã埩å·åããæ¹æ³ã¯ïŒenum Name {å®æ°ãå®æ°ãå®æ°};
ããã§ãäžæ¬åŒ§ã§å²ãŸãããã®ããã®åºå®å€ã®ã»ãããæã€ãããŒã¿å enum NameãäœæããŸãã å®éãããã¯ãã¡ããæ°å€æŽæ°åã§ãããå®æ°ã®å€ã«ã¯èªåçã«çªå·ãä»ããããŸãã
å€ãæåã§æå®ããããšãã§ããŸãã
enum Name {ConstantA = 0ãConstantB = 25};
ãã®æ°ããåã®å€æ°ã宣èšããã«ã¯ã次ã®ããã«èšè¿°ã§ããŸãã
enum Name Variable;
ãã¿ã³ã䜿çšããäŸïŒ
- åæåã€ãã³ãmyEvent;
- åæç¶æ
currentState;
ãã§ã«ããŒãã«ãåããŸãããã ã¢ã€ã³ã³ã§->æ°ããç¶æ
ãžã®ç§»è¡ã瀺ããŸãã
ã¹ããŒã¿ã¹\ã€ãã³ã | æŒããã | ãªãªãŒã¹æžã¿ | æŒããã20ms | 250msãæŒãããŸãã | 1ç§æŒã | æŒããã3ç§ |
---|
æŒãããŠããªã | ->ããŠã³ã¹ | ->æŒãããŠããªã | | | | |
ã¬ã©ã¬ã© | | ->æŒãããŠããªã | ->ã¯ãªã㯠| | | |
ã¯ãªãã¯ãã | | ->æŒãããŠããªã | | ->æŒããã | | |
æŒããã | | ->æŒãããŠããªã | | | ->ä¿æ | |
éå¬ | | ->æŒãããŠããªã | | | | ->é·ããã |
é·ããã | | ->æŒãããŠããªã | | | | |
ããŒãã«ãå®è£
ããããã«ãé¢æ°ãvoid doEventïŒenum event eïŒã«ããŸãã ãã®é¢æ°ã¯ã€ãã³ããåãåããè¡šã«èª¬æãããŠãããšããã«ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
ã€ãã³ãã¯ã©ãããæ¥ãŸããïŒ
å°ãã®éå±
å¿å°ã®è¯ããã¿ã³ãé¢ããloopïŒïŒé¢æ°ã®ã²ã©ãå€ã®äžçã«é£ã³èŸŒãæã§ãã
void loop() { // unsigned long mls = millis(); // // if (digitalRead(btPin)) doEvent(Press) else doEvent(Release) // if (mls - pressTimeStamp > SmartButton_debounce) doEvent(WaitDebounce); // if (mls - pressTimeStamp > SmartButton_hold) doEvent(WaitHold); // if (mls - pressTimeStamp > SmartButton_long) doEvent(WaitLongHold); // if (mls - pressTimeStamp > SmartButton_idle) doEvent(WaitIdle); }
ãã®ãããã€ãã³ããžã§ãã¬ãŒã¿ãæå
ã«çšæããŠãICAã®å®è£
ãéå§ã§ããŸãã
å®éãã³ã³ãããŒã©ãŒã®è¶³å
ã®ä¿¡å·ã¬ãã«ãæéå
ã«äžããã ãã§ãªããã€ãã³ããçæã§ããŸãã ã€ãã³ãã¯ããããªããžã§ã¯ãããå¥ã®ãªããžã§ã¯ãã«éä¿¡ã§ããŸãã ããšãã°ã1ã€ã®ãã¿ã³ãæŒããŠå¥ã®ãã¿ã³ãèªåçã«é¢ãããå Žåã ãããè¡ãã«ã¯ãReleaseãã©ã¡ãŒã¿ãŒãæå®ããŠdoEventïŒïŒãåŒã³åºããŸãã MCAã¯ãã¿ã³ã ãã§ã¯ãããŸããã 枩床ã®ãããå€ãè¶
ãããšãMCAã®ã€ãã³ããšãªããããšãã°ã枩宀å
ã§ãã¡ã³ããªã³ã«ãªããŸãã ãã¡ã³æ
éã»ã³ãµãŒã¯ã枩宀ã®ç¶æ
ããç·æ¥ããªã©ã«å€æŽããŸãã
ã³ãŒãã§ããŒãã«ãå®è£
ãã3ã€ã®ã¢ãããŒã
ãã©ã³AïŒif {} elsif {} else {}
ããã¯åå¿è
ã«ãšã£ãŠæåã«èµ·ããããšã§ãã å®éãããã¯ãããŒãã«ã«å
¥åãããã»ã«ãã»ãšãã©ãªããã¢ã¯ã·ã§ã³ãç¶æ
ã®å€åã«ã®ã¿çž®å°ãããå Žåã«é©ãããªãã·ã§ã³ã§ãã
void doAction(enum event e) { if (e == Press && btState == Idle) { // btState=PreClick; // pressTimeStamp=millis(); // } if (e == Release) { // btState=Idle; // } if (e == WaitDebounce && btState == PreClick) { // btState=Click; // , } // }
é·æïŒ
- arduinoãåããŠæã«ããåå¿è
ã«æžããŠãã ããã
- é ã«æµ®ãã¶æåã®ãã®ã
çæïŒ
- ã³ãŒããèªãã®ãé£ããã
- ããŒãã«ã§äœããå€æŽãããå Žåãã³ãŒããå€æŽããããšã¯å°é£ã§ãã
- ããŒãã«å
ã®ã»ãšãã©ã®ã»ã«ããã£ã±ãã®å Žåã¯å°çã
ãã©ã³BïŒé¢æ°ãã€ã³ã¿ãŒããŒãã«
ãã1ã€ã®æ¥µç«¯ãªäŸã¯ãé·ç§»ãŸãã¯é¢æ°ã®è¡šã§ãã ãã®ã¢ãããŒãã«ã€ããŠã¯ãèšäºã Arduinoã®ãã¿ã³ãã¬ã¹ãåŠçãããã§èª¬æããŸããã ã¯ãã¹OOPãšICAã ã ç°¡åã«èšããšã ç°ãªãããŒãã«ã»ã«ããšã«åå¥ã®é¢æ°ãäœæããããããžã®ãã€ã³ã¿ã®ããŒãã«ãäœæããŸãã
// , typedef void (*MKA)(enum event e); // MKA action[6][6]={ {&toDebounce,$toIdle,NULL,NULL,NULL,NULL}, {NULL,&toIdle,&toClick,NULL,NULL,NULL}, {NULL,&toIdle,NULL,&toHold,NULL,NULL}, {NULL,&toIdle,NULL,NULL,&toLongHold,NULL}, {NULL,&toIdle,NULL,NULL,NULL,&toVeryLongHold}, {NULL,&toIdle,NULL,NULL,NULL,NULL} }; // doEvent void doEvent(enum event e) { if (action[btState][e] == NULL) return; (*(action[btState][e]))(e); } // // " " void toIdle(enum event e) { btState=Idle; } // void toDebounce(enum event e) { btState=PreClick; pressTimeStamp=millis(); } //
ããã§å¥åŠãªèšèãã¢ã€ã³ã³ã䜿çšãããŠããŸããïŒtypedefã䜿çšãããšãããŒã¿åãå®çŸ©ã§ããŸããå€ãã®å ŽåãããŒã¿åã䜿çšãããšäŸ¿å©ã§ãã ããšãã°ãenumã€ãã³ãã¯æ¬¡ã®ããã«å®çŸ©ã§ããŸãã
typedef enum event BottonEvent;
ãã®åŸãããã°ã©ã ã«æžã蟌ãããšãã§ããŸãã
BottonEvent myEvent;
enumã€ãã³ãåã®åäžã®åŒæ°ãåããäœãè¿ããªãé¢æ°ãžã®ãã€ã³ã¿ãŒãå®çŸ©ããŸããã
typedef void (*MKA)(enum event e);
ããã§ãæ°ããMKAããŒã¿åãäœæããŸããã
ïŒã¢ã€ã³ã³ã¯ããã¢ãã¬ã¹ããŸãã¯ããã€ã³ã¿ãŒããšããŠãã·ã¢èªã«ç¿»èš³ãããŸãã ãããã£ãŠãMKAã¯é¢æ°å€ã§ã¯ãªãããããžã®ãã€ã³ã¿ãŒã§ãã
MKA action[6][6]; // action
ããã«ãã¢ã¯ã·ã§ã³ãå®è¡ããé¢æ°ãžã®ãã€ã³ã¿ãŒã§åããŸããã ã¢ã¯ã·ã§ã³ããªãå Žåãããã€ã³ã¿ãã©ãã«ãèšå®ããªããNULLãèšå®ããŸãã
doEventé¢æ°ã¯ãåº§æš "çŸåšã®ç¶æ
" x "çºçããã€ãã³ã"ã®ããŒãã«ãããã€ã³ã¿ãŒããã§ãã¯ãããã®ããã®é¢æ°ãžã®ãã€ã³ã¿ãŒãããå Žåã "event"ãã©ã¡ãŒã¿ãŒã§åŒã³åºããŸãã
if (action[btState][e] == NULL) return; // - (*(action[btState][e]))(e); //
Cã§ã®ãã€ã³ã¿ãŒãšã¢ãã¬ã¹æŒç®ã®è©³çŽ°ã«ã€ããŠã¯ãããããŒã®Cèšèªããªã©ã®æžç±ã§Googleãåç
§ã§ããŸãã
é·æïŒ
- éåžžã«èªã¿ãããã³ãŒãã ç¬ããªãã§ã äžåºŠãã€ã³ã¿ã䜿ã£ãŠé
åãå³ããã ãã§ååã§ãã·ã³ãã«ã§çŸããã³ãŒããåŸãããŸãã ããªãã¯ã¿ãã¬ãããšããŠã¿ãã¬ãããæã£ãŠããŸããã»ã«ã¯å¥ã
ã«æãããŠããŸã-çŸããã
- æžããããã
- ããžãã¯ã®å€æŽã¯éåžžã«ç°¡åã§ãã
çæïŒ
- ã¡ã¢ãªãé£ã¹ãã åãã€ã³ã¿ãŒã¯2ã4ãã€ãã§ãã 6x6 = 36ã»ã«ã¯72ã144ãã€ãã®ã¡ã¢ãªãå æããŸããããã¯åãã¿ã³çšã§ããã4ã€ããå Žåã¯ã©ãã§ããããã äžè¬çãªArduinoãããã®ã¡ã¢ãªã¯2048ãã€ããããªãããšãæãåºãããŠãã ããã
ãã€ãã¹èšå·ã¯éåžžã«å€ªåã§ããããšãå€æãããããArduinoã®ããŒã¹ãããŒã¯ã®åŠçãæžããåŸã§ãã ã¯ãã¹OOPãšICAã ãããŠãããžãã¹ã«ãããã³ãŒãã®éåžžã«æåã®ã¢ããªã±ãŒã·ã§ã³ã¯ãããããã¹ãŠãªãã«ããŸããã ãã®çµæããã¹ã€ãã{ã¹ã€ãã{}}ãã®äžéå°ç¹ã«ãã©ãçããŸããã
ãã©ã³BïŒãŽãŒã«ãã³ããŒã³ãŸãã¯ã¹ã€ãã{ã¹ã€ãã{}}
æãäžè¬çãªäžçšåºŠã®ãªãã·ã§ã³ã¯ããã¹ããããswitchã¹ããŒãã¡ã³ãã䜿çšããããšã§ãã switchã¹ããŒãã¡ã³ãã®ã±ãŒã¹ãšããŠã®åã€ãã³ãã«å¯ŸããŠãçŸåšã®ç¶æ
ã§switchãèšè¿°ããŸãã é·ãããšãå€æããŸããããå€ããå°ãªããæ確ã§ãã
void doEvent(enum event e) { switch (e) { case Press: switch (btState) { case Idle: btState=PreClick; pressTimeStamp=millis(); break; } break; case Release: btState=Idle; break;
äžèšã®ãã©ã³Bã§èª¬æããããã«ãã¹ããŒãã³ã³ãã€ã©ã¯åŒãç¶ãå€æããŒãã«ãäœæããŸããããã®ããŒãã«ã¯ã³ãŒãå
ã§ãã©ãã·ã¥ãããå€æ°ã®ã¡ã¢ãªãå æããŸããã
é·æïŒ
- ã¯ã€ãã¯ã³ãŒãã
- ã¡ã¢ãªãç¯çŽããŸãã
- è«çã¯æ確ã§ãã èªãããšãã§ããŸãã
- ããžãã¯ãç°¡åã«å€æŽã§ããŸãã
çæïŒ
- å€æ°ã®ç¶æ
ãšã€ãã³ããå«ãããã€ãã®ç»é¢ã«ãããããã¯ãã¹ããããåå¥ã®ãã¡ã€ã«ã«è¡šç€ºããããšã¯å°é£ã§ãã
å®éãPlan-BãšPlan-Aã䜿çšã§ããŸããã€ãŸããã€ãã³ãã®å Žåã¯åãæ¿ããŸãããç¶æ
ã®å Žåã¯åãæ¿ããå¯èœã§ãã ç§ã®å¥œã¿ã§ã¯ãåŸã§äœããå€æŽããå¿
èŠãããå Žåãã¹ã€ããã¯ããæ確ã§äŸ¿å©ã§ãã
ãã¿ã³ã®ã¯ãªãã¯ã«å¿ããŠã³ãŒããåã蟌ãå Žæ
ã¿ãã¬ããã§ã¯ããã¿ã³ã€ãã³ããã³ãã©ãŒã«çŠç¹ãåœãŠãŠãä»ã®MCAã®ååšãèæ
®ããŸããã§ããã å®éã«ã¯ããã¿ã³ãæ©èœããŠããããšãåã¶ã ãã§ãªããä»ã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿
èŠããããŸãã
é©åãªã³ãŒããæ¿å
¥ããããã®2ã€ã®éèŠãªå ŽæããããŸãã
case Release: switch(btState) { case Click:
case WaitDebounce: switch (st) { case PreClick: btState=Click; // . "" . break;
ãããã®ã€ãã³ããåŠçãããoffClickïŒïŒãonClickïŒïŒãªã©ã®ç¬èªã®é¢æ°ãäœæããŠãçŸãããæãªããªãããã«ããã®ãæåã§ããå¥ã®MCAã«æž¡ãå¯èœæ§ããããŸãïŒD
ICAãã¿ã³ã®ããžãã¯å
šäœãC ++ã¯ã©ã¹ã§ã©ããããŸããã ããã¯äŸ¿å©ã§ããã¡ã€ã³ã³ãŒãã®èšè¿°ã劚ããããã¹ãŠã®ãã¿ã³ãç¬ç«ããŠæ©èœããå€æ°ã®ååãäœæããå¿
èŠããªãããã§ãã ããã ãããŸã£ããç°ãªã話ã§ãããMCAãã¯ã©ã¹ã«ãã©ãŒããããããããããArduinoã®ã©ã€ãã©ãªãäœæããæ¹æ³ãæžãããšãã§ããŸãã ã³ã¡ã³ãåžæã«æžããŠãã ããã
çµæã¯äœã§ããïŒ
çµæãšããŠãçè«çã«ã¯ããã®èšäºãèªãã åŸããæ°ã«å
¥ãã®Arduinoã¹ã±ããã«ããèªããªããã°ã®ããããããšããMCAã䜿çšããçŸããæ§é åããããã®ã«çœ®ãæããããšæãã¯ãã§ãã
ã«ãŒãïŒïŒé¢æ°ã§ã¯ãã€ãã³ããçæããã ãã§ãããåäžã®é
延ã¯ãããŸããã ãããã£ãŠãäžèšã®ã³ãŒãã®åŸãä»ã®äœããæžãããšãã§ããŸããä»ã®MCAã®ã€ãã³ããçæããé
延ãå«ãŸãªãç¬èªã®ã³ãŒããããã«å®è¡ããŸãïŒïŒã
ãã®èšäºããMCAãšã¯äœãããŸãMCAãã¹ã±ããã«å®è£
ããæ¹æ³ãç解ããã®ã«åœ¹ç«ã€ããšãæ¬åœã«é¡ã£ãŠããŸãã