11.28

作者: 李响lx | 来源:发表于2017-11-28 21:22 被阅读0次

今天下午老师讲了红外遥控器。用延时取值的方式,把信号解码成数字。

红外传送:

1.平时常1,当有信号时先有9000us的下拉,再有4500us的上拉作为(引导头)握手。

2.一个位用一个周期脉冲表示。

           0:     先下拉560us,再上拉560us;         实际测量有几次微妙的误差

           1:     先下拉560us,再上拉1680us;        实际测量有几次微妙的误差

3.按键:一个按键4个字节,1.用户码    2.用户反码   3.键值码   4.键值反码

void setup() {

pinMode(3,INPUT_PULLUP);

Serial.begin(9600);

}

char bit_val(void)

{

int i;

delayMicroseconds(570);

while(digitalRead(3) != 1);

delayMicroseconds(500);

for(i=0;i<10;i++)

{

delayMicroseconds(10);

if(digitalRead(3) == 0)

return 0;

}

delayMicroseconds(1040);

return 1;

}

char byte_val(void)

{

int i;

char data = 0x00;

for(i=0;i<8;i++)

{

data |=(bit_val()<<i);

}

return data;

}

void loop() {

int mydata[4]={0,0,0,0};

int i;

if(digitalRead(3) == 0)

{for(i=1;i<=8&&(digitalRead(3) == 0);i++)

{delayMicroseconds(1000);

if(i==8)

{delayMicroseconds(5500);

for(i=0;i<4;i++)

{

mydata[i] =  byte_val();

}

Serial.print("DATA:");

Serial.print(mydata[0],HEX);

Serial.print(" ");

Serial.print(mydata[1],HEX);

Serial.print(" ");

Serial.print(mydata[2],HEX);

Serial.print(" ");

Serial.println(mydata[3],HEX);

delay(100);

}

}}

}

相关文章

网友评论

      本文标题:11.28

      本文链接:https://www.haomeiwen.com/subject/uhfybxtx.html