在线时间428 小时
UID3006061
注册时间2015-3-23
NXP金币76
TA的每日心情 | 开心 2025-1-21 08:52 |
---|
签到天数: 861 天 连续签到: 1 天 [LV.10]以坛为家III
金牌会员
 
- 积分
- 5867
- 最后登录
- 2025-1-22
|
本帖最后由 leo121_3006061 于 2017-10-10 21:38 编辑
前期准备硬件用了点时间,小车硬件终于有了雏形,这几天弄mpu6050,头昏脑涨,dmp一直没有数据,只有温度和加速度什么的都有数据反馈,先放下,搞下超声波,弄出点眉目,分享出来,有个问题,只有当物体很接近(大概10cm的样子)HC-SR04才会有数据反馈出来,不知道是不是我哪里搞错了。Pin的连接
lpc54110
pio0.11-->trig
pio0.12-->echo
vcc 5.0----->vcc
GND------>GND
代码:app_HC_SR04.H
- #ifndef _APP_HC_SR04_H_
- #define _APP_HC_SR04_H_
- extern void hc_sr04_init();
- extern void hc_sr04_on();
- extern void hc_sr04_off();
- extern float echo_read();
- #endif
复制代码 app_HC_SR04.c
- /*
- HC-SR04
- Author: Leo
- */
- #include "fsl_device_registers.h"
- #include "fsl_debug_console.h"
- #include "board.h"
- #include "pin_mux.h"
- #include "fsl_common.h"
- #include "fsl_iocon.h"
- #include "app_interrupt.h"
- #include <stdbool.h>
- #include "app_HC_SR04.h"
- #define HC_SR04_GPIO_CFG IOCON_MODE_PULLUP | IOCON_FUNC0 | IOCON_GPIO_MODE | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF
- const uint8_t trig_port=0;
- const uint8_t trig_pin=11;
- const uint8_t echo_port=0;
- const uint8_t echo_pin=12;
- void hc_sr04_init()
- {
- //trig
- GPIO->DIR[trig_port] |= 1U << trig_pin;
- GPIO->B[trig_port][trig_pin] = 0;
- IOCON_PinMuxSet(IOCON, trig_port, trig_pin, HC_SR04_GPIO_CFG);
-
-
- //echo
- //GPIO->DIR[echo_port] &= ~(1U << echo_pin);
- GPIO->DIR[echo_port] &= ~(1U << echo_pin);
-
- GPIO->B[echo_port][echo_pin] = echo_pin;
- IOCON_PinMuxSet(IOCON, echo_port, echo_pin, HC_SR04_GPIO_CFG);
- //GPIO_ReadPinInput
- // IOCON_PinMuxSet(IOCON, 0, 12, IOCON_MODE_INACT | IOCON_FUNC5 | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF);
- }
- void hc_sr04_on()
- {
-
- GPIO->B[trig_port][trig_pin]=1;
-
- }
- void hc_sr04_off()
- {
-
- GPIO->B[trig_port][trig_pin]=0;
- }
-
- float echo_read()
- {
- uint32_t cntTime=0;
- while(GPIO_ReadPinInput(GPIO, echo_port, echo_pin))//当echo高电平开始计时(时间长度*340/s(声速)得到的结果再/2,即为距离)
-
- {
- //
- // delay_us(1);
- // PRINTF("echo is high %d\r\n",cntTime);
- cntTime++; //仅仅计数了
- }
- return cntTime;
-
- }
复制代码 主函数main代码
- //系统初始化部分略,以下部分是我根据网上查到的资料,按顺序写的
- hc_sr04_init();
- while (1)
- {
- hc_sr04_off(); //首先置位trig 为低电平
- delay_us(2);
- hc_sr04_on();然后置位trig 为高电平
- delay_us(15);延时至少10秒
- hc_sr04_off();置位低电平,此时,echo应该开始反馈高电平信号,
-
- PRINTF("Currently Distance is below:\r\n");
- PRINTF("==================================================\r\n");
- PRINTF("%d\r\n",echo_read()); //读取echo的高电平信号的时长,用于计算距离
- PRINTF("==================================================\r\n");
-
-
- }
复制代码
最后附上串口显示的数据
代码
software_6050.zip
(2.95 MB, 下载次数: 15)
|
|