{"id":7343,"date":"2026-10-21T11:20:10","date_gmt":"2026-10-21T03:20:10","guid":{"rendered":"https:\/\/www.metal-domes.com\/blog\/?p=7343"},"modified":"2026-10-21T11:33:39","modified_gmt":"2026-10-21T03:33:39","slug":"button-debounce-and-switch-bounce","status":"publish","type":"post","link":"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/","title":{"rendered":"Button Debounce and Switch Bounce: How Do You Test Metal Dome Switches?"},"content":{"rendered":"<div class=\"yzp-no-index\"><\/div><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_69_1 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<div class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/div>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#Why_Do_Metal_Dome_Switches_Bounce\" title=\"Why Do Metal Dome Switches Bounce?\">Why Do Metal Dome Switches Bounce?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#What_Is_the_Difference_Between_Button_Debounce_and_Switch_Bounce\" title=\"What Is the Difference Between Button Debounce and Switch Bounce?\">What Is the Difference Between Button Debounce and Switch Bounce?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#How_Do_You_Measure_Metal_Dome_Switch_Bounce\" title=\"How Do You Measure Metal Dome Switch Bounce?\">How Do You Measure Metal Dome Switch Bounce?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#What_Does_Switch_Bounce_Look_Like_on_an_Oscilloscope\" title=\"What Does Switch Bounce Look Like on an Oscilloscope?\">What Does Switch Bounce Look Like on an Oscilloscope?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#How_Much_Debounce_Time_Does_a_Metal_Dome_Need\" title=\"How Much Debounce Time Does a Metal Dome Need?\">How Much Debounce Time Does a Metal Dome Need?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#How_Can_Hardware_Debouncing_Filter_a_Metal_Dome_Input\" title=\"How Can Hardware Debouncing Filter a Metal Dome Input?\">How Can Hardware Debouncing Filter a Metal Dome Input?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#How_Do_You_Debounce_a_Metal_Dome_Button_in_Software\" title=\"How Do You Debounce a Metal Dome Button in Software?\">How Do You Debounce a Metal Dome Button in Software?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#Should_You_Use_Hardware_or_Software_Debouncing\" title=\"Should You Use Hardware or Software Debouncing?\">Should You Use Hardware or Software Debouncing?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#How_Does_Debouncing_Work_in_a_Metal_Dome_Keypad_Matrix\" title=\"How Does Debouncing Work in a Metal Dome Keypad Matrix?\">How Does Debouncing Work in a Metal Dome Keypad Matrix?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#Can_Dome_Alignment_and_Actuation_Affect_Switch_Bounce\" title=\"Can Dome Alignment and Actuation Affect Switch Bounce?\">Can Dome Alignment and Actuation Affect Switch Bounce?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#How_Do_You_Verify_a_Debounced_Metal_Dome_Keypad\" title=\"How Do You Verify a Debounced Metal Dome Keypad?\">How Do You Verify a Debounced Metal Dome Keypad?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/#Metal_Dome_Debouncing_FAQs\" title=\"Metal Dome Debouncing FAQs\">Metal Dome Debouncing FAQs<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n\n\n\n\n<p><a href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/\">Button Debounce and Switch Bounce<\/a> affect whether one press on a metal dome keypad produces one command or several. The dome can briefly make and break electrical contact as it snaps down or returns. Debouncing accepts a stable switch state instead of treating every transition as a separate press. Measure the raw contact signal in the assembled keypad, check both directions, and then select the hardware filter or software timing.<\/p>\n\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hero-reference-v2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hero-reference-v2.jpg\" alt=\"Reference-based illustration of a circular metal dome keypad array\" width=\"600\" height=\"400\" class=\"wp-image-7345\" srcset=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hero-reference-v2.jpg 600w, https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hero-reference-v2-300x200.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_Do_Metal_Dome_Switches_Bounce\"><\/span>Why Do Metal Dome Switches Bounce?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>A metal dome bridges a center contact and an outer contact when pressed. Its elastic movement gives the user a tactile click, but electrical contact does not necessarily settle at the instant of that click. The moving dome can separate from and touch the pad again before remaining closed. During release, the contact can also change state more than once before remaining open.<\/p>\n\n\n\n\n<p>This switch bounce is a mechanical contact effect, not a second intentional button press. A fast digital input may recognize several transitions during a single finger movement. On an industrial control keypad, that can turn one setting change into several increments; on a handheld instrument, it can open and immediately close a menu.<\/p>\n\n\n\n\n<p>The click, contact closure and accepted controller event are three different observations. A crisp tactile response does not prove that the electrical signal is bounce-free. Switch bouncing and debouncing therefore need to be checked at the contact and at the controller, not judged by feel alone.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_Is_the_Difference_Between_Button_Debounce_and_Switch_Bounce\"><\/span>What Is the Difference Between Button Debounce and Switch Bounce?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>Switch bounce describes the unwanted contact transitions. Button debounce describes the electrical or software processing that prevents those transitions from becoming extra commands. A debouncer does not stop the metal from moving; it changes which input changes the system accepts.<\/p>\n\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>Term<\/th>\n<th>What it describes<\/th>\n<th>What to record<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Button bounce time<\/td>\n<td>Raw contact activity between the first transition and final settling for one operation<\/td>\n<td>Separate press and release measurements<\/td>\n<\/tr>\n<tr>\n<td>Debounce time<\/td>\n<td>The qualification interval or effective filtering delay<\/td>\n<td>Algorithm, thresholds and timing settings<\/td>\n<\/tr>\n<tr>\n<td>Input latency<\/td>\n<td>Time from the user&#8217;s action to the accepted event<\/td>\n<td>Mechanical travel, filtering, scanning and application delay<\/td>\n<\/tr>\n<tr>\n<td>Auto-repeat<\/td>\n<td>Deliberate repeated commands while a key stays pressed<\/td>\n<td>Initial hold delay and repeat interval<\/td>\n<\/tr>\n<\/tbody><\/table>\n<\/figure>\n\n\n\n<p>For example, a keypad may use a stable-time test after each raw change. That waiting interval is not a measured property of the dome. Increasing it can suppress extra events, but also delay response or reject a very short legitimate press. Button debouncing must balance rejection and usability.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Do_You_Measure_Metal_Dome_Switch_Bounce\"><\/span>How Do You Measure Metal Dome Switch Bounce?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>Measure the switch in its intended electrical circuit and mechanical stack. A loose dome on a bench can behave differently from the same dome beneath an overlay, adhesive carrier and actuator. Use the actual pull-up or pull-down arrangement, supply voltage and input loading whenever practical.<\/p>\n\n\n\n\n<p>For a normally open dome wired to ground through its contacts, a pull-up holds the raw input high when released. Pressing the dome pulls the input low. Probe this raw node before any RC filter or software interpretation. A second oscilloscope channel can observe the hardware-filter output or a firmware debug pin that changes when a press is accepted.<\/p>\n\n\n\n\n<ol class=\"wp-block-list\">\n<li>Power the keypad from a suitable low-voltage test supply. Confirm the contact current stays within the selected dome&#8217;s rating.<\/li>\n<li>Connect the probe to the raw input and a short ground connection to the circuit reference. Check oscilloscope grounding before connection; never attach an earth-referenced ground clip to an arbitrary live node.<\/li>\n<li>Trigger on the falling edge for an active-low press, with enough pre-trigger history to show the released state.<\/li>\n<li>Capture the complete transition, then zoom in to resolve short pulses. Keep enough sample rate and acquisition memory for both the total interval and narrow edges; averaging can hide individual bounce events.<\/li>\n<li>Repeat with a rising-edge trigger for release. Save multiple operations rather than choosing only the cleanest trace.<\/li>\n<li>Repeat at representative actuation speeds, off-center loading and assembled tolerances. Add temperature and life-cycle conditions required by the application.<\/li>\n<\/ol>\n\n\n\n\n<p>Record the dome part number, actuator geometry, electrical load, probe setup and acquisition settings with each waveform. A time value without those conditions is difficult to reproduce or compare.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_Does_Switch_Bounce_Look_Like_on_an_Oscilloscope\"><\/span>What Does Switch Bounce Look Like on an Oscilloscope?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>On an active-low input, a clean press would be one high-to-low transition. A bouncing press shows several excursions between high and low before settling low. Release has the reverse final state, but its pulse pattern and duration need not match the press.<\/p>\n\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-waveform.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-waveform.jpg\" alt=\"Illustrative raw and debounced press and release signals, not measured data\" width=\"600\" height=\"400\" class=\"wp-image-7340\" srcset=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-waveform.jpg 600w, https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-waveform-300x200.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Place one cursor at the first contact transition and another at the final unwanted transition before the stable state. Define the voltage thresholds used to identify transitions, particularly if the trace contains ramps or intermediate levels. An analog oscilloscope shows those levels; a logic analyzer only shows the decisions made at its threshold.<\/p>\n\n\n\n\n<p>Compare the raw waveform with the accepted state. There should be one accepted press and one accepted release for one complete operation. Several raw edges with one accepted event show filtering working; several accepted events after the raw signal has already settled point toward event handling, repeat logic or another input path.<\/p>\n\n\n\n\n<p>Do not label a disturbance as contact bounce solely because it is short. Noise coupled from a motor or display can appear while the dome is not moving. Check whether the disturbance follows actuation and whether it occurs on other inputs at the same time.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Much_Debounce_Time_Does_a_Metal_Dome_Need\"><\/span>How Much Debounce Time Does a Metal Dome Need?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>There is no single debounce time for every metal dome assembly. Measure press and release distributions, include the intended operating conditions, and choose a qualification interval with margin over the behavior that must be rejected. Then verify that the shortest intended press and release are still recognized.<\/p>\n\n\n\n\n<p>Our <a href=\"https:\/\/www.metal-domes.com\/product\/metal-dome-F-Series.htm\">four-leg metal domes<\/a> use a normally open SPST contact configuration. The F-series specifications distinguish contact bounce on from contact bounce off, listing less than 0.3 ms and less than 6 ms respectively. These are series specifications, not a universal firmware setting for every dome, carrier or keypad. Confirm the selected part and test conditions before using them as an acceptance limit.<\/p>\n\n\n\n\n<p>As an illustrative timing example, if the last raw change occurs at 4 ms and the algorithm requires 8 ms of unchanged input, acceptance occurs at approximately 12 ms, plus sampling delay. The 8 ms setting is an example, not a recommended default. A 1 ms scan interval adds timing granularity, and irregular polling can add more latency.<\/p>\n\n\n\n\n<p>Press and release can use different validated intervals. Do not shorten release filtering without testing: release chatter can re-arm the state machine and make the next bounce look like another press.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Can_Hardware_Debouncing_Filter_a_Metal_Dome_Input\"><\/span>How Can Hardware Debouncing Filter a Metal Dome Input?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>A button debounce circuit can combine a pull-up resistor, a capacitor and a Schmitt-trigger input. The RC network slows voltage changes; the Schmitt trigger uses separate rising and falling thresholds to turn that slower signal into a clean digital transition. Confirm whether the MCU input already has suitable hysteresis rather than assuming that every GPIO does.<\/p>\n\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hardware.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hardware.jpg\" alt=\"Illustrative metal dome hardware debounce circuit with pull-up, current-limiting resistor, capacitor and Schmitt buffer\" width=\"600\" height=\"400\" class=\"wp-image-7341\" srcset=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hardware.jpg 600w, https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-hardware-300x200.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>In a simple switch debounce circuit, check the charge and discharge paths separately. With a pull-up resistor from the supply to the sense node, a capacitor from that node to ground, and a series resistor between the node and the dome contact, release charging and press discharging have different effective resistances. The series resistor limits capacitor discharge current, but also raises the closed-state voltage. That voltage must remain below the guaranteed low threshold under worst-case conditions.<\/p>\n\n\n\n\n<p>The time constant is R \u00d7 C, but it is not automatically the debounce time. Threshold voltages, initial capacitor voltage, component tolerance, leakage and the bounce waveform determine when the input changes state. For an ideal release starting at zero, the time to a rising threshold is -RC \u00d7 ln(1 &#8211; Vthreshold\/Vsupply). Use the actual device thresholds for a design calculation.<\/p>\n\n\n\n\n<p>Avoid placing a large capacitor directly across the dome contacts without checking the transient current. Also check startup behavior and supply sequencing. A capacitor alone is not a complete solution if its slow edge repeatedly crosses an unsuitable digital input threshold.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Do_You_Debounce_a_Metal_Dome_Button_in_Software\"><\/span>How Do You Debounce a Metal Dome Button in Software?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>A useful button debounce algorithm maintains a raw candidate state and an accepted state. This button debounce state machine restarts the candidate timer whenever the sampled raw input changes. Accept the candidate only after it has remained unchanged for the selected button debounce time. Generate a press event only when the accepted state changes to pressed.<\/p>\n\n\n\n\n<p>For switch debouncing code in C, the essential logic is:<\/p>\n\n\n\n\n<pre><code class=\"language-c\">\/* raw_pressed is true when the active-low input reads low. *\/\nvoid update_button(bool raw_pressed, uint32_t now_ms)\n{\n    if (raw_pressed != candidate_pressed) {\n        candidate_pressed = raw_pressed;\n        candidate_since = now_ms;\n    }\n    uint32_t wait_ms = candidate_pressed ? press_ms : release_ms;\n    if (candidate_pressed != accepted_pressed &amp;&amp;\n        (uint32_t)(now_ms - candidate_since) &gt;= wait_ms) {\n        accepted_pressed = candidate_pressed;\n        if (accepted_pressed) {\n            queue_press_event();\n        } else {\n            queue_release_event();\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n\n<p>This excerpt needs per-key state variables, a monotonic millisecond tick and application-defined event functions. Initialize the candidate and accepted state deliberately at startup, including the policy for a key already held during power-on. Unsigned elapsed-time subtraction supports timer wraparound when the interval is short and updates continue regularly.<\/p>\n\n\n\n\n<p>Software debouncing should not block the rest of the keypad task with a long delay. Sample regularly, test both directions, and keep hold-to-repeat separate from the initial press event. For a button debounce interrupt implementation, avoid treating every interrupt as a command; use a short interrupt handler and qualify the state in a timer or task. Fast transitions between samples may be missed, so validate the algorithm against captured raw signals and the actual sampling schedule.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Should_You_Use_Hardware_or_Software_Debouncing\"><\/span>Should You Use Hardware or Software Debouncing?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>Method<\/th>\n<th>Suitable use in a dome keypad<\/th>\n<th>What still needs checking<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>RC and Schmitt input<\/td>\n<td>A small number of direct-wired inputs; a clean edge is needed before downstream logic<\/td>\n<td>Thresholds, contact current, tolerances and added latency<\/td>\n<\/tr>\n<tr>\n<td>Software stable-time filter<\/td>\n<td>Several keys with an MCU and a controlled scan schedule<\/td>\n<td>Per-key timing, release behavior, startup and event handling<\/td>\n<\/tr>\n<tr>\n<td>Dedicated debounce IC<\/td>\n<td>Hardware qualification without writing the timing algorithm<\/td>\n<td>Input type, supply, fixed or adjustable delay and output polarity<\/td>\n<\/tr>\n<tr>\n<td>Combined hardware and software<\/td>\n<td>Electrical noise filtering plus deliberate key-event qualification<\/td>\n<td>Total delay and interaction between the two stages<\/td>\n<\/tr>\n<\/tbody><\/table>\n<\/figure>\n\n\n\n<p>Choose by the signal path, not by a claim that one button debounce method is always best. Firmware cannot protect a separate hardware counter that already reacts to raw edges. Conversely, a hardware filter does not stop an application from generating a command on every scan while the accepted key remains pressed.<\/p>\n\n\n\n\n<p>Classic switch debouncing using SR latch circuits normally uses a changeover contact with separate set and reset connections. A conventional SPST metal dome has only open and closed states, so that circuit cannot be copied directly without adapting the input arrangement.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Does_Debouncing_Work_in_a_Metal_Dome_Keypad_Matrix\"><\/span>How Does Debouncing Work in a Metal Dome Keypad Matrix?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>In a scanned array, the controller energizes rows and reads columns. The effective sample interval for one dome is the time between visits to that key, not the time between adjacent row changes. Allow row signals to settle before reading, then debounce each key independently.<\/p>\n\n\n\n\n<p>An N-sample filter represents a time interval only when the scan period is known. If the interval changes with processor workload, the same counter setting can produce different response times. A timestamp-based implementation still needs a bounded sampling schedule and must account for any filtering already applied to the column inputs.<\/p>\n\n\n\n\n<p>Debouncing does not solve matrix ghosting. Ghosting is an electrical path through multiple closed keys; bounce is repeated transition activity at a contact. Check the required simultaneous-key combinations separately. Large per-key capacitors can also interfere with row settling, so a direct-input RC design should not be transferred to a scanned matrix without analysis.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Can_Dome_Alignment_and_Actuation_Affect_Switch_Bounce\"><\/span>Can Dome Alignment and Actuation Affect Switch Bounce?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>Off-center force, excessive preload and a distorted mounting surface can change how the dome makes and releases contact. Inspect the actuator position, travel stop, adhesive keepouts and pad alignment before trying to hide unstable contact behavior with a longer debounce setting.<\/p>\n\n\n\n\n<p>Our <a href=\"https:\/\/www.metal-domes.com\/product-photos\/plunger-actuator-dome-array.htm\">plunger actuator dome arrays<\/a> provide an actuator feature over the dome. The plunger must still match the keycap and load path; adding one is not a guarantee of zero bounce. Test with the final overlay and enclosure compression, not only with a finger pressing an exposed dome.<\/p>\n\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-assembly-reference-v2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-assembly-reference-v2.jpg\" alt=\"Reference-based illustration comparing centered and off-center actuation of a metal dome\" width=\"600\" height=\"400\" class=\"wp-image-7346\" srcset=\"https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-assembly-reference-v2.jpg 600w, https:\/\/www.metal-domes.com\/blog\/wp-content\/uploads\/2026\/10\/button-debounce-and-switch-bounce-assembly-reference-v2-300x200.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Repeated interruptions during a sustained press deserve a mechanical and contact investigation. Check contamination, damaged domes, incorrect preload and assembly movement. A filter that masks a deteriorating contact may also make valid short presses disappear.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Do_You_Verify_a_Debounced_Metal_Dome_Keypad\"><\/span>How Do You Verify a Debounced Metal Dome Keypad?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<p>Validate the accepted events against complete physical operations, not just against a clean-looking screen capture. Keep raw-signal evidence and firmware settings together so that a later material, actuator or software change can be evaluated against the same baseline.<\/p>\n\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>Test<\/th>\n<th>Expected result<\/th>\n<th>Investigate if it fails<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>One press and release<\/td>\n<td>One press event and one release event<\/td>\n<td>Raw bounce duration and both qualification intervals<\/td>\n<\/tr>\n<tr>\n<td>Long hold<\/td>\n<td>No additional press events unless repeat is enabled<\/td>\n<td>Level-triggered application code and repeat policy<\/td>\n<\/tr>\n<tr>\n<td>Shortest intended tap<\/td>\n<td>Press and release are both recognized<\/td>\n<td>Excessive filter delay or slow scan rate<\/td>\n<\/tr>\n<tr>\n<td>Repeated fast taps<\/td>\n<td>Each deliberate operation is counted once<\/td>\n<td>Release re-arming and combined latency<\/td>\n<\/tr>\n<tr>\n<td>Different key positions and force directions<\/td>\n<td>Consistent recognition across the array<\/td>\n<td>Alignment, support and per-key state storage<\/td>\n<\/tr>\n<tr>\n<td>Required environmental and life testing<\/td>\n<td>Event behavior remains within the agreed criteria<\/td>\n<td>Contact changes, stack compression and timing margin<\/td>\n<\/tr>\n<\/tbody><\/table>\n<\/figure>\n\n\n\n<p>At EBest Circuit(Best Technology), we manufacture <a href=\"https:\/\/www.metal-domes.com\/product\/dome-array-custom.htm\">custom dome arrays<\/a> with selected dome sizes, shapes and forces arranged on a carrier cut to your layout. For a keypad project, send us the contact drawing, dome locations, actuator and overlay stack, force target and expected quantity. Include the electrical load and captured press\/release waveforms when discussing a bounce concern. These inputs help us relate the dome assembly to the keypad&#8217;s actual contact and actuation requirements.<\/p>\n\n\n\n\n<p>For support with <a href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/\">Button Debounce and Switch Bounce<\/a> in a custom dome assembly, contact <strong><a href=\"mailto:sales@metal-domes.com\">sales@metal-domes.com<\/a><\/strong> with the drawing and observed behavior. Keep the final controller timing tied to prototype measurements, rather than treating a tactile click as proof of a single electrical event.<\/p>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Metal_Dome_Debouncing_FAQs\"><\/span>Metal Dome Debouncing FAQs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n\n<h3>Can a multimeter measure switch bounce time?<\/h3>\n\n\n\n\n<p>An ordinary continuity beep or display update is too slow to resolve the transition sequence. It can identify a permanently open or closed path, but an oscilloscope is needed to inspect short pulses and intermediate voltages. A logic analyzer can count digital transitions when its threshold and sample rate are suitable.<\/p>\n\n\n\n\n<h3>Does gold plating eliminate contact bounce?<\/h3>\n\n\n\n\n<p>No. Contact finish can affect corrosion behavior and contact resistance, but it does not remove the dome&#8217;s elastic motion. Evaluate plating for the electrical and environmental requirements, then validate bounce on the selected assembly.<\/p>\n\n\n\n\n<h3>Can a bounce-free waveform still produce two commands?<\/h3>\n\n\n\n\n<p>Yes. Two interrupt handlers, duplicate event subscriptions, or application code that acts on a held level can produce duplicate commands. Compare a raw-input capture with the accepted-state signal and the application event log to locate where the extra event first appears.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Button Debounce and Switch Bounce in metal dome keypads: measure press and release signals, choose debounce time, and compare hardware and software filtering. <a href=\"https:\/\/www.metal-domes.com\/blog\/2026\/10\/21\/button-debounce-and-switch-bounce\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":57789,"featured_media":7345,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,3],"tags":[1406,1408,179,1407],"class_list":["post-7343","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-metal-dome-array","category-metal-domes","tag-button-debounce","tag-debounce-time","tag-metal-dome-switch","tag-switch-bounce"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/posts\/7343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/users\/57789"}],"replies":[{"embeddable":true,"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/comments?post=7343"}],"version-history":[{"count":2,"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/posts\/7343\/revisions"}],"predecessor-version":[{"id":7347,"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/posts\/7343\/revisions\/7347"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/media\/7345"}],"wp:attachment":[{"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/media?parent=7343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/categories?post=7343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.metal-domes.com\/blog\/wp-json\/wp\/v2\/tags?post=7343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}