Last Updated on : 2024-11-20 02:14:53
API files
The ADC API is located in ty_adc.h. The driver code for different chip platforms is located in ty_adc_xxxx.c.
tuya_ble_sdk_demo
└── board
     ├── include
     |    └── ty_adc.h
     ├── xxxx                      /* xxxx represents the chip platform, such as TLSR825x */
     |    └── ty_board_xxxx        /* xxxx represents the chip platform, such as ty_board_tlsr825x */
     |         └── ty_adc_xxxx.c   /* xxxx represents the chip platform, such as ty_adc_tlsr825x.c */
     └── board.h
Demo files
File structure of tuya_board_api_demo:
tuya_ble_sdk_demo
├── app  /* API example */
|    ├── include
|    |    └── ty_board_demo
|    |    |    ├── demo_config.h        /* Demo configuration file */
|    |    |    └── ty_adc_demo.h        /* ADC example */
|    |    ├── tuya_ble_board_api_demo.h /* Entry point to Board API example */
|    |    └── tuya_ble_sdk_demo.h       /* Entry point to tuya_ble_sdk application */
|    └── src
|         ├── ty_board_demo
|         |    └── ty_adc_demo.c        /* ADC example */
|         ├── tuya_ble_board_api_demo.c /* Entry point to Board API example */
|         └── tuya_ble_sdk_demo.c       /* Entry point to tuya_ble_sdk application */
└── board /* Example of modifying API code */
Modify demo_config.h to toggle to the ADC example.
#define BOARD_API_DEMO          BOARD_API_ADC
| Function name | Description | 
|---|---|
| ty_adc_init | Initialize the ADC. | 
| ty_adc_start | Start ADC capture. | 
| ty_adc_stop | Stop ADC capture. | 
| ty_adc_control | Control the ADC. | 
| ty_adc_uninit | Turn off the ADC. | 
| Function name | ty_adc_init | 
|---|---|
| Function prototype | uint32_t ty_adc_init(ty_adc_t* p_adc); | 
| Description | Initialize the ADC. | 
| Parameters | p_adc [in]: The ADC parameter, defined by ty_adc_t | 
| Return value | 0: Success.Others: Failure. | 
| Notes | You can add or modify functions, parameters, and return values as needed. | 
| Function name | ty_adc_start | 
|---|---|
| Function prototype | uint32_t ty_adc_start(ty_adc_t* p_adc); | 
| Description | Start ADC capture. | 
| Parameters | p_adc [inout]: The ADC parameter, defined by ty_adc_t | 
| Return value | 0: Success.Others: Failure. | 
| Notes | You can add or modify functions, parameters, and return values as needed. | 
| Function name | ty_adc_stop | 
|---|---|
| Function prototype | uint32_t ty_adc_stop(ty_adc_t* p_adc); | 
| Description | Stop ADC capture. | 
| Parameters | p_adc [in]: The ADC parameter, defined by ty_adc_t | 
| Return value | 0: Success.Others: Failure. | 
| Notes | You can add or modify functions, parameters, and return values as needed. | 
| Function name | ty_adc_control | 
|---|---|
| Function prototype | uint32_t ty_adc_control(ty_adc_t* p_adc, uint8_t cmd, void* arg); | 
| Description | Control the ADC. | 
| Parameters | p_adc [in]: The ADC parameter, defined by ty_adc_tcmd [in]: The control command. arg [in]: The control parameter. | 
| Return value | 0: Success.Others: Failure. | 
| Notes | You can add or modify functions, parameters, and return values as needed. | 
| Function name | ty_adc_uninit | 
|---|---|
| Function prototype | uint32_t ty_adc_uninit(ty_adc_t* p_adc); | 
| Description | Turn off the ADC. | 
| Parameters | p_adc [in]: The ADC parameter, defined by ty_adc_t | 
| Return value | 0: Success.Others: Failure. | 
| Notes | You can add or modify functions, parameters, and return values as needed. | 
/* TLSR825x platform */
typedef struct {
    GPIO_PinTypeDef pin;        /* Pin number */
    ADC_InputPchTypeDef channel;/* ADC channel */
    uint32_t value;             /* Captured data by ADC */
} ty_adc_t;
/* nRF52832 platform */
typedef struct {
    uint8_t channel;            /* ADC channel */
    int16_t value;              /* Captured data by ADC */
} ty_adc_t;
Use TLSR825x as an example. You can add ADC API function or call APIs provided by the chip vendor in the application code.
ty_adc.h
/* ! The channel member in this example can be deleted */
typedef struct {
    GPIO_PinTypeDef pin;        /* Pin number */
    uint32_t value;             /* Captured data by ADC */
} ty_adc_t;
ty_adc_tlsr825x.c
uint32_t ty_adc_init(ty_adc_t* p_adc)
{
    adc_init();
    adc_base_init(p_adc->pin);
    adc_power_on_sar_adc(1);
}
uint32_t ty_adc_start(ty_adc_t* p_adc)
{
    p_adc.value = adc_sample_and_get_result();
    return 0;
}
Description
Read the voltage at the ADC pin every one second.
Sample code
The sample code uses the TLSR825x platform:
#include "ty_adc_demo.h"
#include "ty_adc.h"
#include "tuya_ble_log.h"
#include "tuya_ble_port.h"
/***********************************************************
************************micro define************************
***********************************************************/
#define ADC_PIN             GPIO_PB6
#define ADC_SAMPLE_TIME_MS  1000
/***********************************************************
***********************variable define**********************
***********************************************************/
static ty_adc_t sg_adc = {
    .pin = ADC_PIN,
    .value = 0
};
static tuya_ble_timer_t sg_adc_timer;
/***********************************************************
***********************function define**********************
***********************************************************/
/**
 * @brief adc timer callback
 * @param none
 * @return none
 */
void __adc_timer_cb(void)
{
    uint32_t res = ty_adc_start(&sg_adc);
    if (res) {
        TUYA_APP_LOG_ERROR("ty_adc_start failed, error code: %d", res);
    } else {
        TUYA_APP_LOG_INFO("adc_value is: %d mV", sg_adc.value);
    }
}
/**
 * @brief ty_adc api demo init
 * @param none
 * @return none
 */
void ty_adc_demo_init(void)
{
    uint32_t res = ty_adc_init(&sg_adc);
    if (res) {
        TUYA_APP_LOG_ERROR("ty_adc_init failed, error code: %d", res);
        return;
    }
    tuya_ble_timer_create(&sg_adc_timer, ADC_SAMPLE_TIME_MS, TUYA_BLE_TIMER_REPEATED, (tuya_ble_timer_handler_t)__adc_timer_cb);
    tuya_ble_timer_start(sg_adc_timer);
}
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback