void Record_data() { keyscan(); if(flag_new) { switch(key) { case 1: if(flag_d==1) Height++; if(flag_d==2) Weight++; break; case 2: if(flag_d==1) Height--; if(flag_d==2) Weight--; break; case 3: flag_d++;break; default: break; } if(flag_d==1) { LCD_WriteChar(78,2,'*');LCD_WriteChar(78,3,' ');} if(flag_d==2) { LCD_WriteChar(78,3,'*');LCD_WriteChar(78,2,' ');} if(flag_d==3) flag_data=1; LCD_WriteNum(45,2,Height); LCD_WriteNum(51,3,Weight); flag_new=0; } }
void read_Twarn(uint a,uint b) { key_T(); DHT11_Receive(); if(!T_warn&&TH>10&&TH<40) T_warn=TH+2; LCD_WriteNum(60,a,T_warn); LCD_WriteNum(36,b,TH); }
void Run_jibu() { keyscan(); if(flag_new) { switch(key) { case 1: if(run_mode==0) run_mode=1; else if(run_mode==1) run_mode=0; else if(run_mode==2) run_mode=0; break; case 2: run_mode=2; break; case 3: flag_running=1;run_bu=run_bushu;break; default: break; } flag_new=0; switch(run_mode) { case 0: Display_time(); break; case 1: Display_step(); break; case 2: LCD_WriteString(0,2,"Height: cm"); LCD_WriteString(0,3,"Weight: kg"); LCD_WriteNum(45,2,Height); LCD_WriteNum(51,3,Weight); break; default: break; } } if(flag_time&&(run_mode==0)) { flag_time=0; LCD_WriteNum(30,3,time_m); LCD_WriteNum(55,3,time_s); } if(run_flag&&(run_mode==1)) { run_flag=0; LCD_WriteNum(20,3,run_bushu); } }
void duoji_saomiao(void) { uint a_saomiao,b_saomiao; duoji1=1500;duoji2=750; for(a_saomiao=0;a_saomiao<=14;a_saomiao++) { for(b_saomiao=0;b_saomiao<=149;b_saomiao++) { if(flag_fanzhuan==0) duoji2=duoji2+10; else duoji2=duoji2-10; LCD_WriteNum(0,4,duoji1); LCD_WriteNum(0,2,duoji2); } duoji1=duoji1+100; flag_fanzhuan=!flag_fanzhuan; } }
void Display_step() { LCD_WriteString(0,2," "); LCD_WriteString(0,3," "); LCD_WriteString(10,2,"You have run"); LCD_WriteString(45,3,"steps!"); LCD_WriteNum(20,3,run_bushu); }
void run_end() { uint Ener,bup,shijian; shijian=time_m*10+time_s/6; if(shijian==0) bup=0; else bup=run_bu*10/shijian; Ener=(43*Height/10+57*Weight/10+92*shijian/10+26*bup/10)/10; LCD_WriteString(0,0,"Height: cm"); LCD_WriteString(0,1,"Weight: kg"); LCD_WriteNum(45,0,Height); LCD_WriteNum(51,1,Weight); LCD_WriteString(0,2,"Time:"); LCD_WriteNum(35,2,time_m); LCD_WriteNum(60,2,time_s); LCD_WriteChar(49,2,':'); LCD_WriteString(0,3,"Step:"); LCD_WriteNum(35,3,run_bu); /* LCD_WriteNum(0,0,43*Height/10); LCD_WriteNum(0,1,57*Weight/10); LCD_WriteNum(0,2,92*shijian/10); LCD_WriteNum(0,3,26*bup/10);*/ LCD_WriteString(0,4,"Ener: kcal"); LCD_WriteNum(35,4,Ener); LCD_WriteString(0,5,"YOU ARM GREAT!"); }
void GoRoute3(void)//放最远的树叶 { struct Pointfp64 pos_scan1,pos_scan2,pos_tmp; struct Pointfp64 pos_real1,pos_real2; struct Pointfp64 pos_ring1= C_Ring1,pos_ring2=C_Ring2; struct Pointfp64 pos_robot; uint8 flag1=0,flag2=0,i; fp64 dist1,dist2,radian1,radian2,robot_radian; struct Pointfp64 error1,error2; int flaglidar; struct Pointfp64 temp; Route_Num=3; // SetPointPath(Route[2]+1,Route[3],PointRoute[Route[3]].selfangle,PointRoute[Route[3]].position); flaglidar=1; while(RouteFinish) { if((Point_NowNum>=Point_EndNum-250)&&flaglidar==1) { pos_robot=Gps_List[0].position; dist1=MATH_Distance(pos_robot,pos_ring1); dist2=MATH_Distance(pos_robot,pos_ring2); radian1=atan((pos_robot.y-pos_ring1.y)/(pos_robot.x-pos_ring1.x))-Gps_List[0].radian; radian2=atan((pos_robot.y-pos_ring2.y)/(pos_robot.x-pos_ring2.x))-Gps_List[0].radian; pos_real1.x=dist1*sin(-radian1); pos_real1.y=dist1*cos(-radian1)-335; pos_real2.x=dist2*sin(-radian2); pos_real2.y=dist2*cos(-radian2)-335; Lidar_Stat=Lidar_Route_3;//第三段的修正方式 flaglidar=0; robot_radian=Gps_List[0].radian; #if WalkGroundEnable RouteForm=RouteStop; #endif } if(Lidar_Stat==Lidar_Route_3)//在雷达传输完成前,液晶屏显示"waiting" { LCD_SetXY(0,0); LCD_WriteString("Waiting1"); } else if (flaglidar==0) { //雷达任务会给出 Lidar_Num_Result 个圆环中心 for (i=0;i<Lidar_Num_Result;i++)//处理雷达数据,将其他环的圆心剔除 { pos_tmp.x=Lidar_ResultX[i]-Ring1_Shift.x; pos_tmp.y=Lidar_ResultY[i]-Ring1_Shift.y; dist1=MATH_Distance(pos_tmp,pos_real1); dist2=MATH_Distance(pos_tmp,pos_real2); if (dist1<500)//若圆心相对车体距离误差小于500,取之 { flag1=i+1; pos_scan1=pos_tmp; error1.x=pos_tmp.x-pos_real1.x; error1.y=pos_tmp.y-pos_real1.y; } if (dist2<200) { flag2=i+1; pos_scan2=pos_tmp; error2.x=pos_tmp.x-pos_real2.x; error2.y=pos_tmp.y-pos_real2.y; } } error2=error1; if (flag1!=0)//修改坐标 { temp.y=(error1.y+error2.y)/2; temp.x=(error1.x+error2.x)/2; Gps_List[0].position.x-=temp.y*cos(-robot_radian)-temp.x*sin(-robot_radian); Gps_List[0].position.y+=temp.y*sin(-robot_radian)+temp.x*cos(-robot_radian); fix_2.x=temp.y*cos(-robot_radian)-temp.x*sin(-robot_radian); fix_2.y=-(temp.y*sin(-robot_radian)+temp.x*cos(-robot_radian)); #if WalkGroundEnable rGPJDAT|=0x1000; //开蜂鸣器 #endif flaglidar=-1; } else { flaglidar=-2; rGPJDAT&=~0x1000; //关蜂鸣器 } LCD_Clear(); LCD_SetXY(10,0); LCD_WriteInt(flaglidar); //-3 LCD_SetXY(0,3); LCD_WriteInt(pos_real1.x); //495 LCD_SetXY(10,3); LCD_WriteInt(pos_real1.y); //1448 LCD_SetXY(0,4); LCD_WriteInt(pos_scan1.x); // LCD_SetXY(10,4); LCD_WriteInt(pos_scan1.y); // LCD_SetXY(0,5); LCD_WriteInt(temp.y*cos(-robot_radian)-temp.x*sin(-robot_radian)); // LCD_SetXY(10,5); LCD_WriteInt(-(temp.y*sin(-robot_radian)+temp.x*cos(-robot_radian))); // LCD_SetXY(0,6); LCD_WriteNum(radian1/PI*180); //-15 LCD_SetXY(10,6); LCD_WriteInt(radian2/PI*180); //-46 OSTimeDly(1); #if WalkGroundEnable for(;;) { if(Button7_On) { RouteForm=PointLine; LCD_SetXY(0,7); LCD_WriteString("out break!"); break; } OSTimeDly(1); } #endif } if(Point_NowNum>=Point_EndNum-1) { RouteFinish=0; Route_Num++; OSMboxPost(ArmMbox,&Route_Num); LCD_SetXY(0,0); LCD_WriteString("route3 done"); } OSTimeDly(1); } }
void LCD_WriteNumXY(double data,int x,int y) { LCD_SetXY(x,y); LCD_WriteNum(data); }
void Display_time(void) { LCD_WriteNum(40,1,time_s); LCD_WriteNum(60,1,time_ms); }
void LCD_WriteDouble(double val) { LCD_WriteNum(val); }
void Input_List(struct Input_ListValue *list,int num) { rt_uint32_t key_value; int i,index; int allpage=(num-1)/3; int nowpage=0; fp64 out; while(1) { LCD_Clear(); for(i=0;i<3;i++) { index=nowpage*3+i; if(index<num) { LCD_SetXY(0,i); LCD_Printf("%d.",i+1); LCD_WriteString(list[index].name); LCD_WriteString(":"); switch(list[index].type) { case TYPE_INT8: LCD_WriteNum(*(int8_t*)(list[index].value)); break; case TYPE_UINT8: LCD_WriteNum(*(uint8_t*)(list[index].value)); break; case TYPE_INT16: LCD_WriteNum(*(int16_t*)(list[index].value)); break; case TYPE_UINT16: LCD_WriteNum(*(uint16_t*)(list[index].value)); break; case TYPE_INT32: LCD_WriteNum(*(int32_t*)(list[index].value)); break; case TYPE_UINT32: LCD_WriteNum(*(uint32_t*)(list[index].value)); break; case TYPE_INT64: LCD_WriteNum(*(int64_t*)(list[index].value)); break; case TYPE_UINT64: LCD_WriteNum(*(uint64_t*)(list[index].value)); break; case TYPE_FP32: LCD_WriteNum(*(fp32*)(list[index].value)); break; case TYPE_FP64: LCD_WriteNum(*(fp64*)(list[index].value)); break; } } else { LCD_SetXY(0,i); LCD_WriteString(" "); } LCD_SetXY(0,3); LCD_Printf("5.save 6.go %d/%d ",nowpage+1,allpage+1); } if(rt_mb_recv(&Mb_Key, &key_value, RT_WAITING_NO) == RT_EOK) { switch(key_value) { case pageup: if(nowpage>0) nowpage--; else nowpage=allpage; break; case pagedown: if(nowpage<allpage) nowpage++; else nowpage=0; break; case 1: case 2: case 3: index=key_value+nowpage*3-1; switch(list[index].type) { case TYPE_INT8: out=(*(int8_t*)(list[index].value)); break; case TYPE_UINT8: out=(*(uint8_t*)(list[index].value)); break; case TYPE_INT16: out=(*(int16_t*)(list[index].value)); break; case TYPE_UINT16: out=(*(uint16_t*)(list[index].value)); break; case TYPE_INT32: out=(*(int32_t*)(list[index].value)); break; case TYPE_UINT32: out=(*(uint32_t*)(list[index].value)); break; case TYPE_INT64: out=(*(int64_t*)(list[index].value)); break; case TYPE_UINT64: out=(*(uint64_t*)(list[index].value)); break; case TYPE_FP32: out=(*(fp32*)(list[index].value)); break; case TYPE_FP64: out=(*(fp64*)(list[index].value)); break; } Input_DoubleValue(&out,list[index].name); switch(list[index].type) { case TYPE_INT8: (*(int8_t*)(list[index].value))=out; break; case TYPE_UINT8: (*(uint8_t*)(list[index].value))=out; break; case TYPE_INT16: (*(int16_t*)(list[index].value))=out; break; case TYPE_UINT16: (*(uint16_t*)(list[index].value))=out; break; case TYPE_INT32: (*(int32_t*)(list[index].value))=out; break; case TYPE_UINT32: (*(uint32_t*)(list[index].value))=out; break; case TYPE_INT64: (*(int64_t*)(list[index].value))=out; break; case TYPE_UINT64: (*(uint64_t*)(list[index].value))=out; break; case TYPE_FP32: (*(fp32*)(list[index].value))=out; break; case TYPE_FP64: (*(fp64*)(list[index].value))=out; break; } break; case key6: return; } } Delay_ms(5); } }
void Input_FloatValue(float * address,char *name)//浮点输入 { u32 key_value; u32 point=0; char str[20]={'\0'}; float temp; int i,j; str[0]=' '; i=1; point=0; for(;;) { LCD_Clear(); LCD_SetXY(0,0); LCD_WriteString(name); LCD_SetXY(0,1); LCD_WriteString("old:"); LCD_WriteNum(*address); LCD_SetXY(0,2); LCD_WriteString("new:"); LCD_WriteString(str); if(i<=1) { LCD_SetXY(5,2); LCD_WriteString("Value=0!!!"); } Delay_ms(20); if(rt_mb_recv(&Mb_Key, (rt_uint32_t*)&key_value, 0)==RT_EOK) { switch(key_value) { case 1://1 if(i<14) str[i++]='1'; break; case 2://2 if(i<14) str[i++]='2'; break; case 3://3 if(i<14) str[i++]='3'; break; case 4://4 if(i<14) str[i++]='4'; break; case 7://5 if(i<14) str[i++]='5'; break; case 8://6 if(i<14) str[i++]='6'; break; case 9://7 if(i<14) str[i++]='7'; break; case 10://8 if(i<14) str[i++]='8'; break; case 13://9 if(i<14) str[i++]='9'; break; case 14://0 if(i<14) str[i++]='0'; break; case 15://. if(point==0&&i<14) { str[i++]='.'; point=1; } break; case 16://- if(str[0] == ' ') str[0] = '-'; else str[0] = ' '; break; case 17://del if(i>1) { if(str[i-1]=='.') point=0; str[--i]='\0'; } break; case 18://ok temp=0; point=0; for(j=1;j<i;j++)// { if(str[j]=='.') { point=10; } else if(point==0) { temp=temp*10+str[j]-'0'; } else { temp+=(str[j]-'0')/(float)point; point=point*10; } } if(str[0]=='-') temp=-temp; *address=temp; return; case 5://cancel return; } } } }