基于CW32的遥控循迹小车

例程资料链接如下(群文件也可下载):
BD网盘链接:
https://pan.baidu.com/s/187ePq84u2QjE1bsVPM6i3g?pwd=9jvv
提取码:9jvv
相关视频:基于CW32的遥控循迹小车

一、实验简介


本实验是使用CW32单片机制作一个入门的遥控循迹小车。遥控采用蓝牙配合手机APP进行遥控。循迹使用一个5路的循迹模块。使用OLED模块进行显示当前小车状态。

二、实验器材


本实验使用到了CW32F030C8小蓝板、智能小车底板、电机驱动模块、OLED模块、DX-BT04-E蓝牙模块、Wch-Link下载调试器、Keil5开发环境。


在这里插入图片描述

三、接线图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验完整接线图:

在这里插入图片描述

四、用到的外设


1.串口2:

串口2用于蓝牙模块,使手机和单片机通过蓝牙模块进行串口透传,从 而进行点对点通信。


2.高级定时器ATIM:

初始化高级定时器CH1B和CH2B进行PWM波输出,从而达到电机调速目的。


3.基本定时器BTIM1:

初始化基本定时器1,在基本定时器中断服务函数中对循迹模块进行扫描。将扫描的结果保存,以便在循迹模式中使用。


4.IIC1:

IIC1用于外挂OLED显示模块。

五、核心代码

// 基本定时器中断回调函数
// 在回调函数中对循迹模块进行扫描,将循迹模块的状态保存进sensor_data中
void BTIM1_IRQHandler(void)
{
    if (BTIM_GetITStatus(CW_BTIM1, BTIM_IT_OV)) // 判断是否是通道1中断
    {

        BTIM_ClearITPendingBit(CW_BTIM1, BTIM_IT_OV); // 清除中断标志位

        char t = 0x00; // 设置零时变量保存灰度传感器的值

        // 保存灰度传感器的值
        // 采用或运算,检测到黑线将相应的位设置为1
        if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_1))
        {
            t |= 0x08; // 00001000 左边数第一个
        }
        if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_2))
        {
            t |= 0x04; // 00000100 左边数第二个
        }
        if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_3))
        {
            t |= 0x02; // 00000010 左边数以三个
        }
        if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_4))
        {
            t |= 0x01; // 00000001 左边数第4个
        }
        if (!GPIO_ReadPin(TRACKING_GPIOC, TRACKING_5))
        {
            t |= 0x10; // 00010000 左边数第5个
        }
        sensor_data = t; // 将灰度传感器的值赋值给sensor_data
    }
}

// 串口1中断处理函数
void UART1_IRQHandler(void)
{
    unsigned char TxRxBuffer;
    if (USART_GetITStatus(CW_UART1, USART_IT_RC) != RESET)
    {
        USART_ClearITPendingBit(CW_UART1, USART_IT_RC); // 清除中断标志位
        TxRxBuffer = USART_ReceiveData_8bit(CW_UART1);  // 将接收到的数据放入TxRxBuffer

        USART_RX_BUF[rxIndex] = TxRxBuffer; // 将接收到的数据放入缓冲区

        if (rxIndex < USART_REC_LEN - 1) // 做数据长度的限制,留一个字节用于结束字符或者溢出检测
        {
            // 接收到的字符包含 \n 或者 \r 结束接收
            if (USART_RX_BUF[rxIndex - 1] == '\n' || USART_RX_BUF[rxIndex - 1] == '\r')
            {
                USART_RX_BUF[rxIndex] = '\0'; // 在最后一个字节加上空字符,表示字符串结束
            }
            else
            {
                rxIndex++;
            }
        }
        rxIndex = 0; // 清除数据标志
        flag = 1;    // 清除
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值