完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
简介:
利用STM32和STC12C5A60S2(增强型51)做的一款作品。其中STM32控制触摸屏、按键等模块,STC12C5160S2处理手绘的轨迹数据控制小车,两大部分通过NRF24L01通信。(由于时序原因,两者的通信部分程序一定要处理好,否则无法通信。) 用户在触摸屏(电阻屏)上绘画出自己指定的轨迹,如:圆形,S形等。绘画之后按下发送按键,STM32便会将各个点的坐标数据处理,然后无线发送给STC12C5160S2,继而控制小车进行与手绘的轨迹相同的运动。 软件设计: 分为两个部分,一部分在触摸屏上,如:路径分析,坐标取点等;另一部分在小车上。(后面我会把程序完全贴出来) 1. 路径分析算法 因为人在触摸屏手绘的路径是在一个固定的坐标系上的移动轨迹,为了尽可能的靠近轨迹,我们加大轨迹的取点数量,基本的思想是从现在的点走向下一点,一直走到最后一点。为了发送的数据简洁,我们设计了一些算法,下面取其中几个自己绘画的对坐标的分析图。分析图中为了方便查看和分析,取点数量减少。 黄色为手绘出的轨迹,红色为取的点和坐标原点形成的唯一矩形,分析可知: Θ3 = Θ2 - Θ1,Θ5 = Θ4 - Θ3; 注:如果Θ<0,那么以四轴自身形成的坐标系而言,小车此时应该向左拐弯;如果Θ>0,那么以小车自身形成的坐标系而言,小车此时应该向右拐弯。所以这个的关键就是固定坐标系和相对坐标系之间的一些参数的转化。 例如: Move_Step(Path_Set_x[x-2],Path_Set_y[x-2],Path_Set_x[x-1],Path_Set_y[x-1]); Ang[x-2]=Time_Move_Buf*(180/pi); b = (int)(Time_Move_Buf+0.5) + 32; //解码时前进的时间要-32 if(x==2) a=Ang[0]; else a=(int)((Ang[x-2] - Ang[x-3])/Speed_Turn + 0.5) + 150; //解码时 大于150的向右转,小于150的向左转 Time_Turn[x-2] = (unsigned char)a; Time_Move[x-2] = (unsigned char)b; 例如: void Move_Step(double Now_x,double Now_y,double Next_x,double Next_y) { Time_Turn_Buf = atan(Next_x - Now_x)/(Next_y - Now_y); Time_Move_Buf = (sqrt((Next_x - Now_x)*(Next_x - Now_x)+(Next_y - Now_y)*(Next_y - Now_y)))/Speed_Move; } 2. 不同频率单片机之间的无线通信 由于不同频率单片机之间的无线通信需要解决不少的时序问题,因为以前研究过STM32单片机和51单片机之间由于频率不同造成的无法进行无线的通信的问题,所以在STM32的程序加上了一些必要的延时,以实现时序上的一致,从而使通信数据完善不会丢失或者造成通信失败。 例如: delayms(250); 硬件设计: 同样分为两部分,一个是触摸屏的硬件设计,另外一个是小车的硬件设计。 触摸屏: 效果图: 触摸屏和STM32的连接图: 小车: 关于小车的构造:小车分为四个部分:底座部分、电机驱动部分、变压部分、控制部分。 底座部分:双电机驱动,每一个电机通过齿轮轴承等零件同时带动前后两个车轮。由于没有舵机转向,所以该小车转向通过差速转向,因为机械结构简单,所以转向时具体情况为一边向前运动一边向后运动,通过IO口控制电机驱动部分。 电机驱动部分:引出6+8个端口,其中2个为7.2V电压输入端口(给控制端口),4个为控制底座部分电机输出端口,2个为5V电压输入端口(给电机驱动模块),6个为连接到控制部分的端口。具体作用可以从程序中很清晰的看到。 变压部分:没什么好说的,通过LM2940CT-5和AMS1117-3.3两个变压芯片简单的7.2V(给电机)转5V(给控制)转3.3V(给NRF24L01)。要电路图的可以百度或者加我QQ。 控制部分:用了前面提到的增强型51单片机STC12C5160S2,程序和平时学习到的普通的51程序基本没有区别,主要的区别好像是频率不同,这个是12T单片机,而51是1T单片机, 其他的也没什么好记的了,下面贴出两部分的主程序,全程序长了,无法全部贴: STM32控制触摸屏部分: #include "led.h" #include "delay.h" #include "sys.h" #include "key.h" #include "usart.h" #include "lcd.h" #include "touch.h" #include "spi.h" #include "flash.h" #include "touch.h" #include "stdlib.h" #include "24l01.h" #include "math.h" #define pi 3.1415926535 //double Speed_Move = 1.0,Speed_Turn = pi/3; //已知的量:前行速度 转弯速度 int Time_Turn_Buf; double Time_Move_Buf; u8 x; //收发都做在一个函数里面,通过按键来确定进入发送模式,还是接收模式 void Move_Step(int Now_x,int Now_y,int Next_x,int Next_y) { // if(Next_y == Now_y) // { // if(Next_x > Now_x) // Time_Turn_Buf = pi/2.0; // if(Next_x < Now_x) // Time_Turn_Buf = -pi/2.0; // if(Next_x == Now_x) // Time_Turn_Buf = 0; // } // else // { // } // Time_Turn_Buf = atan((Next_x - Now_x)/(Next_y - Now_y)); //在绝对坐标系下的坐标差 if(Now_x == Next_x && Next_y>Now_y) Time_Turn_Buf = 2;//直走 else if(Next_x>Now_x && Next_y>Now_y) Time_Turn_Buf = 3;//右转45 else if(Next_y==Now_y && Next_x>Now_x) Time_Turn_Buf = 4;//右转90 else if(Next_y Time_Turn_Buf = 5;//右转135 else if(Next_x Time_Turn_Buf = 1;//左转45 else if(Next_x else if(Next_y else if(Next_y else if(Next_x==Now_x && Next_y==Now_y) Time_Turn_Buf = 10;//不动 else Time_Turn_Buf = 3;//直走 Time_Move_Buf = sqrt(((double)Next_x - Now_x)*((double)Next_x - Now_x)+((double)Next_y - Now_y)*((double)Next_y - Now_y)); } void Set_Path(void) { int i ; LCD_Clear(WHITE); POINT_COLOR=BLUE; LCD_ShowString(0,0,"Set Path:"); POINT_COLOR=BLACK; for(i=32;i<=230;i++) Draw_Big_Point(i,33),Draw_Big_Point(i,253); for(i=32;i<=253;i++) Draw_Big_Point(33,i),Draw_Big_Point(230,i); } void Show_Send_Start(void) { LCD_Clear(WHITE); POINT_COLOR=BLUE; LCD_ShowString(20,40,"Sending ... ..."); } /**********************************************/ int main(void) { int a,b; unsigned char Time_Turn[50]; unsigned char Time_Move[50]; u8 Path_Set_x[80],Path_Set_y[80]; u8 Key_Press; u8 Set_Delay=0; SystemInit(); delay_init(72); NVIC_Configuration(); uart_init(9600); LED_Init(); KEY_Init(); LCD_Init(); NRF24L01_Init(); Touch_Init(); delay_ms(10); POINT_COLOR=RED; LCD_ShowString(60,50,"STM32 and 51"); LCD_ShowString(60,70,"2013/11/10"); LCD_ShowString(0,300,"Press KEY0 To Continue .") ; while(NRF24L01_Check())//检测不到24L01 { LCD_ShowString(60,130,"24L01 Check Failed!"); delay_ms(500); LCD_ShowString(60,130,"Please Check! "); delay_ms(500); LED0=!LED0;//DS0闪烁 } /****************************/ // do{ // Key_Press=KEY_Scan(); // } while(Key_Press!=1); // Key_Press==1; Set_Path(); while(1) { Key_Press=KEY_Scan(); if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下 { Pen_Int_Set(0);//关闭中断 do { Convert_Pos(); Pen_Point.Key_Sta=Key_Up; if(Pen_Point.X0>216&&Pen_Point.Y0<16) Set_Path();//清除 else { Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0); if(Set_Delay==0) { if(x>50) x=0; //限制数组大小 Path_Set_x[x] = Pen_Point.X0 / 15; //11 18 点缩小20倍 Pen_Point.Y0 = 253 - Pen_Point.Y0 + 32; Path_Set_y[x++]=Pen_Point.Y0 / 15; /********限制判断 避免不明原因造成的错误点********/ if((Path_Set_x[x-1]-Path_Set_x[x-2])>40||(Path_Set_y[x-1]-Path_Set_y[x-2])>40) x--; if((Path_Set_x[x-1]==Path_Set_x[x-2])&&(Path_Set_y[x-1]==Path_Set_y[x-2])) x--; /*****************************************************/ if(x > 1) { Move_Step(Path_Set_x[x-2],Path_Set_y[x-2],Path_Set_x[x-1],Path_Set_y[x-1]); // Time_Turn_Buf=Time_Turn_Buf*(180.0/pi); // a = (int)(Time_Turn_Buf + 0.5); a = Time_Turn_Buf + 65 ; //此为角度 -90 至 90 对应转化为 60 至 240 b = (int)(Time_Move_Buf + 65 + 0.5) ; //此为两点距离 0 至 200 对应转化为 40 至 240 if(a<-100.0||a>100.0) a = 'S'; if(b<39||b>241) b = 'S'; // Time_Turn_A[x-2] = a ; //大于150有问题 小于150没问题 Time_Move[x-2] = (unsigned char)(b); // // if(x == 2) // Time_Turn[x-2] = (unsigned char)(Time_Turn_A[x-2] + 150); // else if(x >= 3) // Time_Turn[x-2] = (unsigned char)(Time_Turn_A[x-2] - Time_Turn_A[x-3] + 150); Time_Turn[x-2] = (unsigned char)(a); } /*****************************************************/ } GPIOC->ODR|=1<<1; Set_Delay++; //以时间为标准 后期改为距离 if(Set_Delay==50) Set_Delay=0; } }while(PEN==0); Pen_Int_Set(1); }else delay_ms(10); if(Key_Press==1) { LCD_Clear(WHITE); Touch_Adjust(); Save_Adjdata(); memset(Path_Set_x,0,sizeof(Path_Set_x)); memset(Path_Set_x,0,sizeof(Path_Set_x)); Set_Path(); } if(Key_Press==2) { u8 i; LCD_Clear(WHITE); //清屏 POINT_COLOR=BLUE; LCD_ShowString(0,0,"PATH is:"); POINT_COLOR=BLACK;//红色画笔 白底蓝提示红字显示路迹 for(i=0;i Draw_Big_Point(Path_Set_x * 15,250 + 32 - 15 * Path_Set_y );//循环体 画出轨迹 } /******************************/ Key_Press=0; while(1) { Key_Press=KEY_Scan(); if(Key_Press==3) { Show_Send_Start(); /***********发送函数***********/ TX_Mode(); while(1) { if(NRF24L01_TxPacket(Time_Turn)==TX_OK) { if(NRF24L01_TxPacket(Time_Move)==TX_OK) { LCD_ShowString(10,150,"Sended DATA(Time_Turn):"); LCD_ShowString(0,170,Time_Turn); LCD_ShowString(0,210,Time_Move); LCD_ShowString(0,250,Path_Set_x); LCD_ShowString(0,290,Path_Set_y); } ///加上结束语句 while(1); }else { LCD_ShowString(0,170,Time_Turn); LCD_ShowString(0,210,Time_Move); LCD_ShowString(0,250,Path_Set_x); LCD_ShowString(0,290,Path_Set_y); LCD_ShowString(60,140,"Send Failed "); while(1); // LCD_Fill(0,188,240,218,WHITE);//清空上面的显示 }; // LED0=!LED0; // delay_ms(1000); } // Show_Send_End(); // break; } } } if(Key_Press==3)//wk_up按下,表示轨迹绘制完成 准备发送数据给飞行器 (NRF24L01) { Show_Send_Start(); /****************发送函数*************/ TX_Mode(); while(1) { if(NRF24L01_TxPacket(Time_Turn)==TX_OK) { if(NRF24L01_TxPacket(Time_Move)==TX_OK) { LCD_ShowString(10,150,"Sended DATA(Time_Turn):"); LCD_ShowString(0,170,Time_Turn); LCD_ShowString(0,210,Time_Move); LCD_ShowString(0,250,Path_Set_x); LCD_ShowString(0,290,Path_Set_y); ///加上结束语句 while(1); } }else { LCD_ShowString(0,170,Time_Turn); LCD_ShowString(0,210,Time_Move); LCD_ShowString(0,250,Path_Set_x); LCD_ShowString(0,290,Path_Set_y); LCD_ShowString(60,170,"Send Failed "); // LCD_Fill(0,188,240,218,WHITE);//清空上面的显示 while(1); }; // LED0=!LED0; // delay_ms(1000); } // Show_Send_End(); } } } STC12C5160S2(增强型51): #include "reg52.h" #include "string.h" #include "lcd.h" #include "24l01.h" #include "car.h" #define uint unsigned int #define uchar unsigned char ***it LED=P1^6; //============================== // 延时函数 //========================= void delayms(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void delay_turn(unsigned int z) { unsigned int x,y; for(x=z; x>0; x--) for(y=1848; y>0; y--); } void delay_s(unsigned int xs) { unsigned int i ,j; for(i=xs*1000;i>0;i--) for(j=110;j>0;j--); } /*==================================== 主函数 ====================================*/ void main() { unsigned char Time_Turn_Buf[41],Time_Move_Buf[41]; uchar i,key; uchar mode; int j ; LCD_Init(); LCD_CLR(); LCD_W_Word(1,0," "); LCD_W_Word(2,0," "); LCD_W_Word(3,0,"TIME: 2013-11-12 "); LCD_W_Word(4,0," ! "); for(i=0;i<8;i++) { //delay_ms(250); delayms(250); } NRF24L01_Init(); // TIMER0_Init(); // LCD_CLR(); while(NRF24L01_Check()) { delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); LCD_W_Word(1,0," "); LCD_W_Word(2,0," "); LCD_W_Word(3,0," "); LED=~LED;//DS0闪烁 delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); delayms(250); } // LCD_CLR(); // LCD_W_Word(1,0," 24L01 Ready! "); // LCD_W_Word(2,0,"KEY0: 发送模式"); // LCD_W_Word(3,0,"KEY1: 接收模式"); intime(); // LCD_CLR(); mode = RX; //改变51单片机的状态:TX=发送 RX=接受 if(mode==TX) { LCD_W_Word(1,0," NRF24L01 TX_Mode"); TX_Mode(); mode=32;//从空格键开始 while(1) { if(NRF24L01_TxPacket(Time_Turn_Buf)==TX_OK) { LCD_W_Word(2,0,"Sended DATA:"); LCD_POS(2,0); for(i=0;i<16;i++) { LCD_Write_dat(Time_Turn_Buf); } LCD_POS(3,0); for(i=16;i<32;i++) { LCD_Write_dat(Time_Turn_Buf); } key=mode; for(i=0;i<32;i++) { key++; if(key>'~') key=32; Time_Turn_Buf=key; } mode++; if(mode>'~') mode=32; Time_Turn_Buf[32]=0; for(i=0;i<10;i++) { delayms(200); } } else { LCD_W_Word(2,0,"发送错误"); delayms(250); delayms(250); delayms(250); delayms(250); } LCD_W_Word(2,0," "); LED=~LED; delayms(250); delayms(250); delayms(250); delayms(250); } } else if(mode==RX) { |
|
|
|
LCD_W_Word(0,0,"NRF24L01 RX_Mode");
LCD_W_Word(1,0,"Received DATA: "); RX_Mode(); while(1) { if(NRF24L01_RxPacket(Time_Turn_Buf)==0) //以150为界限 { if(NRF24L01_RxPacket(Time_Move_Buf)==0) //要减去-32 { /**********************************开始对数组解码*******************************/ for(j = 0;j < strlen(Time_Move_Buf) - 3;j++) // forward的延时要求精确的话需要联系Turn_Move_Buf { // 转弯的要是不需要联系其他的东西只需要将后面的延时的时间调试好 if(j==0) { if(Time_Turn_Buf[0]=='B') {left();delay_turn(150);forward();delay_s(4);stop();delay_turn(1);} else if(Time_Turn_Buf[0]=='C') {forward();delay_s(4);stop();delay_turn(2);} else if(Time_Turn_Buf[0]=='D') {right();delay_turn(150);forward();delay_s(4);stop();delay_turn(1);} else if(Time_Turn_Buf[0]=='E') {right();delay_turn(300);forward();delay_s(4);stop();delay_turn(1);} else if(Time_Turn_Buf[0]=='F') {right();delay_turn(450);forward();delay_s(4);stop();delay_turn(1);} else if(Time_Turn_Buf[0]=='G') {right();delay_turn(600);forward();delay_s(4);stop();delay_turn(1);} else if(Time_Turn_Buf[0]=='H') {left();delay_turn(450);forward();delay_s(4);stop();delay_turn(1);} else if(Time_Turn_Buf[0]=='I') {left();delay_turn(300);forward();delay_s(4);stop();delay_turn(1);} else {stop();delayms(1);} } else { if(Time_Turn_Buf[j-1]=='B') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==7) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==1) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==2) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==3) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==5) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==6) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } if(Time_Turn_Buf[j-1]=='C') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-1) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==1) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==2) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==3) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==5) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==6) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } if(Time_Turn_Buf[j-1]=='D') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-1) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==1) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==2) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==3) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==5) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-2) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } if(Time_Turn_Buf[j-1]=='E') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-1) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==1) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==2) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==3) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-3) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-2) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } if(Time_Turn_Buf[j-1]=='F') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-1) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==1) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==2) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==3) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-3) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-2) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } if(Time_Turn_Buf[j-1]=='G') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-1) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==1) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==2) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-5) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-3) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-2) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } if(Time_Turn_Buf[j-1]=='H') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-1) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==1) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-6) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-5) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-3) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-2) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } if(Time_Turn_Buf[j-1]=='I') { if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-1) {left();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==0) {forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-7) {right();delay_turn(150);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-6) {right();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-5) {right();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-4) {right();delay_turn(600);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-3) {left();delay_turn(450);forward();delay_s(3);stop();delay_turn(1);} else if(Time_Turn_Buf[j]-Time_Turn_Buf[j-1]==-2) {left();delay_turn(300);forward();delay_s(3);stop();delay_turn(1);} else {stop();delayms(1);} } else { stop(); delayms(1); } } } } } } } } 大概就是这样子了,花时间记录下这次的制作,一次美好的过程,一次美好的回忆。每一次辛酸的劳累,都是一次攀登;而每一次向上方的攀登,都是一次美好的经历;可不知道怎么的,给我最深的感觉却是每一次长久的经历,平静之后都是无法形容的失落。失落。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1848浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
610浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
504浏览 3评论
508浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
489浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 16:39 , Processed in 0.870875 second(s), Total 79, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号