小熊派Hi3861获取mpu6050数据在oled屏幕中显示

电子说

1.3w人已加入

描述

硬件:

开发板:小熊派

主控MCU:Hi3861

接线:

MPU6050:

SCL:IO_01

SDA:IO_00

OLED:

SCL:IO_09
SDA:IO_10

效果图:

Hi3861运行效果图

软件方案:

MPU6050驱动

这部分代码参考使用小熊派例程代码

初始化引脚:

 

GpioInit();

IoSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA);   // GPIO_0复用为I2C1_SDA
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL);   // GPIO_1复用为I2C1_SCL
I2cInit(WIFI_IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */
I2cSetBaudrate(WIFI_IOT_I2C_IDX_1, 400000);

 

OLED驱动

相关代码在文末附件中。

在oled.c中初始化引脚:

 

//初始化
    GpioInit();
    //GPIO_10复用为I2C0_SDA
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_I2C0_SDA);
    //GPIO_9复用为I2C0_SCL
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_I2C0_SCL);
    //baudrate: 400kbps
    I2cInit(WIFI_IOT_I2C_IDX_0, 400000);
    I2cSetBaudrate(WIFI_IOT_I2C_IDX_0, 400000);

 

在主线程中获取mpu6050数据,并在oled显示

 

// 定义陀螺仪数据
Sensor_Data_TypeDef Sensor_Data;

char array[64]; 

static int task_sensor_entry(void)
{
    float k = 127.0/4200;
    OLED_Init();
    Sensor_Init();
    OLED_Clear();

    while(1)
    {
        //OLED_Show();
        usleep(100000);

        // 读取数据
        Sensor_Read_Data();
        // 逻辑处理
        printf("Accel[0]:%6d  Accel[1]:%6d  Accel[2]:%6drn", (int)Sensor_Data.Accel[0],(int)Sensor_Data.Accel[1],(int)Sensor_Data.Accel[2]);

        // 显示实时数据
        memset(array, 0, sizeof(array) - 1);
        sprintf(array, "x:%6d", (int)Sensor_Data.Accel[0]);
        OLED_ShowString(0,0,array,16);
        
        memset(array, 0, sizeof(array) - 1);
        sprintf(array, "y:%6d", (int)Sensor_Data.Accel[1]);
        OLED_ShowString(0,20,array,16);
        OLED_ProcessBar(0,40,(int)((Sensor_Data.Accel[1]+2100)*k));
        OLED_Refresh();
    }

    return 0;
}

static void OC_mpu6050_oled(void)
{

    osThreadAttr_t attr;

    attr.name = "task_main_entry";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;

    attr.stack_size = 2048;
    attr.priority = 25;
    attr.name = "task_sensor_entry";
    
    if (osThreadNew((osThreadFunc_t)task_sensor_entry, NULL, &attr) == NULL)
    {
        printf("Falied to create task_sensor_entry!n");
    }
}

APP_FEATURE_INIT(OC_mpu6050_oled);

 

相关代码文件

完整代码在资源中

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分