Infra Red Arduino Custom Serial

时间:2014-03-10 15:17:42

标签: serial-port arduino infrared

基本上我正在寻找一个类似串行的系统来运行arduino上的IR LED之间的通信。代码下面有一个数组,其中包含1和0的集合。我需要将这个8位数组转换为单个字符并输出它。但我不知道该怎么做。帮助将不胜感激。

    int IR_serial_read(){
        int output_val;
        int current_byte[7];
        int counter = 0;
        IR_serial_port = digitalRead(4);
        if (IR_serial_port == HIGH){
            output_val =1;
        }
        if (IR_serial_port == LOW){
            output_val =0;
        }
        current_byte[counter] = output_val;
        counter +=1
}

1 个答案:

答案 0 :(得分:0)

这最好用位运算符来完成,我认为或者函数在这里最好用,因为如果输入为1则会设置一点而如果它为0则不改变它,可以使用循环来循环你的数组并设置位。 看看你的代码,你确定你收到所有8位吗?你似乎节省了7位。 由于您仅为了仅使用1和0而创建字节数组,因此建议立即在同一循环中设置这些位。 这是我建议的代码:

byte inputByte = 0;                     // Result from IR transfer. Bits are set progressively.
for (byte bit = 0;  bit < 8; bit++) {   // Read the IR receiver once for each bit in the byte
    byte mask = digitalRead(4);         // digitalRead returns 1 or 0 for HIGH and LOW
    mask <<= bit;                       // Shift that 1 or 0 into the bit of the byte we are on
    inputByte |= mask;                  // Set the bit of the byte depending on receive
}

这也将放在循环中以读取数据流中的所有字节 它旨在提高可读性,并可进一步优化。它首先读取最低有效位 如果您希望继续使用1和0的字节数组,只需将digitalRead替换为数组位置(current_byte[bit]),也可以对数组应用相同的技术。