全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-08-14 14:39

人气:

作者:admin

标签: OLED  Hi3861  MPU6050 

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

硬件:

开发板:小熊派

主控MCU:Hi3861

接线:

MPU6050:

SCL:IO_01

SDA:IO_00

OLED

SCL:IO_09
SDA:IO_10

效果图:

wKgaomTXPKKAKOoBAPY6bJ6j_PA966.png运行效果图

软件方案:

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);

相关代码文件

完整代码在资源中

审核编辑 黄宇

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信