本帖最后由 Avalon 于 2012-8-14 01:00 编辑
标题党。。。
好的我是坐井观天了。。。
学电子信息工程的新人报道。
本来还以为我能改进气压高度测量算法,能不用iremote写红外接收程序,能移植无线射频程序就已经是达人了。。。。
来了才发现差得还很多。。。。。看来我电路方面差很多。
好的~~~~
新人进来送个礼~~~~
不用Iremote库的红外接收程序。我用数据记录仪测了波形写出来的。淘宝上那货说他自己用iremote弄出来了不用了。。。我就发上来让大家参考了。。。。。今天完成了无线单工通信程序的移植。。。。希望能卖到淘宝上卖条紫云的价钱~~~~~
马上上文。
功能为接收红外遥控器发送的数据通过串口上传。无数据则停在while (1)处。
[mw_shl_code=c,true]const int redlight=7; //数据管脚定义
const int gate=2400; //超时门限定义
const int inp1=5;
const int inp2=2200;
const int us=600;
int ht;
boolean readin,_stop;
byte d[4]; //四个字节的读取数据,d1与d2互为反码,d3与d4互为反码。比如ee1111ee,ff0011ee等~~~
void setup()
{
pinMode(7,INPUT);
Serial.begin(9600);
readin=0; //标志位啊啥的这些我自己都忘了
rstop();
}
void rstop()
{
readin=0;
_stop=0;
for (int i=0;i<4;i++)
d=0;
}
byte readit()
{int j;
byte dat=0;
for (j=0;j<=7;j++)
{ ht=0;
while (digitalRead(redlight)==LOW)
;;
if (digitalRead(redlight)==HIGH)
{delayMicroseconds(us);} //wait for level change
if (digitalRead(redlight)==HIGH)
{
dat=dat*2;
dat=dat+1;
//Serial.print(1);
}
if (digitalRead(redlight)==LOW)
{dat=dat*2;
//Serial.print(0);
}
while (digitalRead(redlight)==HIGH)
;;
}
return dat;
}
void waitstart()
{
while (digitalRead(redlight)==1)
;
delay(inp1);
if (digitalRead(redlight)==0)
{readin=1;};
;
while (digitalRead(redlight)==0)
;;
if (digitalRead(redlight)==1)
{delayMicroseconds(inp2);};
if (digitalRead(redlight)==0)
{readin=0;}
;
if (digitalRead(redlight)==1)
{while (digitalRead(redlight)==1)
;;}
}
void loop()
{
long m,l;
int i,j;
waitstart();
if (readin==1)
{
for (i=0;i<4;i++)
{
d=readit();
}
if (!_stop)
{
for (int i=0;i<4;i++) //通过串口发送数据
{
Serial.print(d,HEX);
//Serial.println("");
}
Serial.println(""); ///n换行
}
rstop();
}
}[/mw_shl_code]
然后是红外接收的波形时序图。可以看出会先是一个时间很长的宽脉冲,然后是较短的窄脉冲,窄脉冲持续时间的长短即可代表0和1。
|