使用Arduino接收红外遥控编码并打印到串口
IR_PIN 默认为2
/*本程序用来接收NEC红外编码
* 程序原理:通过判断两次下降沿的周期宽度判断当前bit是逻辑1还是逻辑0
* 逻辑1 560+1690=2250us 逻辑0 560+560=1120us
* 接收到的数据是低位在前,保存的bit顺序为 0->7
*
*
* 当收到第1个下降沿时认为程序进入等待前导码阶段,即:9ms低+4.5ms高,
* 所以可在下一个下降沿时判断脉宽是否在13.5ms左右,如果是则标记进入收码阶段,否则返回重新等待新的下降沿
*
* 进入收码阶段后每次下降沿判断脉宽,得到逻辑1或0并写入buf,写满1个字节后转存至全局变量数组中
*
* 接收IO连续高电平100ms以上时认为收码结束,标记结束
* loop检测到收码结束时打印结果
*
* BH3PXN
* 2020.05.29
*/
#define IR_PIN 2
#define STEP_FREE 0
#define STEP_WAIT_PRECODE 1
#define STEP_RECV_CODE 2
#define STEP_RECV_OVER 3
unsigned char recvStep = STEP_FREE;
unsigned char irCode[100];
unsigned char idx = 0;
void setup() {
// put your setup code here, to run once:
pinMode(IR_PIN, INPUT_PULLUP); //开启上拉
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
IR_RECV();
outputIRCODE();
}
void outputIRCODE() {