利用超聲波測距檢測距離,4位數碼管顯示的藍牙避障小車。
單片機源程序如下:
- #include "stm32f10x.h"
- #include "stm32f10x_conf.h"
- #include "led.h"
- #include "systick.h"
- #include "bizhang.h"
- #include "key.h"
- #include "zhongduan.h"
- #include "tx_rx.h"
- #include "timer.h"
- #include "TM1637.h"
- #include "timer3_pwm.h"
- #include "wave.h"
- #include "mortor.h"
- float UltrasonicWave_Distance; //計算出的距離
- u16 counter;
- int main()
- {
- //u8 key=0;
- //u8 BZ_flag=0;
- int i=0,j=0;
- u8 distance[4]={0};
- u16 L=0;
- L=2325;
- distance[0]=code[L/1000];
- distance[1]=code[L%1000/100];
- distance[2]=code[L%100/10];
- distance[3]=code[L%10];
- //timer3_fig();
- uart1_init();
- led_inti(); //LED接PB5,PB6,PB7,PB8(核心板自帶)
- systick_intil();
- uart1_init();
- send_byte(1);
- bizhang_inti();//避障傳感器OUT腳接PA1
- key_inil(); //按鍵接PA0
- timer_confing();
- wave_config();
- TM1637_Init();
- pwm_configuration(2400,599);
- motor_config();
- set_pwm(800,800,800,800);
- motor_stop();
-
- while(1)
- {
- //發出高電平
- //啟動測距
- TIM_Cmd(TIM2, ENABLE);
- if(led_flag>0)
- {
- TIM_Cmd(TIM2, DISABLE);
- TIM_SetCounter(TIM2,0);
- Wave_StarMeasure();
- TIM_Cmd(TIM2, DISABLE);
- while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2));
- //啟動定時器
- TIM_Cmd(TIM2, ENABLE);
- //等待低電平
- while((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1));
- counter=TIM_GetCounter(TIM2);
- TIM_Cmd(TIM2, DISABLE);
- //數碼管顯示數據
- UltrasonicWave_Distance=(float)(counter)/20*340/2;
- //UltrasonicWave_Distance=(u16)UltrasonicWave_Distance*1000;
- if(UltrasonicWave_Distance<5000)
- {
- distance[0]=code[(u16)UltrasonicWave_Distance/1000];
- distance[1]=code[(u16)UltrasonicWave_Distance%1000/100];
- distance[2]=code[(u16)UltrasonicWave_Distance%100/10];
- distance[3]=code[(u16)UltrasonicWave_Distance%10];
- TM1637_NixieTubeDisplay(distance);
- }
- led_flag=0;
- }
- if(RX_num>=5)
- {
- for(i=0;i<RX_num;i++)
- {
- if((RX_buff[i]==0x4f)&&(RX_buff[i+1]==0x4e))
- {
- switch(RX_buff[i+2])
- {
- case 0x41:;motor_run_forward();break; //前進
- case 0x42:;motor_run_back();break; //后退
- case 0x43:;motor_left();break; //左
- case 0x44:;motor_right();break; //右
- case 0x45:;motor_stop();break; //停
-
- case 0x31:set_pwm(500,500,500,500);break; //1
- case 0x32:set_pwm(900,900,900,900);break; //2
- case 0x33:set_pwm(1200,1200,1200,1200);break;//3
- case 0x34:set_pwm(1500,1500,1500,1500);break; //4
- case 0x35:set_pwm(1800,1800,1800,1800);break;//5
- case 0x36:set_pwm(2000,2000,2000,2000);break; //6
-
- case 0x37:led_on();break; //PB8 7
- case 0x38:led_on();break; //PB4 8
- case 0x39:led_off();break; //OFF PB4 PB8 9
- default:break;
- }
- RX_num=0;
- for(i=0;i<50;i++)
- {
- RX_buff[i]=0;
- }
- }
- }
- }
- }
- }
- void EXTI0_IRQHandler(void) //按鍵
- {
- u16 i,j;
- led_on();
- for(i=0;i<6000;i++)
- {
- for(j=0;j<6000;j++);
- }
- led_off();
- EXTI_ClearITPendingBit(EXTI_Line0);
- }
- void EXTI1_IRQHandler(void)//避障
- {
- u16 i,j;
- led_on();
- for(i=0;i<6000;i++)
- {
- for(j=0;j<1000;j++);
- }
- led_off();
- for(i=0;i<6000;i++)
- {
- for(j=0;j<1000;j++);
- }
- led_on();
- for(i=0;i<6000;i++)
- {
- for(j=0;j<1000;j++);
- }
- led_off();
- EXTI_ClearITPendingBit(EXTI_Line1);
- }
復制代碼
所有資料51hei提供下載:
智能小車.rar
(367.53 KB, 下載次數: 64)
2018-6-5 18:21 上傳
點擊文件名下載附件
全部文件 下載積分: 黑幣 -5
|