当前位置:首页 > 基于51的避障循迹重力感应遥控的智能小车设计(C语言)
case 0: //按键模式 IN1_1=0;IN1_2=0;IN2_1=0;IN2_2=0; //小车停止 while(CONTROL_MODE_FLAG==0) { RX_STATE(); KEY_VALUE=STATE&0x0f;//读取键值 switch(KEY_VALUE) { case 0x0e:IN1_1=1;IN1_2=0;IN2_1=1;IN2_2=0; speed1=20;speed2=20; break; case 0x07: IN1_1=0;IN1_2=1;IN2_1=0;IN2_2=1;speed1=20;speed2=20; break; case 0x0d: IN1_1=1;IN1_2=0;IN2_1=0;IN2_2=1;speed1=17;speed2=17; break; case
0x0b:IN1_1=0;IN1_2=1;IN2_1=1;IN2_2=0;speed1=17;speed2=17; break; default :IN1_1=0;IN1_2=0;IN2_1=0;IN2_2=0;speed1=0;speed2=0; //小车停止 break; } } IN1_1=0;IN1_2=0;IN2_1=0;IN2_2=0; //小车停止 break; case 1: //重力模式 jd=3; mode=0; delay(500); while(CONTROL_MODE_FLAG==1) { TR1=0; mode=1; TH1=0; TL1=0; StartModule(); while(!RX); //当RX为零时等待 TR1=1; //开启计数 while(RX); //当RX为1计数并等待
TR1=0; //关闭计数 Conut(); if(nRF24L01_RxPacket(RxBuf))//如果收到遥控器的数据则进入 { led2=~led2; R_S_Byte(RxBuf[0]); X_ANGLE=RxBuf[0];//读取纵向的倾斜度 Y_ANGLE=RxBuf[1];//读取横向的倾斜度 SIGN=RxBuf[2];//判断倾斜的方向 X_SIAN=0:前方 X_SIAN=1:下方 STATE=RxBuf[3];//判断倾斜的方向 Y_SIAN=0:左方 X_SIAN=1:右方 LED_FLAG=(SIGN&0x04)>>2;//判断小车灯光控制位 CONTROL_MODE_FLAG=(STATE&0xf0)>>4;//读取当前状态标志 KEY_VALUE=STATE&0x0f;//读取键值 if(LED_FLAG) LED1=1; else if(LED_FLAG==0) LED1=0; X_SIGN= SIGN&0x01; Y_SIGN= (SIGN&0x02)>>1; if(X_ANGLE>110) X_ANGLE=105;//全速时:if(X_ANGLE>160) X_ANGLE=155; if(Y_ANGLE>110) Y_ANGLE=110;//全速时:if(X_ANGLE>160) X_ANGLE=160; if(Y_ANGLE-X_ANGLE<30)//如果主要是往纵向倾斜则进入 { FLAG_ANGLE=1; if(Y_SIGN)//同时也往左方倾斜 {speed1=40-X_ANGLE/4;speed2=40-(X_ANGLE/4-Y_ANGLE/4);}//左轮 else if(Y_SIGN==0) {speed1=40-(X_ANGLE/4-Y_ANGLE/4);speed2=40-X_ANGLE/4;} } else { speed1=40-Y_ANGLE/4;speed2=40-Y_ANGLE/4; } if(X_SIGN) X_ANGLE=-X_ANGLE; if(Y_SIGN) Y_ANGLE=-Y_ANGLE;
if(FLAG_ANGLE) { FLAG_ANGLE=0; if(X_ANGLE>20){IN1_1=1;IN1_2=0;IN2_1=1;IN2_2=0; } //小车前进 else
if(X_ANGLE<-20&&middleS>200){IN1_1=0;IN1_2=1;IN2_1=0;IN2_2=1;} //小车后退 else { IN1_1=0;IN1_2=0;IN2_1=0;IN2_2=0; //小车停止 } } else { if(Y_ANGLE>20){IN1_1=1;IN1_2=0;IN2_1=0;IN2_2=1;} //小车左转 else
if(Y_ANGLE<-20){IN1_1=0;IN1_2=1;IN2_1=1;IN2_2=0;} //小车右转 else { IN1_1=0;IN1_2=0;IN2_1=0;IN2_2=0;; //小车停止 } } } } break; case 2: // speed1=15; // speed2=15; while(CONTROL_MODE_FLAG==2) { xunji(); } IN1_1=0;IN1_2=0;IN2_1=0;IN2_2=0; //小车停止 break; case 3: // TR0=0; while(CONTROL_MODE_FLAG==3) { csbmode();
} // TR0=1; IN1_1=0;IN1_2=0;IN2_1=0;IN2_2=0; //小车停止 break; } } }
//定时器中断
void zhongduan(void) interrupt 1 { TH0 = (65536-500)/256; TL0 = (65536-500)%6; aa++; if(aa==100) { led0=~led0; aa=0;t0++; }
/******************************************/ //大于则输出低电平
/******************************************/ if(count void zhongduan_0(void) interrupt 3//定时器工作在舵机控制模式
共分享92篇相关文档