|
|
![]() Á¦¸ñ : Arduino OneButton Library ÂüÁ¶ : http://www.mathertel.de/Arduino/OneButtonLibrary.aspx ÀÔ·Â ½ºÀ§Ä¡ 󸮰¡ Àß µÇ¸é ÀåÄ¡°¡ °í±ÞÀ¸·Î ´À²¸Áö´Âµ¥, ÀÔ·Â ½ºÀ§Ä¡ 󸮰¡ ¹Ì¼÷Çϸé? ¿½ÉÈ÷ ¸¸µç ÀåÄ¡ÀÇ Á¶ÀÛ¼ºÀÌ ¶³¾îÁö¹Ç·Î ½Î±¸·Á°¡ µÇ¾î ¹ö¸³´Ï´Ù,,,, ![]() ´©¸§ ½ºÀ§Ä¡ ÇÑ °³ÀÇ °ªÀ» Àдµ¥ ¹«½¼ ¶óÀ̺귯¸®? ¶ó°í ¸»Çϱ⿡´Â ¹«¸®°¡ ÀÖÁö ¾ÊÀ»±î¿ä? ±×·¸½À´Ï´Ù. Æß¿þ¾î¸¦ ¸¸µé´Ù º¸¸é ½ºÀ§Ä¡ Àб⸦ Á¶ÀÛ¼ºÀÌ ÁÁ°Ô Àß ¸¸µé·Á¸é »ó´çÈ÷ ¾î·Á¿ö Áý´Ï´Ù. ½ºÀ§Ä¡ °ËÃâÀÇ °¡Àå Å« ¹®Á¦´Â ÁÖÇÔ¼ö¿¡¼ ½Ã°£ÀÌ ÇÊ¿äÇÑ ¾î¶² Áß¿äÇÑ ÇÔ¼ö¸¦ ½ÇÇàÁßÀ̰ųª ÇÔ¼ö¸¦ ó¸®ÇÏ´Ù ¸»°í ½ºÀ§Ä¡ ÀÔ·ÂÀ» °ËÃâÇÏ·¯°¥ ¼ö ¾ø´Â ÇÔ¼ö¸¦ ½ÇÇàÁßÀÏ ¶§ ½ºÀ§Ä¡ Á¶ÀÛÀÌ ¹ß»ýÇÑ´Ù¸é ÀåÄ¡´Â ½ºÀ§Ä¡ °ËÃâ ´É·ÂÀÌ ¶³¾îÁö¹Ç·Î Á¶ÀÛ¼ºÀÌ ³ª»Û ÀåÄ¡·Î ÆÇÁ¤µÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶ÇÇÑ ½ºÀ§Ä¡ÀÇ ´¸² °ËÃâÀº ÀǿܷΠÁö¿¬ ŸÀ̸ӳª, ¸ÕÀú »óŸ¦ ±â¾ïÇϱ⵵ ÇØ¾ß ÇÏ¸é¼ ¾î¶² °æ¿ì¿¡´Â ¾ó¸¶³ª ´·Á ÀÖ¾ú´ÂÁö¸¦ ÆÇ´ÜÇØ¾ß ÇÏ´Â ¶§µµ ÀÖ½À´Ï´Ù. °á±¹ ½º윛 ´¸²°ËÃâÀº 󸮼ӵµ º¸´Ù´Â ½Ã°£ÀÌ °É¸®´Â Á¾·ùÀÇ ÀÛ¾÷À̹ǷÎ, ½ºÀ§Ä¡ ´¸² °ËÃâÀ» Àß ¸ø ó¸®Çϸé Á¤ÀÛ Áß¿äÇÑ ´Ù¸¥ ÇÔ¼öÀÇ ½ÇÇà½Ã°£À» ³¶ºñÇÏ°Ô µË´Ï´Ù. ÀÌ·²¶§, ¸¶Ä§ ÁÁÀº ¶óÀ̺귯¸®°¡ ÀÖ´Ù¸é, °ñÄ¡¾ÆÇ ½ºÀ§Ä¡ 󸮸¦ ½±°Ô ¸¸µé ¼ö µµ ÀÖ°Ú±º¿ä,,, Library : ÷ºÎÆÄÀÏ #1À» ³»·Á¹Þ±âÇÑ ´ÙÀ½ ¾ÐÃàÀ» Ç®¸é ¾Æ·¡¿Í °°Àº Æú´õ°¡ ³ª¿É´Ï´Ù. OneButton.cpp¿Í OneButton.h °¡ µé¾îÀÖ´Â OneButton Æú´õ¸¦ Åë°·Î Libraries Æú´õ¾È¿¡ º¹»çÇØ ÁÝ´Ï´Ù. examples ¾ÈÀÇ SimpleOneButton Æú´õ´Â ³»¹®¼ÀÇ Arduino·Î º¹»çÇØ ÁÝ´Ï´Ù. Arduino IDE¸¦ ÀÛµ¿½Ã۰í, Sketch > Import Libary >¸¦ º¸¸é ¾Æ·¡ÀÇ È¸éó·³ OneButton ÀÌ µî·ÏµÇ¾î ÀÖ½À´Ï´Ù. ![]() ÀÚ ÀÌÁ¦ File > Open ¿¡¼ ³»¹®¼ > ArduinoSimpleOneButton > Æú´õ ¾ÈÀÇ SimpleOneButton.ino¸¦ ¼±ÅÃÇÕ´Ï´Ù. ¹öưÀ» ÀÔ·ÂÇÒ ¼ö ÀÖ´Â ¶óÀ̺귯¸® ¼Ò½º°¡ ¾ÆµàÀÌ³ë ½ºÄÏÄ¡·Î µé¾î ¿Ô½À´Ï´Ù. VÀÚ ¸ð¾çÀÇ Verify ´ÜÃ߸¦ ´©¸£¸é ÄÄÆÄÀÏÀ» ½ÃÀÛÇÏ°í ¿À·ù°¡ ¾øÀ¸¸é IDE ¾Æ·¡ÂÊ¿¡ Done CompileÀÌ Ç¥½ÃµË´Ï´Ù. ÀÌ ½ºÄÏÄ¡¿Í ¶óÀ̺귯¸®´Â Ç¥ÁØÀûÀÎ ´ÜÃß ½ºÀ§Ä¡°¡ Çѹø, µÎ¹ø ±×¸®°í ¿À·§µ¿¾È ´·ÁÁö´Â°¡¸¦ °ËÃâÇÒ ¶§, ¾î¶»°Ô ÀÔ·ÂÇÉÀ» »ç¿ëÇÏ´ÂÁö º¸¿©ÁØ´Ù. À̰ÍÀº ÇѰ³ÀÇ ´ÜÃß ½ºÀ§Ä¡¸¦ ´Ù±â´ÉÀ¸·Î Àç»ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¾ÆµàÀ̳ë ÇÁ·Î±×·¥À» ½ÃÀÛÇÒ ¶§, °£´ÜÇÑ ´©¸§´ÜÃ߸¦ Àд ¿¹Á¦¸¦ ÀÌÇØÇÏ·Á¸é, ªÀº ½Ã°£¿¡ on/off°¡ ¹Ýº¹µÇ´Â Á¢Á¡ Áøµ¿À» Á¦°ÅÇØ¾ß ÇÑ´Ù. °á·ÐÀº ½ºÄÉÄ¡¿¡¼ ½±°Ô ó¸®ÇÏ´Â OneButton À̶ó°í ºÎ¸£´Â ÀÛÀº ¶óÀ̺귯¸®ÀÌ´Ù. ÀÌ ÀÚ·á´Â ¶óÀ̺귯¸®¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁØ´Ù. ~~~ Áß·«, ÇÁ·Î±×·¥ÀÌ ¸·È÷Áö ¾Ê°Ô ´ÜÃß ½ºÀ§Ä¡¸¦ Àб⠳ª´Â Àü¿ë ¿ëµµ¸¦ À§ÇÑ loop() ÇÔ¼ö·Î ½ºÄÏÄ¡°¡ Á» ´õ º¹ÀâÇØÁø´Ù°í ÃßÃøÇÕ´Ï´Ù. °øÅëÀûÀ¸·Î ¿ä±¸µÇ´Â ¹æ¹ýÀ¸·Î ¶óÀ̺귯¸®ÀÇ tick() ÇÔ¼ö ´ë½Å¿¡ ´ÜÃß ½ºÀ§Ä¡°¡ µÎ¹ø ´·È´ÂÁö¸¦ Àд ÇÔ¼ö¸¦ ¸¸µé¾î¾ß Çϰí, ÁÖ±âÀûÀ¸·Î È£Ãâµµ ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̺귯¸® ÇÔ¼ö ¾È¿¡¼ ¸ðµÎ 3 Á¾·ùÀÇ °ËÃâÀ» À§ÇÑ Äڵ带 ãÀ» ¼ö ÀÖ½À´Ï´Ù. ¸ðµç 3 Á¾·ùÀÇ ±â´ÉÀ» À§ÇØ ´ç½ÅÀÇ ÄÚµå´Â register ÇÔ¼ö·Î ¶óÀ̺귯¸®¿¡ ¿¬°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ç½ÅÀÇ ÇÔ¼ö´Â ¾Ë¸Â°Ô °ËÃâµÈ »óÅÂÀÏ ¶§ È£ÃâµÉ °ÍÀÔ´Ï´Ù. OneButton ¶óÀ̺귯¸®ÀÇ »ç¿ë ¿¹ À̰÷Àº ÀÌ¹Ì LED°¡ ¿¬°áµÈ ¾ÆµàÀÌ³ë ±âÆÇÀÇ D13 Æ÷Æ®ÀÇ Ãâ·ÂÀ» ¹Ù²Ù±â À§ÇØ, ´©¸§ ½ºÀ§Ä¡¸¦ µÎ¹ø ´·¯, Ãâ·ÂÀ» ¹Ù²Ù´Â OneButton ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹ÀÌ´Ù. #include "OneButton.h" // ¶óÀ̺귯¸®ÀÇ ¼Ò½º¸¦ ºÒ·¯ ¿Â´Ù. OneButton button(A1); // ´ÜÃß ½ºÀ§Ä¡´Â A1 ÇÉ¿¡ ¿¬°áÇÑ °ÍÀ» Á¤ÀÇ. void setup() // Àü¿øÀÌ ÄÑÁø ÈÄ Ã³À½ Çѹø ½ÇÇàµÇ´Â ÃʱâÈ ÇÔ¼ö { pinMode(13, OUTPUT); // pin 13À» µðÁöÅÐ Ãâ·ÂÀ¸·Î ¼³Á¤. button.attachDoubleClick(doubleclick); // ¶óÀ̺귯¸®¿¡ ³»ÀåµÈ µÎ¹ø´¸° »óŸ¦ °ËÃâÇÏ´Â ÇÔ¼ö¸¦ ½ºÄÉÄ¡¿¡ ¿¬°áÇÑ´Ù. } // ÃʱâÈ ³¡ void loop() // ÁÖÇÔ¼ö´Â ¿¬¼ÓÀ¸·Î ¹«ÇÑÇÏ°Ô ¹Ýº¹µÈ´Ù. { button.tick(); // ´ÜÃß ½ºÀ§Ä¡°¡ µÎ¹ø ´·Ç´ÂÁö °Ë»çÇÑ´Ù. ¶óÀ̺귯¸®¿¡ µé¾îÀÖ´Â ÇÔ¼öÀÌ´Ù. delay(10); // ¿©±â¿¡ Ãß°¡·Î ´Ù¸¥ ÀÏÀ» ÇÏ´Â ÇÔ¼ö¸¦ ³ÖÀ» ¼ö ÀÖ´Ù. } // ÁÖÇÔ¼öÀÇ ³¡ // ÀÌ ÇÔ¼ö´Â ´ÜÃß ½ºÀ§Ä¡°¡ 2¹ø ´¸®¸é ¶óÀ̺귯¸®¿¡¼ ÀÚµ¿À¸·Î È£ÃâµÇ¾î ½ÇÇàµÈ´Ù. void doubleclick() { static int m = LOW; // ´¸° °ÍÀ» ÀÎÁöÇÏ¿© ¿©±â¸¦ »øÇàÇϹǷΠ´©¸§ »óÅ´ Áö¿î´Ù. m = !m; // LED »óŸ¦ ¹Ù²Ù±â À§ÇØ ½ÅÈ£¸¦ µÚÁý´Â´Ù. digitalWrite(13, m); // µÚÁýÀº ½ÅÈ£¸¦ D13 ¿¡ Ãâ·Â } // µÎ¹ø ´©¸£±â ó¸® ÇÔ¼ö ³¡ (ÀÌ ÇÔ¼ö´Â ½ºÀ§Ä¡ ´¸² °ËÃâ ÈÄ¿¡ »ç¿ëÀÚÀÇ ¿ëµµ¸¦ ó¸®ÇÏ´Â ÇÔ¼öÀÌ´Ù) ´©¸§´ÜÃß ½ºÀ§Ä¡°¡ ÇØÁ¦ µÈ ´ÙÀ½, µÎ¹ø´¸² °ËÃâÇÔ¼ö°¡ ¾î¶»°Ô µÇ´ÂÁö º¸¿©ÁØ´Ù. ±â´ÉÀÇ »ó¼¼ ¶óÀ̺귯¸®°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö ¿¹Á¦¸¦ ¼³¸íÇÏ¿© º¸¿©ÁØ´Ù. ÀÔ·Â ÇÉÀÇ Çѹø ´¸²À» °ËÃâÇϰųª, µÎ¹ø ´¸² ȤÀº ¿À·¡ ´¸²ÀÇ »óŸ¦ Á¡°ËÇϱâ À§ÇØ, OneButton ¶óÀ̺귯¸® ¾È¿¡¼ tick() ÇÔ¼öÀÇ ±â´ÉÀ» ãÀ» ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ÀÇ »óÅ ±×¸²(state diagram)¿¡¼ º¸¿©Áִ ó¸®ÀÇ Á¾·ù´Â À¯ÇÑ »óŠ󸮱â finite state machine (FSM) À̶ó ÇÑ´Ù. Ưº°ÇÑ ±×¸²À̳ª ¼öÇÐÀÇ ¼ö½Äµéµµ °á±¹ Á¤º¸¸¦ ½±°Ô Àü´ÞÇÏ·Á´Â ´Ù¸¥ ¾ð¾î¶ó°í »ý°¢ÇÏ¸é µË´Ï´Ù. ![]() Ç×»ó tick() ÇÔ¼ö´Â ÇöÀç »óȲ¿¡¼ È£ÃâµÈ´Ù. ÇöÀç »óÅÂÀÇ Àбâ¿Í ÀÔ·ÂÆ÷Æ®ÀÇ °ªÀº ºÐ¼®µÈ´Ù. ±×¸®°í ÇöÀç »óŰ¡ º¯ÈµÉ ¶§ »ç¿ëÇÒ ¿ÜºÎ ÇÔ¼ö ¿¹ doubleclick()ÀÌ È£ÃâµÈ´Ù. Ưº°ÇÑ OneButton ¶óÀ̺귯¸® ±â´ÉÀº delay() ÇÔ¼ö³ª ºñ½ÁÇÑ Áö¿¬ÇÔ¼ö°¡ ¾Æ´Ï´Ù. ±×¸®°í °ÅÀÇ ¸ðµç °æ¿ì¿¡ ºü¸£°Ô ÁÖÇÔ¼ö·Î µ¹¾Æ¿Ã °ÍÀÌ´Ù. (Áö¿¬ÀÌ ¾øÀ¸¹Ç·Î 󸮼ӵµ°¡ ºü¸£´Ù) ÀÌÁ¦ ºÎÅÍ´Â, ÀÌ ¼ÒÇÁÆ®¿þ¾î ÀåÄ¡°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö ¼³¸íÇÑ´Ù. ÀÔ·Â °ª (Input values)Àº ÀϹÝÀûÀ¸·Î µðÁöÅÐ ÀÔ·Â Æ÷Æ®¿¡ ¿¬°áµÈ ´ÜÃß ½ºÀ§Ä¡ÀÇ °ËÃâ¹æ¹ýÀÌÁö¸¸, ÀÌ ÇÉÀº high »óÅ·Π³»ºÎ pull upµÇ¾î ÀÖ°í, ¿¬°áµÈ ½ºÀ§Ä¡°¡ ´·ÈÀ» ¶§ low »óÅ·Πpull down µÈ´Ù. ´ÜÃß ½ºÀ§Ä¡ °ËÃâ ¼ÒÇÁÆ®¿þ¾î¿¡¼, óÀ½À¸·Î °ËÃâµÉ µðÁöÅÐ ÀÔ·Â °ªÀº µðÁöÅÐ ÀÔ·Â ÇÉÀÇ °ªÀÌ »ç¿ëµÈ´Ù. int buttonLevel = digitalRead(_pin); // ÇöÀç ´ÜÃßÀÇ ½ÅÈ£ ´Ù¸¥ ÀÔ·Â °ªÀ¸·Î ÇöÀç ½Ã°£ÀÌ ÇÊ¿äÇÏ´Ù. millis() ÇÔ¼ö´Â ÁÁÀº ½Ã°£°ªÀ» Á¦°øÇÑ´Ù. ÀÌ ½Ã°£ °ªÀº ´ÜÃß°¡ ´¸° ½Ã°£ÀÇ Çհ踦 ¿ÏÀüÇÏ°Ô °ËÃâÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ÀÔ·ÂÇÉ¿¡ ´·ÁÀÖ´Â ½Ã°£ °ªÀº ´©¸§Ã³¸® º¯¼ö now·Î º¹»çµÈ´Ù unsigned long now = millis(); // current (relative) time in msecs. »óÅÂ(State) Á¤º¸´Â ÇѹøÀÇ È£Ã⠱׸®°í µû¶ó¿À´Â ´ÙÀ½ È£Ãâ »óÅ »çÀÌ¿¡¼ ¼ýÀÚ¿Í ½Ã°£°ªÀ¸·Î ÀúÀåµÈ´Ù. ÇöÀçÀÇ »óȲÀÌ Æ¯º°ÇÑ »óÅ·Π¸íĪµÈ ÇѰ³ÀÇ º¯¼ö _stat ¿¡ Á¤º¸·Î °¢ÀÎ(hold)µÈ´Ù. Áï, ´ÜÃß°¡ óÀ½ ´·ÁÁ³À» ¶§, »óÅÂÀÇ ¼ýÀÚ¸¦ »ç¿ëÇÏ°í ´Ù¸¥ Çϳª´Â ½Ã°£À» ÀúÀåÇÒ °ÍÀÌ´Ù. 2°³ÀÇ º¯¼ö´Â »óŠ󸮱â(state machine)ÀÇ ÇÔ¼ö·Î Á¤Àǵǰí static keyword·Î Ç¥½ÃµÈ´Ù. ¶ÇÇÑ 2°³ÀÇ º¯¼ö´Â ´ÙÀ½¿¡ tick ÇÔ¼öÀÇ È£ÃâÀ» À§ÇØ ¼ýÀÚ·Î ÀúÀåµÉ °ÍÀÌ´Ù. int _state = 0; // state 0·Î ½ÃÀ۵ȴÙ: ´ÜÃß°¡ ´¸±¶§ ±îÁö ±â´Ù¸°´Ù unsigned long _startTime; // state 1 À¸·Î ¼³Á¤µÉ °ÍÀÌ´Ù. ½ÃÀÛ »óÅ (Starting situation = state 0) »óÅ õÀÌ´Â ´ÜÃß°¡ ´©¸§ÀÇ ´ë±â¿¡¼ 0 »óÅ (state 0)·Î ½ÃÀÛÇÑ´Ù. ´ÜÃß´¸²À» °ËÃâÇÏ´Â ÇÔ¼ö´Â ªÀº ½Ã°£ ÈÄ¿¡ ´Ù½Ã È£ÃâµÉ °ÍÀ̹ǷÎ, ¸¸ÀÏ ´ÜÃß°¡ ´·ÁÁöÁö ¾ÊÀ¸¸é ÇÔ¼ö·Î ºÎÅÍ Áï½Ã ÁÖ ÇÔ¼ö·Î º¹±Í(return)µÈ´Ù. ±×·¯³ª ¸¸ÀÏ ´ÜÃß°¡ ´·ÁÁ³´Ù¸é, º¯¼ö now´Â stat 0¿¡¼ ´Ù¸¥ »óÅÂÀÎ stat 1À¸·Î ÀúÀåµÈ´Ù. Áö³ ½Ã°£ÀÇ ÆÇ´ÜÀº ¸ÕÀú ÇöÀçÀÇ ½Ã°£À» ±â¾ïÇØ µÎ¾î¾ß ºÐ¼®ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. if (_state == 0) // ÀÔ·ÂÆ÷Æ®¿¡ ¿¬°áµÈ ´ÜÃß°¡ ´¸±¶§ ±îÁö ´ë±âÇÑ´Ù. { if (buttonLevel == ButtonDown) // ´ÜÃß°¡ ´¸° °æ¿ì¿¡¸¸ ´ÙÀ½À» ½ÇÇà { _state = 1; // ´ÜÃß°¡ ´·ÈÀ¸¸é »óÅ 1·Î ¿Å±ä´Ù _startTime = now; // ÇöÀçÀÇ ½Ã°£À» ÀúÀå } óÀ½À¸·Î ´ÜÃß°¡ ´·Á Á³À» ¶§ (state 0) ¸î ms ÀÌÈÄ¿¡´Â ´ÙÀ½ ÇÔ¼ö°¡ È£ÃâµÉ °ÍÀÌ´Ù. ´ÜÃß°¡ ´·ÁÁ³À¸¸é ´Ù½Ã ½ÃÀÛ»óÅÂ(state 0)·Î µÇ°Å³ª, »õ·Î¿î »óÅÂ(state 1)·Î µË´Ï´Ù. ÀÌ °æ¿ì¿¡´Â ´ÜÃßÀÇ ´¸²ÀÌ Ç®¸± ¶§ ±îÁö ±â´Ù¸° ´ÙÀ½ ´ÙÀ½ »óÅÂ(state 2)·Î ³Ñ¾î°¡°Ô µË´Ï´Ù. Àΰ£ÀÇ ¼Õ°¡¶ôÀº ±×´ÙÁö ºü¸£Áö ¾Ê±â ¶§¹®¿¡, ´ÜÃß°¡ °è¼Ó ´·ÁÁø »óÅ·ΠÀÖ°Ô µÇ¸é, ÀÏÁ¤½Ã°£ ´ÜÃß°¡ ´¸° °Í ¸¸À¸·Îµµ ´ÜÃßÀÇ ´¸²°ËÃâ ÇÔ¼öÀ» ¿Ï¼ºÇÒ ¼ö µµ ÀÖÁö¸¸,,, ÀÌ ÇÔ¼ö¿¡¼´Â ¾Æ¹«·± »óÅÂÀÇ º¯È°¡ ¾ø½À´Ï´Ù, Áï ´ÜÃß´¸²ÀÇ °ËÃâÀº ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù. Áï, ´ÜÃß°¡ °è¼Ó´¸° »óÅÂ(state 1)´Â »õ·Î¿î tick ÀÌ ¹ß»ýÇÒ ¶§ ±îÁö ±â´Ù¸³´Ï´Ù. ´ÜÃß´¸²ÀÌ 1ÃÊ ÀÌ»ó °è¼ÓµÇ¸é, ¿À·¡´¸²ÀÇ °ËÃâÀÌ ¹ß»ýÇÏ°í ´Ù¸¥ »óÅÂ(state 6)·Î µË´Ï´Ù. À̰ÍÀº ½ÇÁ¦ ´·ÁÁø ½Ã°£°ú ´ÜÃß´¸²ÀÌ ½ÃÀÛµÈ ½Ã°¢ ºÎÅÍ Á¤ÀÇµÈ °£°ÝÀ¸·Î ºñ±³µË´Ï´Ù. ÀÌ °æ¿ì¿¡´Â ¿ÜºÎÀÇ ´¸²Ã³¸® press() ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÈ´Ù. ¾Æ·¡ÀÇ ¶óÀ̺귯¸® Äڵ带 º¸¶ó. else if (_state == 1) // ¸¸ÀÏ »óŰ¡ 1 À̶ó¸é ´¸²ÀÌ Ç®¸®±â¸¦ ±â´Ù¸°´Ù. { if (buttonLevel == ButtonUp) _state = 2; // ´¸²ÀÌ Ç®·ÈÀ¸¸é »óÅ 2 (state 2)·Î °£´Ù else if ((buttonLevel == ButtonDown) && (now > _startTime + _pressTicks)) { if (_pressFunc) _pressFunc(); // ¸¸ÀÏ ¿À·¡´¸²ÀÌ °ËÃâµÇ¸é »óÅ 6 (state 6)À¸·Î °£´Ù. _state = 6; // step to state 6 } } // »óÅ 2 ³ª »óÅ 6 ÀÌ ¾Æ´Ï¸é ÀÌÀü »óŸ¦ À¯ÁöÇϰí ÁÖÇÔ¼ö·Î ³ª°£´Ù. ´ÜÃߴ óÀ½ ´¸²¿¡¼ Ç®·È´Ù(state 2). ÀÌ »óÅÂ(stat 2)´Â ´ÜÃß°¡ ÀÌ¹Ì Ç®·ÈÀ¸¹Ç·Î 2°³ÀÇ ÀÏÀÌ µÈ´Ù. ¸¸ÀÏ ¾î´ÀÁ¤µµ ´ÜÃß°¡ ´¸° ´ÙÀ½ ¾ó¸¶ µ¿¾È ´·ÁÁöÁö ¾Ê¾Ò´Ù¸é, ¿ÜºÎ click() ÇÔ¼ö°¡ ½ÇÇà-È£Ãâ(call)-µÈ´ÙÀ½ state´Â 0À¸·Î ¸®¼ÂµÈ´Ù. ¸¸ÀÏ ´ÜÃß°¡ ÀÌÀüºÎÅÍ °è¼Ó ´·ÁÀÖ´Ù¸é, 2 ¹øÂ° ´ÜÃß°¡ ´¸°°ÍÀ¸·Î °ËÃâµÇ¾î ´ÙÀ½ »óȲ (state 3)À¸·Î Àü´ÞÇÒ °ÍÀÌ´Ù. else if (_state == 2) // ½Ã°£Ãʰú³ª ´ÙÀ½ ´¸²ÀÌ ÀÖÀ» ¶§ ±îÁö ±â´Ù¸°´Ù. { if (now > _startTime + _clickTicks) { if (_clickFunc) _clickFunc(); // ªÀº Çѹø ´¸²À̸é, ¿ÜºÎ »ç¿ëÀÚ Ã³¸®ÇÔ¼ö¸¦ ½ÇÇàÇÑ´Ù. _state = 0; // »óŸ¦ 0À¸·Î ¸®¼Â. } else if (buttonLevel == ButtonDown) _state = 3; // °è¼Ó ´·Á ÀÖ´Ù¸é state 3À¸·Î °£´Ù. } ÀÔ·Â ÇÉÀÌ ´ÙÀ½ ½Ã°£±îÁö Ç®¸®±â¸¦ ±â´Ù¸°´Ù. 2 ¹øÂ° ´¸²ÀÌ °ËÃâµÈ ÀÌÈÄ´Â ¸¶Áö¸· »óȲ (state 3)ÀÌ´Ù. Á¤ÀÇµÈ ½Ã°£Æ² ¾È¿¡¼ ´ÜÃß°¡ Ç®¸®±â¸¦ ±â´Ù¸°´Ù. À̰ÍÀº ¿ÜºÎ »ç¿ëÀÚ µÎ¹ø´¸² ÇÔ¼ö doubleClic()À» ½ÇÇàÇÒ °ÍÀÌ´Ù. ±×¸®°í »óŠ󸮱â(state machine)´Â ¸ðµç ±â¾ïÀ» Áö¿ì°í ¸®¼ÂµÈ´Ù. else if (_state == 3) // »óŰ¡ 3 ÀÌ¸é ´¸²ÀÌ Ç®¸±¶§ ±îÁö ±â´Ù¸°´Ù. { if (buttonLevel == ButtonUp) // ¸¸ÀÏ ´ÜÃß°¡ Ç®·ÈÀ¸¸é { if (_doubleClickFunc) _doubleClickFunc(); // ¿ÜºÎÀÇ 2¹ø ´¸² 󸮸¦ ½ÇÇàÇÑ´Ù _state = 0; // »óŸ¦ 0À¸·Î ¸®¼ÂÇÑ´Ù. } } // ¸¸ÀÏ ´ÜÃß°¡ ¾ÈÇ®¸®¸é ±×´ë·Î ÁÖÇÔ¼ö·Î ³ª°£´Ù. ´ÙÀ½¹ø¿¡ ÀÔ·ÂÇÉÀÌ Ç®¸®±â¸¦ ±â´Ù¸°´Ù. ÀÌ »óȲ(state 6)Àº 2¹øÂ° ´¸²°ËÃâ°ú ¸Å¿ì ºñ½ÁÇÏ´Ù ´ÜÃß°¡ Ç®¸®±â¸¦ ±â´Ù¸®¸ç »óŸ¦ À¯ÁöÇÑ´Ù. À̶§´Â »óŠ󸮱â(state machine)°¡ ½ÃÀÛÇÒ ¶§ºÎÅÍÀÇ ¸ðµç ±â¾ïÀ» Áö¿ì°í ¸®¼ÂÇÑ´Ù. else if (_state == 6) // ¿À·§µ¿¾È ´¸²ÈÄ¿¡ ´ÜÃß°¡ Ç®¸± ¶§ ±îÁö ±â´Ù¸°´Ù. { if (buttonLevel == ButtonUp) //¸¸ÀÏ ´ÜÃß°¡ Ç®¸®¸é { _state = 0; // »óŸ¦ 0À¸·Î ¸®¼ÂÇÑ´Ù. } } // °è¼Ó ´·ÁÀÖ´Ù¸é ÁÖÇÔ¼ö·Î ¾Æ¹«Àϵµ ÇÏÁö ¾Ê°í ÁÖÇÔ¼ö·Î µ¹¾Æ°£´Ù. ¿ä¾à : À¯ÇÑ»óŠ󸮱â (FSM)´Â ¸¹Àº »óȲ°ú º¹ÀâÇÑ ±¸Á¶¸¦ ³·Ãß´Â µµ¿òÀ» ÁֱⰡ ¸Å¿ì ½±´Ù. ±×¸®°í ¾ÆµàÀ̳ëÀÇ ½ºÄÏÄ¡¿¡¼ ÀÇ»ç(pseudo) º´·Äó¸®(multitasking)·Î ÀÛ¼ºµÈ ¹æ¹ýÀ¸·Î µµ¿òÀ» ÁØ´Ù. OneButton ¶óÀ̺귯ÀÇ ¼³Ä¡¹æ¹ýÀº À§¿¡¼ ¼³¸íÇßÀ¸¹Ç·Î »ý·«ÇÑ´Ù. ÇÏÁö¸¸ ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÏ°í ¾ÆµàÀÌ³ë ½ºÄÏÄ¡¸¦ ½ÇÇàÇØ¾ß ÀÚµ¿À¸·Î Ãß°¡µÈ library¸¦ ÀνÄÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¹«·á ¼ÒÇÁÆ®¿þ¾î·Î, ½Åü¿Í Àç»ê »óÀÇ ¾î¶² À§Çè°ú ¼ÕÇØ¸¦ º¸»óÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº GNU ¹«·á ¼ÒÇÁÆ®¿þ¾î ¹èÆ÷±ÔÁ¤À» µû¸¨´Ï´Ù. Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA ![]() |
![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |