坐井观天-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4015|回复: 0

坐井观天

[复制链接]
发表于 2012-8-14 00:46 | 显示全部楼层 |阅读模式
本帖最后由 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。




qq.jpg
ss.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 23:44 , Processed in 0.079002 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表