#include "led.h" #include "key.h" #include "lcd.h" #include "string.h" #include "ov7670.h" #include "timer.h" #include "exti.h" #include "Nestling.h" extern u8 image[320][240]; int ct=0; int mt=0; int bb=0; int LT=0; int content[3]={2, 4,0}; // 0 1 2 3 4 int content_left[5]={2, 1, 4, 0, 3}; //ABCED int content_right[5]={1, 2, 0, 4, 3}; //BAECD const u8*LMODE_TBL[5]={"Auto","Sunny","Cloudy","Office","Home"}; const u8*EFFECTS_TBL[7]={"Normal","Negative", "B&W","Redish" , "Greenish", "Bluish","Antique"}; void go(void); //直走不循线 void go_slow(void); //慢速直走不循线 void go_slow_slow(void); //超慢速直走不循线 void back(void); //后退 void xiaozuo(void); //偏左前进 void xiaoyou(void); //偏右前进 void xunxian(void); //寻黑线前进 void xunxian_slow(void); //寻黑线慢速前进 void xunxian_green(void); //寻到绿色区域 void stop_to_a_line(void); //停在一根线上 void stop(void); //取消惯性函数 void tleft_45(void); //左转45度 void tleft(int dig); //左转45*dig角度 void tleft_180(void); //左转180度 void one_180(void); //左转180度(改) void tright_45(void); //右转45度 void tright(int dig); //右转45*dig角度 void mid_point(void); //到中心点 void white_green(void); //到白色区域 void Step_one(void); //第一阶段 void two_point_black(void); //第二个点黑色(特殊) void two_point_black_two(void); //第二个点黑色(改) void two_point_five(int g); //第二个点普通 void one_point_back(void); //第一个点后退 void one_point(void); //第一个点 void one_point_one(void); //第一个点情况一 void one_point_two(void); //第一个点情况二 void one_point_three(void); //第一个点情况三 void one_point_sp(void); //第一个点特殊 void Catch(int g); //抓取 void Put_two(int i); //第二阶段第一步 void Put_three(int i); //第二阶段第二步 void correction(void); //小幅度纠正 void correction_ace(void); //小幅度纠正(改) void upball(void); //抱球向上 void downball(void); //抱球向下 void inball(void); //夹球 void inball_two(void); //夹球二阶段 void outball(void); //放球 void down_hand(void); //下钩子 void uphand(void); //上钩子 void midhand(void); //钩子到中间 void hand(int g); //手臂初始化 int main(void) { //u8 key; u8 lightmode=0,saturation=2,brightness=2,contrast=2; u8 effect=0; int i=0; //u8 i=0; //u8 msgbuf[15]; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); LED_Init(); LCD_Init(); KEY_Init(); //TPAD_Init(72); BRUSH_COLOR=RED; LCD_DisplayString(60,50,16,"WarShip STM32"); LCD_DisplayString(60,70,16,"OV7670 TEST"); LCD_DisplayString(60,90,16,"ATOM@ALIENTEK"); LCD_DisplayString(60,110,16,"2012/9/14"); LCD_DisplayString(60,130,16,"KEY0:Light Mode"); LCD_DisplayString(60,150,6,"KEY1:Saturation"); LCD_DisplayString(60,170,16,"KEY2:Brightness"); LCD_DisplayString(60,190,16,"KEY_UP:Contrast"); LCD_DisplayString(60,210,16,"TPAD:Effects"); LCD_DisplayString(60,230,16,"OV7670 Init..."); while(OV7670_Init()) { LCD_DisplayString(60,230,16,"OV7670 Error!!"); delay_ms(200); LCD_Fill_onecolor(60,230,239,246,WHITE); delay_ms(200); } LCD_DisplayString(60,230,16,"OV7670 Init OK"); delay_ms(1500); OV7670_Light_Mode(lightmode); OV7670_Color_Saturation(saturation); OV7670_Brightness(brightness); OV7670_Contrast(contrast); OV7670_Special_Effects(effect); TIM2_Init(10000,8399); EXTIX_Init(); OV7670_Window_Set(10,174,240,320); OV7670_CS=0; //以上全部为初始化(若需了解,请参照后边参考资料) //以下程序请参照地图理解 GPIO_SetBits(GPIOA, GPIO_Pin_13); delay_us(1280); GPIO_ResetBits(GPIOA, GPIO_Pin_13); delay_us(20000); for(i=0;i<30;i++) { GPIO_SetBits(GPIOA, GPIO_Pin_15); delay_us(1900); GPIO_ResetBits(GPIOA, GPIO_Pin_15); delay_us(20000); } for(i=0;i<30;i++) { GPIO_SetBits(GPIOA, GPIO_Pin_14); delay_us(2000); GPIO_ResetBits(GPIOA, GPIO_Pin_14); delay_us(20000); } GPIO_SetBits(GPIOA, GPIO_Pin_9); ¯ delay_us(2500); GPIO_ResetBits(GPIOA, GPIO_Pin_9); delay_us(20000); outball(); Step_one(); Catch(1); mt=1; tright(2); inball_two(); upball(); Catch(2); mt=0; Put_three(1); Catch(2); mt=1; tright(2); inball_two(); upball(); Catch(1); mt=0; Put_three(0); Catch(3); mt=1; tright(2); inball_two(); upball(); Catch(4); mt=0; Put_three(3); Catch(4); mt=1; tright(2); inball_two(); upball(); Catch(3); mt=0; Put_three(2); Catch(5); mt=1; tright(2); inball_two(); upball(); Catch(5); mt=0; Put_three(4); tleft(1); ct=0; while(1) { stop_to_a_line(); if(ct==1) { for(i=0;i<30;i++)xunxian(); for(i=0;i<5;i++)stop(); ct++; } if(ct==3) { for(i=0;i<5;i++){stop;} break; } } for(i=0;i<165;i++)go_slow(); for(i=0;i<5;i++)stop(); //以上程序请参照地图理解。 while(1) camera_refresh(LT); }