0

基本上,我正在寻找一个类似串行的系统,在 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
}
4

1 回答 1

0

这最好用按位运算符来完成,我认为 or 函数在这里最有用,因为如果输入为 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])。

于 2014-03-13T20:38:39.890 回答