====== Button ====== This page describes the configuration options available for the MOSH button element, including how to define its properties and map them to virtual wires. The button element reads a digital GPIO pin and reports press, release, and advanced input events such as long press, double press, and short-long combinations. ==== Creating a Button element ==== #include #include MOSH_Core MOSH_Core; const uint8_t pin = 4 MOSH_Element_Button* myButton = nullptr; void setup() { myButton.monitor(pin); MOSH_Core.registerElement(myButton); } ==== Parameter Table: ==== |**Option** |**Type**|**Default**|**Description**| |active_low |bool |false|Whether active state is low (true for inverted logic)| |debounce_delay |uint8_t |50 |Amount of delay (in milliseconds) used for debouncing| |id |integer |-- |Unique Element ID| |long_press_delay |uint16_t|750 |Amount of delay (in milliseconds) for determining a long press| |name |string |-- |Friendly label| |pin |uint8_t |-- |GPIO pin number connected to the button| |press_delay |uint16_t|250 |Amount of delay (in milliseconds) for determining a short press| |pullup |bool |true |Enable internal pull-up resistor| |stream_on_press |bool |false|Sends a stream of PRESS notifications when the button is active| |stream_on_press_freq|uint16_t|50 |The amount of time between PRESS notifications when stream_on_press is true| |virtual_wire |uint8_t |-- |ID of the virtual wire is assigned| |constant_on |bool |false|When ==== Property Status Messages: ==== enum class MOSH_Element_Button_Status |**Name**|**Bit**|**Description**| |RESET|0x00|Reserved for future use.| |STATE_ON|0x01|Sent when the button is placed in the "pressed" position.| |STATE_OFF|0x02|Sent when the button is released| |PRESS|0x03|Sent when the button is pressed and released within the press_delay| |DOUBLE_PRESS|0x04|Sent when the button is pressed and release twice within the press_delay| |LONG_PRESS|0x05|Sent after the button is released after being pressed for long_press_delay| |SHORT_LONG_PRESS|0x06|Sent after a combination of a PRESS and LONG_PRESS| |USER_DEF1|0xFC|Sent with button_element.send_userdef_1()| |USER_DEF2|0xFD|Sent with button_element.send_userdef_2()| |USER_DEF3|0xFE|Sent with button_element.send_userdef_3()| |USER_DEF4|0xFF|Sent with button_element.send_userdef_4()| ====Static config:==== None ====Setup Methods:==== Methods intended to be called during setup or initialization. These configure how the element behaves and are typically not changed during runtime. |**Method**|**Direction**|**Required**|**Default**|**Parameters**|**Description**| |setActiveLow(bool)|Write|❌|true|bool|Button is pressed when pulled low| |setDebounce(uint16_t)|Write|❌|10|uint16_t|Set the debounce time in milliseconds| |setLongPressDelay(uint16_t)|Write|❌|750|uint16_t|Set the long-press delay in milliseconds| |setName(string)|Write|❌|//null//|string|Set a friendly name for the element| |setPin(uint8_t)|Write|✅|//null//|uint8_t|The pin the button is wired to| |setPressDelay(uint16_t)|Write|❌|250|uint16_t|Set the press delay in milliseconds| |setPullup(bool)|Write|❌|true|bool|Use the internal pullup| |setStreamOnPress(bool)|Write|❌|false|bool|Button will send stream of PRESS events while active| |setStreamOnPressFreq(uint16_t)|Write|❌|//null//|uint16_t|Sets how frequently a PRESS event is sent during a press stream| ====Runtime Methods: ==== |**Method**|**Direction**|**Parameters**|**returns**|**Description**| |buttonIsPressed()|Read|--|bool|Returns true if button is pressed, false if not| |getFriendlyName()|Read|--|string|Returns the friendly name of the element| |getLastPropertyChange()|Read|--|uint32_t|get the amount of time (in millies) since the last state change)| |getProperty(name)|Read|friendlyName, state, event, lastChange|PropertyValue|Returns the current value of a property| |getID()|Read|--|uint8_t|Returns the element's unique ID| |getName()|Read|--|String|Returns the element's friendly name.| |send_userdef_1()|User called|--|void|User defined action| |send_userdef_2()|User called|--|void|User defined action| |send_userdef_3()|User called|--|void|User defined action| |send_userdef_4()|User called|--|void|User defined action|