电赛小车总结

主控选择:arduino 

难点:数据处理不兼容。解决方案:利用while(1).....break; 单独执行然后跳出。

#define motor_A1 9
#define motor_A2 10
#define motor_A  11
#define motor_B1 6
#define motor_B2 5
#define motor_B  3int Echo = 13;
int Trig = 12;
int C,D;
void setup() {Serial.begin(9600);pinMode(Trig,OUTPUT);pinMode(Echo,INPUT);pinMode(motor_A1,OUTPUT);pinMode(motor_A2,OUTPUT);pinMode(motor_A,OUTPUT);pinMode(motor_B1,OUTPUT);pinMode(motor_B2,OUTPUT);pinMode(motor_B,OUTPUT);pinMode(8,INPUT);pinMode(7,INPUT);
}
void xunji()
{C=digitalRead(8);//左D=digitalRead(7);//右if((C==1)&&(D==0)){zz();delay(10);}if((C==0)&&(D==1)){yz();delay(10);}if((C==0)&&(D==0)){qj();delay(10);}}void xunji2()
{C=digitalRead(8);//左D=digitalRead(7);//右if((C==1)&&(D==0)){digitalWrite(motor_A1,1);digitalWrite(motor_A2,0);analogWrite(motor_A,0); //PWMdigitalWrite(motor_B1,1);digitalWrite(motor_B2,0);analogWrite(motor_B,50); //PWMdelay(10);}if((C==0)&&(D==1)){digitalWrite(motor_A1,1);digitalWrite(motor_A2,0);analogWrite(motor_A,50); //PWMdigitalWrite(motor_B1,1);digitalWrite(motor_B2,0);analogWrite(motor_B,0); //PWMdelay(10);}if((C==0)&&(D==0)){qj();delay(10);}}int flag = 0;int flag2 = 0;
void loop() { //循迹while(1){go();if(flag ==3){delay(100);break;}}flag = 0;int distance;while(1){distance = Distance_test(); //读取超声波传回来的数据delay(100);   if((distance >=0) && (distance <=15 )){tz();delay(200);break;}else{xunji2();delay(100);}}while(1){digitalWrite(motor_A1,1);digitalWrite(motor_A2,0);analogWrite(motor_A,100); //PWMdigitalWrite(motor_B1,0);digitalWrite(motor_B2,1);analogWrite(motor_B,100); //PWMdelay(550);tz();delay(1000);break;} while(1){xunji();if(C == 1 && D == 1 && flag2 == 0){digitalWrite(motor_A1,1);digitalWrite(motor_A2,0);analogWrite(motor_A,100); //PWMdigitalWrite(motor_B1,1);digitalWrite(motor_B2,0);analogWrite(motor_B,0); //PWMdelay(500);tz();delay(1000);flag2=flag2+1;delay(1000);}if(flag2 == 1){xunji();}}}void go()
{xunji();if(C == 1 && D == 1){tz();flag=flag+1;delay(1000);}if(flag == 2){digitalWrite(motor_A1,0);digitalWrite(motor_A2,1);analogWrite(motor_A,0); //PWMdigitalWrite(motor_B1,1);digitalWrite(motor_B2,0);analogWrite(motor_B,100); //PWMdelay(500);tz();delay(1000);flag = 3;}}float Distance_test(){          //量出前方距离digitalWrite(Trig,LOW);       //给触发脚高电平2usdelayMicroseconds(2);         //延时2usdigitalWrite(Trig,HIGH);      //给触发脚高电平10us,这里至少10usdelayMicroseconds(10);        //延时10usdigitalWrite(Trig,LOW);       //持续给触发脚低电float Fdistance = pulseIn(Echo,HIGH);//读取高电平时间(单位:微秒)Fdistance = Fdistance/58;     //为什么除以58等于厘米  Y=(x秒*344)/2return Fdistance;}
void qj()//前进
{digitalWrite(motor_A1,1);digitalWrite(motor_A2,0);analogWrite(motor_A,50); //PWM调节digitalWrite(motor_B1,1);digitalWrite(motor_B2,0);analogWrite(motor_B,50); //PWM调节}void ht()//后退{digitalWrite(motor_A1,0);digitalWrite(motor_A2,1);analogWrite(motor_A,100); //PWMdigitalWrite(motor_B1,0);digitalWrite(motor_B2,1);analogWrite(motor_B,100); //PWM}void zz()//左转{digitalWrite(motor_A1,1);digitalWrite(motor_A2,0);analogWrite(motor_A,0); //PWMdigitalWrite(motor_B1,1);digitalWrite(motor_B2,0);analogWrite(motor_B,100); //PWM}void yz()//右转{digitalWrite(motor_A1,1);digitalWrite(motor_A2,0);analogWrite(motor_A,100); //PWMdigitalWrite(motor_B1,1);digitalWrite(motor_B2,0);analogWrite(motor_B,0); //PWM}
void tz()//停止
{digitalWrite(motor_A1,0);digitalWrite(motor_A2,0);analogWrite(motor_A,0); //PWMdigitalWrite(motor_B1,0);digitalWrite(motor_B2,0);analogWrite(motor_B,0); //PWM}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部