根據前面的程序http://www.zg4o1577.cn/bbs/dpj-126046-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();
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- USART3_Initialise(9600); //串口初始化為9600
- uart_init(115200); //串口初始化為115200
- LED_Init(); //LED端口初始化
- UltrasonicWave_Configuration(); //對超聲波模塊初始化
- TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計數
-
-
- while(1)
- {
- UltrasonicWave_StartMeasure();//開始測距
-
- 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);//打印總的高點平時間
-
-
-
- BarrierProc(UltrasonicWave_Distance);
-
- TIM5CH1_CAPTURE_STA=0;//開啟下一次捕獲
- }
- }
- 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
(289.41 KB, 下載次數: 32)
2018-7-1 16:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|