/esp-adv-button

esp-open-rtos library to use buttons and toggles

Primary LanguageCOtherNOASSERTION

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

ESP Advanced Button library

Library for esp-open-rtos SDK to manage inputs from built-in GPIOs and MCP23017 interfaces.

When MCP23017 is used, GPIOs must be declared with this:

adv_button_create(GPIO + (MCP_Index * 100), I2C Bus, Inverted, MCP Address);

Where MCP_Index is the number from 1 to enumerate all MCP boards, in case that several boards are used.

Requirements:

/*
 * Advanced Button Manager Example
 *
 * Copyright 2019-2022 José Antonio Jiménez Campos (@RavenSystem)
 *
 */

#include <stdio.h>
#include <esp/uart.h>
#include <esp8266.h>
#include <FreeRTOS.h>

#include "adv_button.h"


#ifndef BUTTON_GPIO
#define BUTTON_GPIO     0
#endif

#ifndef TOGGLE_GPIO
#define TOGGLE_GPIO     2
#endif

void singlepress_callback(const uint16_t gpio, void *args, const uint8_t param) {
    printf(">>>>> Example button: Single Press function called using GPIO->%i\n", gpio);
}

void doublepress_callback(const uint16_t gpio, void *args, const uint8_t param) {
    printf(">>>>> Example button: Double Press function called using GPIO->%i\n", gpio);
}

void longpress_callback(const uint16_t gpio, void *args, const uint8_t param) {
    printf(">>>>> Example button: Long Press function called using GPIO->%i\n", gpio);
}

void verylongpress_callback(const uint16_t gpio, void *args, const uint8_t param) {
    printf(">>>>> Example button: Very Long Press function called using GPIO->%i\n", gpio);
}

void holdpress_callback(const uint16_t gpio, void *args, const uint8_t param) {
    printf(">>>>> Example button: Hold Press function called using GPIO->%i\n", gpio);
}

void toggle_callback(const uint16_t gpio, void *args, const uint8_t param) {
    printf(">>>>> Example button: Toggle function called using GPIO->%i\n", gpio);
}

void user_init(void) {
    uart_set_baud(0, 115200);
    
    printf("\n>>>>> ADV BUTTON EXAMPLE\n\n");
    
    adv_button_set_evaluate_delay(10);
    
    adv_button_create(BUTTON_GPIO, true, false, ADV_BUTTON_NORMAL_MODE);
    
    adv_button_register_callback_fn(BUTTON_GPIO, singlepress_callback, SINGLEPRESS_TYPE, NULL, 0);
    adv_button_register_callback_fn(BUTTON_GPIO, doublepress_callback, DOUBLEPRESS_TYPE, NULL, 0);
    adv_button_register_callback_fn(BUTTON_GPIO, longpress_callback, LONGPRESS_TYPE, NULL, 0);
    adv_button_register_callback_fn(BUTTON_GPIO, verylongpress_callback, VERYLONGPRESS_TYPE, NULL, 0);
    adv_button_register_callback_fn(BUTTON_GPIO, holdpress_callback, HOLDPRESS_TYPE, NULL, 0);
    
    adv_button_create(TOGGLE_GPIO, true, false, ADV_BUTTON_NORMAL_MODE);
    adv_button_register_callback_fn(TOGGLE_GPIO, toggle_callback, INVSINGLEPRESS_TYPE, NULL, 0);    // Low
    adv_button_register_callback_fn(TOGGLE_GPIO, toggle_callback, SINGLEPRESS_TYPE, NULL, 0);       // High
}