基本上我正在寻找一个类似串行的系统来运行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
}
答案 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]
),也可以对数组应用相同的技术。