|
|
#define uchar unsigned char
#define uint unsigned int
#define R_L1 27
byte StartStr=0x91;
byte ReadStr[9];
int outstr,angle0=0;
int sum,i,l,n,mask;
int num;
void setup()
{
Serial.begin(9600);
Serial3.begin(9600);//这里就定义了与罗盘通信的串口
for(i=R_L1,l=i+8;i<l;i++)
{
pinMode(i,INPUT);
}
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(36,INPUT);
pinMode(37,INPUT);
//attachInterrupt(0,bumper,RISING);
}
void loop()
{
lukou();
delay(10);
//luopan();
}
void lukou()
{
if(digitalRead(38)||digitalRead(39))
{
delay(1);
if(digitalRead(38)||digitalRead(39))
{
while(digitalRead(38)||digitalRead(39));
num++;
//Serial.print(num,DEC);
//Serial.print("\n");
}
}
switch(num)
{
case 2: angle(90);break;
case 4: angle(60);break;
}
}
void angle(int aa)
{
switch(aa)
{
case 90:
while(outstr<170)
{luopan();motor(2,3,6,5,150,150);}break;
case 60:
while(outstr<270)
{ luopan();motor(3,2,5,6,150,150);}break;
}
}
void luopan()
{
int i,a,b,c;
Serial3.print(StartStr);
if(Serial3.available())
{
delay(20);
while(Serial3.available())
{
ReadStr[i]=Serial3.read();
delay(10);
i++;
}
a=(ReadStr[2])-48;
b=int(ReadStr[3])-48;
c=int(ReadStr[4])-48;
outstr=a*100+b*10+c*1;
Serial.print(outstr,DEC);
Serial.print("\n");
}
}
void motor(uchar IN1,uchar IN2,uchar IN3,uchar IN4,uchar a,uchar b)
{
analogWrite(IN1,a);
analogWrite(IN2,0);
analogWrite(IN3,b);
analogWrite(IN4,0);
}
这个是我们写的程序,38,39引脚接的是两个开关量的灰度传感器,程序是让灰度第二次检测到后调用罗盘程序,当小车转到特定角度范围后,跳出语句,第四个路口也是这样,现在问题是,灰度第二次检测到后,转到特定角度后,罗盘不工作,跳出语句,此时在让灰度检测到一次,返回的num值会一下子蹦到一万多(num是用来记路口的),忘大神们指点一下小弟 |
|