网络知识 娱乐 小熊派第三次:手册查询和ADC深入使用

小熊派第三次:手册查询和ADC深入使用

#include 
#include 
#include 
#include 

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_errno.h"
#include "wifiiot_adc.h"

#define ADC_TASK_STACK_SIZE 1024 * 8
#define ADC_TASK_PRIO 24

/***** 获取电压值函数 *****/
static float GetVoltage(void)
{
    unsigned int ret;
    unsigned short data;
    
    //第一个参数为打开的ADC通道号,第二个参数是获取后数据的存放地址,第三个参数是采样多少次后再求平均获取数值,第四个参数是电源模式,第五个参数是计数时间
    ret = AdcRead(WIFI_IOT_ADC_CHANNEL_5, &data, WIFI_IOT_ADC_EQU_MODEL_8, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0xff);
    if (ret != WIFI_IOT_SUCCESS)
    {
        printf("ADC Read Failn");
    }

    return (float)data * 1.8 * 4 / 4096.0;
}

static void ADCTask(void)
{
    float voltage;

    //上拉,让按键未按下时GPIO_11保持高电平状态;第一个参数是GPIO号,第二个参数是该GPIO是低电平还是高电平
    IoSetPull(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_PULL_UP);
    while (1)
    {
        printf("=======================================rn");
        printf("***************ADC_example*************rn");
        printf("=======================================rn");

        //获取电压值
        voltage = GetVoltage();
        printf("vlt:%.3fVn", voltage);

        //延时1s
        usleep(1000000);
    }
}

static void ADCExampleEntry(void)
{
    //重命名了的结构体
    osThreadAttr_t attr;
    
    //结构体赋值
    attr.name = "ADCTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = ADC_TASK_STACK_SIZE;
    attr.priority = ADC_TASK_PRIO;

    if (osThreadNew((osThreadFunc_t)ADCTask, NULL, &attr) == NULL)
    {
        printf("[ADCExample] Falied to create ADCTask!n");
    }
}

//执行ADCExampleEntry这个函数
APP_FEATURE_INIT(ADCExampleEntry);

目前已知ADC的功能是获取电压值

具体流程

1.通过芯片手册获取要使用的ADC通道口和与之对应的GPIO口

2.创建获取电压值的float型函数

{

        使用AdcRead函数

        (设置ADC通道号,数据存储指针,采样次数,电压模式,计数时间这五个参数)

        返回获取的电压值

}

3.创建对应GPIO口的工作状态函数

{

        使用IoSetPull函数

        (设置GPIO口,高低电平这两个参数)

        使用之前创建的读取函数读取电压值并打印

}

4.创建主入口函数实现功能