STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)

串口控制小车、wifi、4g则需要发送响应指令使连接成功后才可以用串口控制
# include "string.h"
# include "stdio.h"
# include "motor.h"
// 串口接收缓存( 1 字节)
uint8_t buf = 0 ;
// 定义最大接收字节数 200 ,可根据需求调整
# define UART1_REC_LEN 200
// 接收缓冲 , 串口接收到的数据放在这个数组里,最大 UART1_REC_LEN 个字节
uint8_t UART1_RX_Buffer [ UART1_REC_LEN ];
// 接收状态
// bit15 , 接收完成标志
// bit14 , 接收到 0x0d
// bit13~0 , 接收到的有效字节数目
uint16_t UART1_RX_STA = 0 ;
# define SIZE 12
char buffer [ SIZE ];
// 接收完成回调函数,收到一个数据后,在这里处理
void HAL_UART_RxCpltCallback ( UART_HandleTypeDef * huart )
{
// 判断中断是由哪个串口触发的
if ( huart -> Instance == USART1 )
{
// 判断接收是否完成( UART1_RX_STA bit15 位是否为 1
if (( UART1_RX_STA & 0x8000 ) == 0 )
{
// 如果已经收到了 0x0d (回车),
if ( UART1_RX_STA & 0x4000 )
{
// 则接着判断是否收到 0x0a (换行)
if ( buf == 0x0a )
{
// 如果 0x0a 0x0d 都收到,则将 bit15 位置为 1
UART1_RX_STA |= 0x8000 ;
// 灯控指令
if ( ! strcmp ( UART1_RX_Buffer , "M1" ))
goForward ();
else if ( ! strcmp ( UART1_RX_Buffer , "M2" ))
goBack ();
else if ( ! strcmp ( UART1_RX_Buffer , "M3" ))
goLeft ();
else if ( ! strcmp ( UART1_RX_Buffer , "M4" ))
goRight (); else
stop ();
memset ( UART1_RX_Buffer , 0 , UART1_REC_LEN );
UART1_RX_STA = 0 ;
}
else
// 否则认为接收错误,重新开始
UART1_RX_STA = 0 ;
}
else // 如果没有收到了 0x0d (回车)
{
// 则先判断收到的这个字符是否是 0x0d (回车)
if ( buf == 0x0d )
{
// 是的话则将 bit14 位置为 1
UART1_RX_STA |= 0x4000 ;
}
else
{
// 否则将接收到的数据保存在缓存数组里
UART1_RX_Buffer [ UART1_RX_STA & 0X3FFF ] = buf ;
UART1_RX_STA ++ ;
// 如果接收数据大于 UART1_REC_LEN 200 字节),则重新开始接收
if ( UART1_RX_STA > UART1_REC_LEN - 1 )
UART1_RX_STA = 0 ;
}
}
}
// 重新开启中断
HAL_UART_Receive_IT ( & huart1 , & buf , 1 );
}
}
int fputc ( int ch , FILE * f )
{
unsigned char temp [ 1 ] = { ch };
HAL_UART_Transmit ( & huart1 , temp , 1 , 0xffff );
return ch ;
}
main.c # include "motor.h"
extern uint8_t buf ;
//main 函数
HAL_UART_Receive_IT ( & huart1 , & buf , 1 );
点动控制小车
STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第1张图片

 

PWM调速小车 开启定时器配置时间、模式 注意有效电平是高低电平、则车子另一个轮电平要相反才能驱动
STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第2张图片

 在时间内 有效电平越多 能量越大则越快

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第3张图片

 循迹小车---

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第4张图片

  循迹小车--- 通过PWM  解决平滑拐弯问题

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第5张图片

 

跟随小车  模仿循迹小车
STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第6张图片

 

摇头避障小车------SG90、超声波 要用到两个定时器

SG90配置

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第7张图片

 STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第8张图片

 超声波配置一个1us的定时器 计数一次则是1us

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第9张图片

 STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第10张图片

避障完整

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第11张图片

 

测速小车(两个中断 gpio中断 和定时器中断)

:测速模块周长知道 有20格子 每个电平转变一次就是1cm 用中断计数   配置定时器中断1s产生中断 计算出中断count++的值除以时间1s   ==== 速度

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第12张图片

 STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第13张图片

 将速度显示在OLED屏幕上 code MX配置I2C 连接oled屏幕

STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第14张图片

 STM32 ------ 智能小车(串口-----蓝牙、wifi、4g 循迹------pwm调速、避障-----超声波 舵机、跟随、测速并显示在OLED上、语音小车)_第15张图片

 语音小车 低高高 高低高 低高高 代码整合,引脚合理配置。

你可能感兴趣的:(stm32,单片机,嵌入式硬件)