电子罗盘配合小车转特定角度期间出现的问题
#define uchar unsigned char#define uint unsigned int
#define R_L1 27
byte StartStr=0x91;
byte ReadStr;
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=Serial3.read();
delay(10);
i++;
}
a=(ReadStr)-48;
b=int(ReadStr)-48;
c=int(ReadStr)-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是用来记路口的),忘大神们指点一下小弟 我以前也曾试过利用罗盘控制小车转一个角度,但是失败了。外界对罗盘的干扰是一个问题,而且罗盘使用前还要进行校正。 你能帮我写一个用i2c通信的代码吗? 我也没写过I2C通信的代码,不过你可以参考这篇文章:
http://www.eefocus.com/zhang700309/blog/12-01/236815_59f78.html // num值会一下子蹦到一万多 // 的問題,應是以下這段引起的 38,39 引腳開關同時為1期間的num不斷加數所引起的
{
while(digitalRead(38)||digitalRead(39));
num++;
//Serial.print(num,DEC);
//Serial.print("\n");
}
另外的 // 罗盘不工作//,應檢查羅盤的通訊接口和是否有訊號輸出。
gly1215216357 发表于 2014-4-17 15:27 static/image/common/back.gif
你能帮我写一个用i2c通信的代码吗?
你寫 I2C 時遇到了甚麼的問題?代碼的要求是甚麼? eddiewwm 发表于 2014-4-19 13:44 static/image/common/back.gif
// num值会一下子蹦到一万多 // 的問題,應是以下這段引起的 38,39 引腳開關同時為1期間的num不斷加數所引起 ...
谢了,大哥,不是那里的问题,是罗盘里面有个地方少了个延时,现在的新问题是,你用手去让灰度检测到第二次的时候,让其转90度,然后,旋转小车,它会在给定的范围跳出那个程序,不过跑起来的时候,它会转个180度,好郁闷 gly1215216357 发表于 2014-4-20 16:06 static/image/common/back.gif
谢了,大哥,不是那里的问题,是罗盘里面有个地方少了个延时,现在的新问题是,你用手去让灰度检测到第二 ...
相信這是同一個事情的兩個面,面對這類的問題,一般來說加延時來確保不會有「重觸發」是必須的,其原理就如按鍵的去抖延時一樣。唯一要進一步思考的,單在「罗盘里面有加了个延时」,問題就就完全解決了嗎?還是要在這段代碼中加比較好,又或是在兩處也加更好呢?而最佳延時又是多少?這都是要仔細調整的,努力吧,祝你早日成功解決問題。
页:
[1]