根據上篇的超聲波:http://www.zg4o1577.cn/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)
2018-7-1 16:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|