Buttons
The buttons API allows you to read the state of the buttons on a badge. This API encapsulates the drivers for different button types.
Badge support
This API is currently supported on the following badges:
- SHA2017
- Hackerhotel 2019
- Disobey 2019
- CampZone 2019
- Disobey 2020
- Fri3dcamp 2018
Support for GPIO buttons and touch-buttons via the MPR121 touch controller IC are supported. Touch buttons using the touch button features of the ESP32 can not be used (yet).
Reference
| Command | Parameters | Description | 
|---|---|---|
| attach | button, callback function | Attach a callback to a button | 
| detach | button | Detach a callback from a button | 
| value | button | Get the current value of a button | 
| getCallback | button | Get the current callback of a button | 
| pushMapping | [mapping] | Switch to a new button mapping | 
| popMapping | none | Switch back to the previous button mapping | 
| rotate | degrees | Adapt the button layout to an orientation. Accepts 0, 90, 180 and 270 as values. | 
Button availability per badge
| Name | SHA2017 | Hackerhotel 2019 | Disobey 2019 | CampZone 2019 | Disobey 2020 | MCH2022 | 
|---|---|---|---|---|---|---|
| A | Yes | Yes | Yes | Yes | Yes | Yes | 
| B | Yes | Yes | Yes | Yes | Yes | Yes | 
| SELECT | Yes | Yes | No | No | Yes | Yes | 
| START | Yes | Yes | No | No | Yes | Yes | 
| UP | Yes | Yes | Yes | Yes | Yes | Yes | 
| DOWN | Yes | Yes | Yes | Yes | Yes | Yes | 
| LEFT | Yes | Yes | Yes | Yes | Yes | Yes | 
| RIGHT | Yes | Yes | Yes | Yes | Yes | Yes | 
| HOME | No | No | No | No | No | Yes | 
| MENU | No | No | No | No | No | Yes | 
Default callback per button
| Name | SHA2017 | Hackerhotel 2019 | Disobey 2019 | CampZone 2019 | Disobey 2020 | MCH2022 | 
|---|---|---|---|---|---|---|
| A | ||||||
| B | Exit app | Exit app | ||||
| SELECT | ||||||
| START | Exit app | Exit app | Exit app | |||
| UP | ||||||
| DOWN | ||||||
| LEFT | ||||||
| RIGHT | ||||||
| HOME | Exit app | |||||
| MENU | 
Callback implementation:
to use the buttons, you need to implement a callback function:
import buttons, display # Imports 2 libraries to use the buttons, the display library, as well as the buttons library
def on_action_btn(pressed): # Defines a function on_action_btn with the required parameter pressed
    if pressed: # Uses an if statement to check if the button has been pressed
        display.drawFill(display.BLACK) # If the button is pressed, sets the screen to black
        display.drawText(10,10,"Hack The Planet!!!", display.GREEN, "roboto_regular18") # Draws text if the button is pressed
        display.flush() # Flushes the screen to draw the text and color onto the screen
buttons.attach(buttons.BTN_A, on_action_btn) # Assigns the function on_action_btn to the A button