根据上篇的超声波:http://www.51hei.com/bbs/dpj-126045-1.html 加上电机之后实现“魔术手”的功能,具体的感应的距离可以通过修改程序
单片机源程序如下:
- #include "stm32f10x.h"
- #include "interface.h"
- #include "motor.h"
- #include "sys.h"
- #include "delay.h"
- #include "LED.h"
- #include "UltrasonicWave.h"
- #include "usart.h"
- void BarrierProc(float distance_cm);
- extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态
- extern u16 TIM5CH1_CAPTURE_VAL; //输入捕获值
- int main(void)
- {
- u32 temp=0;
- float UltrasonicWave_Distance=0; //计算出的距离
- delay_init();
- GPIOCLKInit();
- RedRayInit();
- MotorInit();//必须放在TIM3_PWM_Init函数上面,因为TIM3_PWM_Init函数需要复用端口
- TIM3_PWM_Init();
- uart_init(115200); //串口初始化为115200
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- LED_Init(); //LED端口初始化
- UltrasonicWave_Configuration(); //对超声波模块初始化
- TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数
-
-
- while(1)
- {
- UltrasonicWave_StartMeasure();//开始测距
-
- if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
- {
- temp=TIM5CH1_CAPTURE_STA&0X3F;
- temp*=65536;//溢出时间总和
- temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间
-
- //距离计算公式:距离=高电平持续时间*声速/2
- //即 距离= 高电平持续时间*340*100/(2*1000 000) = 高电平持续时间*170/10000
- UltrasonicWave_Distance=(float)temp*170/10000;
-
- printf("Distance:%f cm\r\n",UltrasonicWave_Distance);//打印总的高点平时间
- TIM5CH1_CAPTURE_STA=0;//开启下一次捕获
- }
- BarrierProc(UltrasonicWave_Distance);
- // LED0=!LED0;
- // delay_ms(1000);
- }
- }
- void BarrierProc(float distance_cm)
- {
- if(distance_cm <= 15 && distance_cm >= 2 )
- {
- CarBack();
- }
- else if(distance_cm >= 20 && distance_cm <= 50)
- {
- CarGo();
- }
- else
- CarStop();//防震荡
- }
复制代码
所有资料51hei提供下载:
超声波+电机.rar
(285.23 KB, 下载次数: 15)
|