本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页
最热资讯


亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」
该项目主旨是通过警报器,来提示驾驶员他的车与身后汽车之间的距离。
该警报器由H07R3模块(音频扬声器)、H08R6模块(红外传感器)构成,H08R6模块(红外传感器)将读取他与汽车之间的距离,然后发送消息到H07R3模块(音频扬声器)播放歌曲,音量水平将随着两辆车之间距离的减小而增加。
设计步骤:
一、将IR传感器模块(H08R6)与音频扬声器模块(H07R3)连接在一起。
二、编写代码:
1、在两个模块(H08R6,H07R3)中都定义了固定拓扑,描述了它们之间模块的连接。(注:P08R6模块与H08R6模块相同,但形式不同)
2、为每个模块定义了特定的ID。此ID的功能是为另一个模块定义模块。如:
有三个模块(module1,module2,module3),模块1将向模块2发送一条消息,则module2将通过ID知道该消息的来源,该ID随该消息发送给module1。
ID模块1(H08R6)为1
ID模块2(H07R3)为2
在此部分中,module2(H07R3)将在端口3上收到一条消息,因此将其反转。
3、在main.c文件中:
将传感器单位设置为厘米单位,然后启用DMA,以便将数据从传感器传输到内存
内部for循环:
messageParams[0 -> 3] = frequency;//频率
messageParams[4] = number of samples for sine wave;//正弦波的采样数
messageParams[5] = play sine wave for specified time;//播放指定时间的正弦波
SendMessageToModule (2, CODE_H07R3_PLAY_SINE, 6);
2是ID模块2(H07R3)
CODE_H07R3_PLAY_SINE是代码消息(通过它,module2(H07R3)将知道执行什么),这里对module2(H07R3)说正弦波
6个messageparams
注:它们不是(音频扬声器模块H07R3)的代码,因为外部代码通过红外传感器模块(H08R6)来执行。
附:(红外传感器H08R6代码)
/ **
****************************************************** ****************************
*文件名:main.c
*说明:主程序主体
****************************************************** ****************************
*
*版权(c)2015 STMicroelectronics
*
*以源代码和二进制形式重新分发和使用,无论是否进行了修改,
*满足以下条件是允许的:
* 1.重新分发源代码必须保留上述版权声明,
*此条件列表和以下免责声明。
* 2.以二进制形式重新分发必须复制上述版权声明,
*此条件列表和文档中的以下免责声明
*和/或发行版随附的其他材料。
* 3. STMicroelectronics的名称或其贡献者的名称
*可用于认可或促销从该软件派生的产品
*未经事先特别书面许可。
*
*此软件由版权所有者和贡献者“按原样”提供
*以及任何明示或暗示的保证,包括但不限于
*针对特定目的的适销性和适用性的默示保证
*免责声明。版权持有人或贡献者在任何情况下均不承担责任
*对于任何直接,间接,偶发,特殊,示范或后果性的结果
*损害赔偿(包括但不限于购买替代商品或
* 服务; 使用,数据或利润的损失;或业务中断)
*不论是基于合同责任,严格责任,还是基于任何责任理论,
*或侵权(包括过失或其他原因)以任何方式终止使用
*即使已告知可能发生此类损坏,也可以使用本软件的*。
*
****************************************************** ****************************
* /
/ *Hexabitz修改为BitzOS(BOS)V0.2.4-版权所有(C)2017-2021 Hexabitz
版权所有* /
/ *包括----------------------------------------------- ------------------- * /
#include “ BOS.h”
/ *私有变量---------------------------------------------- ----------- * /
float sensor = 0.0f;
uint8_t state_sensor;
uint8_t old_state_sensor;
uint8_t mode=1;
uint8_t sample = 200;
/* 私有函数原型 -----------------------------------------------*/
uint8_t AbsDistanceToColor(float distance);
uint8_t counter=0;
/* 主要功能 ------------------------------------------------------------*/
int main(void)
{
/* MCU 配置----------------------------------------------------------*/
/* 重置所有外围设备,初始化Flash接口和Systick. */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
/*初始化所有用户外围设备 */
/*初始化BitzOS */
BOS_Init();
/* 为freertos对象调用init函数(在freertos.c中) */
MX_FREERTOS_Init();
/* 启动调度程序*/
osKernelStart();
/* 无限循环 */
while (1)
{
}
}
/*-----------------------------------------------------------*/
/* 用户任务 */
void UserTask(void * argument)
{
// 将单位设置为 mm
SetRangeUnit(UNIT_MEASUREMENT_CM);
// 流到内存
Stream_ToF_Memory(50, portMAX_DELAY, &sensor);
for(;;)
{
state_sensor = AbsDistanceToColor(sensor);
Delay_ms(250);
switch(state_sensor)
{
case 1:
//频率
messageParams[0] = (uint8_t)(150>>24);
messageParams[1] = (uint8_t)(150>>16);
messageParams[2] = (uint8_t)(150>>8);
messageParams[3] = (uint8_t)(150);
// 音乐注释样本数
messageParams[4] = sample;
// 持续时间秒2秒
//注意:时分16秒
//时间=持续时间/ 16秒
messageParams[5] = 2;
SendMessageToModule (2,CODE_H07R3_PLAY_SINE, 6);
break;
case 2:
//频率
messageParams[0] = (uint8_t)(300>>24);
messageParams[1] = (uint8_t)(300>>16);
messageParams[2] = (uint8_t)(300>>8);
messageParams[3] = (uint8_t)(300);
// 音乐注释样本数
messageParams[4] = sample;
// 持续时间秒2秒
//注意:时分16秒
//时间=持续时间/ 16秒
messageParams[5] = 2;
SendMessageToModule (2,CODE_H07R3_PLAY_SINE, 6);
break;
case 3:
//频率
messageParams[0] = (uint8_t)(500>>24);
messageParams[1] = (uint8_t)(500>>16);
messageParams[2] = (uint8_t)(500>>8);
messageParams[3] = (uint8_t)(500);
// 音乐注释样本数
messageParams[4] = sample;
// 持续时间秒2秒
messageParams[5] = 2;
SendMessageToModule (2,CODE_H07R3_PLAY_SINE, 6);
break;
case 4:
//频率
messageParams[0] = (uint8_t)(700>>24);
messageParams[1] = (uint8_t)(700>>16);
messageParams[2] = (uint8_t)(700>>8);
messageParams[3] = (uint8_t)(700);
// 音乐注释样本
messageParams[4] = sample;
// 持续时间秒2秒
messageParams[5] = 2;
SendMessageToModule (2,CODE_H07R3_PLAY_SINE, 6);
break;
case 5:
//频率
messageParams[0] = (uint8_t)(1000>>24);
messageParams[1] = (uint8_t)(1000>>16);
messageParams[2] = (uint8_t)(1000>>8);
messageParams[3] = (uint8_t)(1000);
// 音乐注释样本
messageParams[4] = sample;
// 持续时间秒2秒
messageParams[5] = 2;
SendMessageToModule (2,CODE_H07R3_PLAY_SINE, 6);
break;
case 6:
//freq
messageParams[0] = (uint8_t)(1500>>24);
messageParams[1] = (uint8_t)(1500>>16);
messageParams[2] = (uint8_t)(1500>>8);
messageParams[3] = (uint8_t)(1500);
// 音乐注释样本
messageParams[4] = sample;
// 持续时间秒2秒
messageParams[5] = 2;
SendMessageToModule (2,CODE_H07R3_PLAY_SINE, 6);
break;
case 7:
//频率
messageParams[0] = (uint8_t)(3000>>24);
messageParams[1] = (uint8_t)(3000>>16);
messageParams[2] = (uint8_t)(3000>>8);
messageParams[3] = (uint8_t)(3000);
// 音乐注释样本
messageParams[4] = sample;
// 持续时间秒2秒
messageParams[5] = 2;
SendMessageToModule (2,CODE_H07R3_PLAY_SINE, 6);
break;
defult :
break;
}
}
}
uint8_t AbsDistanceToColor(float distance)
{
if (distance < 15.0f)
return 1;
else if (distance < 20.0f)
return 2;
else if (distance < 25.0f)
return 3;
else if (distance < 30.0f)
return 4;
else if (distance < 35.0f)
return 5;
else if (distance < 40.0f)
return 6;
else if (distance < 45.0f)
return 7;
else
return 8;
}
开启“人工智能”——贝尔金WeMo智能插座套装拆解
2014-05-23
iPhone 6 plus最专业传感器深入解析
2014-10-22
乐美客携手炬芯、Linaro、飞思卡尔推出三大开发板,直接对打树莓派
2015-07-02
15个你可能不知道的开源云平台
2016-05-12
关于小米在开源上的五大原则,一位20年开源老兵的思辩
2016-04-07
这套工业物联网解决方案把乐高变成了一座智慧城市
2019-06-24
[项目实录]全流程LoRaWAN开发
2019-07-22
【视频秀】用STM32和光传感器控制电机马达开关窗户
2019-06-12
一款小尺寸、高性能的智能家居设备
2019-06-21
无线传感器网络——传感器原理与应用系列课程
2019-07-24
讨论