基于MSP430 红外避障-遥控小车(电赛必备 附项目代码)

文章目录

  • 一、硬件清单
  • 二、模块连接
  • 三、程序设计
  • 四、项目源码


项目环境:

  • 1. MSP430F5529
  • 2. Code Composer Studio
  • 3. 蓝牙调试助手

项目简介:
小车可分为3种工作模式,每种工作模式都会打印在OLED显示屏上,通过按键转换工作模式。
模式1: 小车红外循迹,通过超声波实时监测障碍物距离,若超出规定路线,距离障碍物相对较近时,原地停止,等待指令。
模式2: 自主驾驶,通过超声扫描各障碍物距离,当小于一定距离时原地左转。
模式3: 蓝牙远程遥控

一、硬件清单

本项目用到的模块有:

  1. MSP430F5529开发板
  2. 红外循迹模块 TCRT5000L
  3. 超声波 HC-SR04
  4. 蓝牙 ATK_HC-05
  5. 显示屏 四针OLED
  6. 充电电池 12V
  7. TT电机及车轮
  8. 电机驱动 L298N
  9. 万向轮
  10. VCC、GND拓展口(自焊)
  11. 若干杜邦线及铜柱螺母
    在这里插入图片描述

二、模块连接

手册先行
在这里插入图片描述
在这里插入图片描述

1. 蓝牙: UART
UART(A0): P3.4、P3.3(RX和TX)
UART(A1): P4.5、P4.4(RX和TX)

2. OLED : IIC
IIC(B0): P3.0、P3.1(SCL和SDA)
IIC(B1): P4.2、P4.1(SCL和SDA)

3. 超声波: TIMER
TA0:P1.1、P1.2、P1.3、P1.4、P1.5
TA1:P1.7、P2.0、P2.1
TA2:P2.3、P2.4、P2.5
TB0:P3.6、P5.6、P5.7、P7.4、P7.5、P7.6、P7.7

以上为该项目需要部分引脚分配,以下为我的模块连接示例:

  • Motor:P3.5、P3.6 P3.0、P3.1
  • PWM:P2.4、P2.5
  • TCRT5000L:P3.4、P6.6、P1.6
  • OLED:P2.0(SCL)、P2.2(SDA)
  • HC_SR-04:P1.2(echo)、P1.4(Trig)
  • ATK_HC-05:P4.4(TX)、P4.5(RX)

三、程序设计

1. motor_And_infrared_GPIOInit

P3SEL &= ~BIT0; //右轮
P3DIR |= BIT0;
P3SEL &= ~BIT1;
P3DIR |= BIT1;P3SEL &= ~BIT5; //左轮
P3DIR |= BIT5;
P3SEL &= ~BIT6;
P3DIR |= BIT6;P3SEL &=~BIT4;
P3DIR &=~BIT4;
P3REN |=BIT4;//左边P1SEL &=~BIT6;
P1DIR &=~BIT6;
P1REN |=BIT6;//右边P6SEL &=~BIT6;
P6DIR &=~BIT6;
P6REN |=BIT6;//中间

2. SetPwm_Init

P2DIR |= BIT4; //配置P2.4复用为定时器TA2.4
P2SEL |= BIT4; //配置P2.4为输出
TA2CTL = TASSEL_2+MC_1+ID_3;
TA2CCTL1 = OUTMOD_7 ;
TA2CCR1 = arr;
TA2CCR0 = psc;P2DIR |= BIT5; //配置P2.5复用为定时器TA2.5
P2SEL |= BIT5; //配置P2.5为输出
TA2CTL = TASSEL_2+MC_1+ID_3;
TA2CCTL2 = OUTMOD_7 ;
TA2CCR2 = arr;
TA2CCR0 = psc;

3. OLED_Init


//OLED初始化函数
void OLED_Init(void)
{P2DIR |= BIT0;   //设置引脚为输出模式P2DIR |= BIT2;P2OUT |=BIT0;     //设置为高电平P2OUT |=BIT2;IIC_SDA_IN0;delay_ms(200);IIC_SDA_IN1;
//OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panelOLED_WR_Byte(0x00,OLED_CMD);//---set low column addressOLED_WR_Byte(0x10,OLED_CMD);//---set high column addressOLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control registerOLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current BrightnessOLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0脳贸脫脪路麓脰脙 0xa1脮媒鲁拢OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0脡脧脧脗路麓脰脙 0xc8脮媒鲁拢OLED_WR_Byte(0xA6,OLED_CMD);//--set normal displayOLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 dutyOLED_WR_Byte(0xD3,OLED_CMD);//-set display offset   Shift Mapping RAM Counter (0x00~0x3F)OLED_WR_Byte(0x00,OLED_CMD);//-not offsetOLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequencyOLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/SecOLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge periodOLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 ClockOLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configurationOLED_WR_Byte(0x12,OLED_CMD);OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomhOLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect LevelOLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)OLED_WR_Byte(0x02,OLED_CMD);//OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disableOLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disableOLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)OLED_Clear();OLED_WR_Byte(0xAF,OLED_CMD);}

4. BlueTooth_Init

P4SEL |=BIT4+BIT5 ;                             // P4.5 P4.4 = USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
UCA1CTL1 |= UCSSEL_2;                     // SMCLK
UCA1BR0 = 9;                              // 1MHz 115200 (see User's Guide)
UCA1BR1 = 0;                              // 1MHz 115200
UCA1MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
UCA1IE |= UCRXIE;                         // Enable USCI_A1 RX interrupt
__bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled

5. TIMER_Init

TA0CCTL0 = CCIE;            //CCR0中断使能
TA0CCR0 = a*1000;            //设定计数值
TA0CTL =TASSEL_2+MC_1+TACLR;//SMCLK,增计数模式,清除TAR
_bis_SR_register(LPM0_bits+GIE);//低功耗模式0,使能中断

6. HCSR04_Init

USONUD_OUT |= TRIG;
USOUND_DIR |= TRIG;
USOUND_SEL |= ECHO ; //CCI0A

7. Key_Init

P1DIR &=~BIT1;//板载按键s2设为输入
P2DIR &=~BIT1;//板载按键s1设为输入P2REN =BIT1;//上拉电阻
P1REN =BIT1;//上拉电阻P1OUT |=BIT1;
P2OUT |=BIT1;//初始状态为高电平
//低电平触发函数

8. interrupt

// Echo back RXed character, confirm TX buffer is ready first,发送数据之前确定发送缓存准备好
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{switch(__even_in_range(UCA1IV,4)){case 0:     //无中断break;                             // Vector 0 - no interruptcase 2:                                   // Vector 2 - RXIFG  接受中断while (!(UCA1IFG&UCTXIFG));    // USCI_A1 TX buffer ready?   UCTXIFG(USCI Transmit Interrupt Flag)UCA1TXBUF = UCA1RXBUF;                              //等待数据发送完成 完成UCTXIFG置1 跳出循环                 // TX -> RXed characterbreak;case 4:break;                             // Vector 4 - TXIFG  发送中断default: break;}
}
// UCTXIFG=0x02,UCA1IFG&UCTXIFG,当UCA1IFG的UCTXIFG位为1时,说明UCA1TXBUF为空,
//跳出while循环循环;当UCTXIFG位为0时UCA1TXBUF不为空,停在循环。

四、项目源码

若需项目源码可留言评论区QQ邮箱私信即可。

着急的小伙伴可直接加好友联系 👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/87327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL | 过滤数据

4-过滤数据 4.1-使用WHERE子句 数据根据 WHERE 子句中指定的搜索条件进行过滤。WHERE 子句在表名( FROM 子句)之后给出。 select prod_name,prod_price from products where prod_price 3.49; 上述语句查询价格为3.49的行,然后输出名字和…

用chatGPT从左右眼图片生成点云数据

左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV,我们让chatGPT用OpenCV写一个程序来做这个事情 当然,代码里面会有一些错误,chatGPT写的代码并不会做模…

华为网络篇 RIPv2的基础配置-25

难度 1复杂度1 目录 一、实验原理 1.1 RIP的版本 1.2 RIP的路由更新方式 1.3 RIP的计时器 1.4 RIP的防环机制 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 RIP(Routing Information Protocol,路由信息协议)&am…

日撸java_day61-62

决策树 package machineLearning.decisiontree;import weka.core.Instance; import weka.core.Instances;import java.io.FileReader; import java.util.Arrays;/*** ClassName: ID3* Package: machineLearning.decisiontree* Description: The ID3 decision tree inductive …

css flex 上下结构布局

display: flex; flex-flow: column; justify-content: space-between;

(原创)Flutter与Native页面互相跳转

前言 实际开发混合项目时,常常会有页面跳转的需求 如果是原生界面和flutter界面需要互相跳转 这种情况应该怎么处理呢? 今天这篇博客主要就来介绍下这个情况 其实想一下,这个问题可以拆成四个小的问题来分析: 1:原生界…

Ubuntu22.04安装docker

在ubuntu22.04上安装docker还是比较容易的,之前在公司的centos6上边装docker,那才真是一言难尽呀,废话不多说,开始安装 1、更新包管理器 apt update 2、安装必要的软件包,以便允许 apt 使用 HTTPS 仓库 sudo apt i…

[数据集][目标检测]钢材表面缺陷目标检测数据集VOC格式2279张10类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2279 标注数量(xml文件个数):2279 标注类别数:10 标注类别名称:["yueyawan",&…

2023-08-12 LeetCode每日一题(合并 K 个升序链表)

2023-08-12每日一题 一、题目编号 23. 合并 K 个升序链表二、题目链接 点击跳转到题目位置 三、题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 示例 2&…

大数据培训课程-《机器学习从入门到精通》上新啦

《机器学习从入门到精通》课程是一门专业课程,面向人工智能技术服务,课程系统地介绍了Python编程库、分类、回归、无监督学习和模型使用技巧以及算法和案例充分融合。 《机器学习从入门到精通》课程亮点: 课程以任务为导向,逐步学…

Docker+Consul+Registrator 实现服务注册与发现

第四阶段 时 间:2023年8月8日 参加人:全班人员 内 容: DockerConsulRegistrator 实现服务注册与发现 目录 一、服务注册中心引言 CAP理论是分布式架构中重要理论: 二、服务注册中心软件 (一)Zoo…

C语言——将一串字符进行倒序

//将一串字符进行倒序 #include<stdio.h> #define N 6 int main() {int a[N]{0,1,2,3,4,5};int i,t;printf("原数组数值&#xff1a; ");for(i0;i<N;i)printf("%d",a[i]);for(i0;i<N/2;i){ta[i];a[i]a[N-1-i];a[N-1-i]t;}printf("\n排序…

Docker mysql+nacos单机部署

docker 网络创建 由于nacos需要访问mysql的数据&#xff0c;因此mysql容器和nacos容器之间需要进行通信。容器间通信有很多方式&#xff0c;在这里采用同一网络下的方式进行实现。因此需要创建网络。创建网络的命令如下&#xff1a; docker network create --driver bridge n…

案例14 Spring MVC文件上传案例

基于Spring MVC实现文件上传&#xff1a; 使用commons-fileupload实现上传文件到本地目录。 实现上传文件到阿里云OSS和从阿里云OSS下载文件到本地。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case14-springmvc03。 ​ 2. 配置Maven依赖 <?xml ver…

C++语法中bitset位图介绍及模拟实现

一、位图的引入 先来看下边一道面试题&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 经过我们之前的学习&#xff0c;我们可能会有以下的思路&#xff1a; 对这些数进行排序&#xff…

Selenium 是什么?简单明了的介绍

Selenium Selenium 是什么 Selenium 是一款 Web UI 测试工具&#xff0c;是一款 自动化测试 工具&#xff0c;使用 Selenium 测试工具进行的测试通常被称为 Selenium Testing&#xff0c;各种支持如下列表&#xff1a; UI 元素的支持与管理&#xff1a;自写代码实现浏览器支…

Android 视频播放器dkplayer

gihub地址&#xff1a; https://github.com/Doikki/DKVideoPlayer GitHub - Doikki/DKVideoPlayer: Android Video Player. 安卓视频播放器&#xff0c;封装MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音并实现预加载&#xff0c;列表播放&#xff0c;悬浮播放&#xff0c;广…

adb用法,安卓的用户CA证书放到系统CA证书下

设备需root&#xff01;&#xff01;设备需root&#xff01;&#xff01;设备需root&#xff01;&#xff01; ​​​​​​​测试环境&#xff1a;redmi 5 plus、miui10 9.9.2dev&#xff08;安卓8.1&#xff09;、已root win下安装手机USB驱动&#xff08;过程略&#xff0c…

大数据扫盲(1): 数据仓库与ETL的关系及ETL工具推荐

在数字化时代&#xff0c;数据成为了企业决策的关键支持。然而&#xff0c;随着数据不断增长&#xff0c;有效地管理和利用这些数据变得至关重要。数据仓库和ETL工具作为数据管理和分析的核心&#xff0c;将帮助企业从庞杂的数据中提取有价值信息。 一、ETL是什么&#xff1f; …

redis学习笔记(九)

文章目录 python对redis基本操作&#xff08;1&#xff09;连接redis&#xff08;2&#xff09;数据类型操作 python对redis基本操作 &#xff08;1&#xff09;连接redis # 方式1 import redisr redis.Redis(host127.0.0.1, port6379) r.set(foo, Bar) print(r.get(foo))# …