Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

buttonObject_Library (v1.0.0)

<- ARCHIVED, for any future updates see: buttonObject_Library ->

Built and maintained by Imogen Heard on behalf of Pan Galactic Tech

Features

  • Libaray to handle and debounce button inputs using OOP topology.
  • Button is sampled periodically and history saved into a bitstream.
  • Bitmasks used to compare bitstream to a rising edge or falling edge over a number of samples.
  • This method is great at rejecting noise from dirty contacts or cheap buttons.
  • Button defined as a Pull Up or Pull Down button in constructor.
  • Method can differentiate between long press & short press.
  • Adjustable long press duration.
  • Returns total number of button presses.
  • Returns total number of button releases.
  • Returns total number of button longPresses (In resting state: releaseCount + longPressCount = pressCount).
  • Ultra fast and low overhead method.
  • Each buttonObject controls one input, add a new constructer for each button required.

Getting Started

Deployment

  1. Clone or Download library folder into Arduino IDE libraries folder.
  2. Extract files from zipped folder if required.
  3. Open Arduino IDE and select example program.

Dependencies

No dependency for library function, however examples have the following dependencies:

  • ledObject_library available from here - written by PanGalacticTech

Use

Precompiler Requirements

#include <buttonObject.h> // Libary include

Button Pin Declaration

#define BUTTON_PIN 4 // Select Button input pin

Long Press Time Declaration

#define LONG_PRESS_TIME 750 // time in milliseconds


Object Constructors

Declaring a button object:

buttonObject button(BUTTON_PIN, BUTTON_PULL_HIGH);

If button is LOW pulled HIGH on press, use: BUTTON_PULL_HIGH

Else If button is HIGH pulled LOW on press, use: BUTTON_PULL_LOW



Setup Functions:

Setup function must be run once before .buttonLoop() method.

button.begin();

.begin() Function sets up button input pin into input mode, and sets INPUT_PULLUP, if button is specified
BUTTON_PULL_LOW




Loop Functions:

Loop function must be called in every loop & as often as possible. Delays between loop executions will affect function.

button.buttonLoop(LONG_PRESS_TIME); // long int controls the time required for a long press. (defaults to 1000 mS)

This function will record the bitstream and return boolean flags when button states are detected.



Detecting Button Press:

Short Press

A short press is detected when the user releases the button in a time shorter than LONG_PRESS_TIME.
bool is set true on button release.

button.shortPress

Long Press

A long press is detected when the user keeps button depressed longer than LONG_PRESS_TIME.
bool is set true while button is depressed and button will not trigger short press untill it is released and reset.

button.longPress

Resetting the Triggers

button.shortPress & button.longPress bools act as triggers and must be reset after triggering associated behaviour.

button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken

Example Loop Using Reset Behaviour

button.buttonLoop(); // long int passed controls the time required for a long press. (defaults to 1 second)

if (button.shortPress) {
led.toggleLED();
button.buttonReset(); // .buttonReset method resets longPress & shortPress variables once action has been taken
}


Advanced Uses:





Limitations:


Known Issues V1.0.0

  • Please report any bugs or issues found.

Features to be Added



About

Built With

Author

Imogen Wren H

About

Libaray to handle and debounce button inputs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages