将数组中的两个字节的值合并并放入一个并打印
Combining two bytes of value from an array and putting into one and printing it
你好实际上我想组合数组的第二个和第三个字节并分配给变量名StartBit,我已经编写并添加了一个布尔值TxtBit来检查条件并输出值但是当我输出value 我得到的第一个字节值完全为零,第二个字节值是原样。如果有人帮助我,那就太好了。
#include <SoftwareSerial.h>
byte TxData[] = {
0b00000001, 0b00000010, 0b00000011, 0b00000100, 0b000000101,
0b00000110, 0b00000111, 0b00001000, 0b00001001, 0b11111111,
};
int bytePos;
bool TxBit;
int bitPos;
char ControlBit;
char StartBit;
void setup()
{
Serial.begin(1200);
}
void loop()
{
receiveddata();
}
void receiveddata()
{
Serial.println("Bytes Received: ");
for (bytePos = 0; bytePos < 1; bytePos++)
{
ControlBit = TxData[bytePos];
}
for (bitPos = 0; bitPos < 8; bitPos++)
{
TxBit = ControlBit & (0x80 >> bitPos);
// Serial.println(TxBit);
}
for (bytePos = 1; bytePos <= 2; bytePos++)
{
StartBit = TxData[bytePos];
}
for (bitPos = 0; bitPos < 16; bitPos++)
{
TxBit = (StartBit) & (0x8000 >> bitPos);
Serial.print(TxBit);
}
Serial.println("");
}
根据您的评论,代码
for (bytePos = 1; bytePos <= 2; bytePos++)
{
StartBit = TxData[bytePos];
}
应替换为:
StartBit = (TxData[1] << 8) + TxData[2];
重要的是,StartBit 必须定义为 int
或 short
而不是 char
,因为它必须包含 16 位。
在你后面的代码中,你用TxBit计算也没有多大意义。你应该明确预期的目标。
你好实际上我想组合数组的第二个和第三个字节并分配给变量名StartBit,我已经编写并添加了一个布尔值TxtBit来检查条件并输出值但是当我输出value 我得到的第一个字节值完全为零,第二个字节值是原样。如果有人帮助我,那就太好了。
#include <SoftwareSerial.h>
byte TxData[] = {
0b00000001, 0b00000010, 0b00000011, 0b00000100, 0b000000101,
0b00000110, 0b00000111, 0b00001000, 0b00001001, 0b11111111,
};
int bytePos;
bool TxBit;
int bitPos;
char ControlBit;
char StartBit;
void setup()
{
Serial.begin(1200);
}
void loop()
{
receiveddata();
}
void receiveddata()
{
Serial.println("Bytes Received: ");
for (bytePos = 0; bytePos < 1; bytePos++)
{
ControlBit = TxData[bytePos];
}
for (bitPos = 0; bitPos < 8; bitPos++)
{
TxBit = ControlBit & (0x80 >> bitPos);
// Serial.println(TxBit);
}
for (bytePos = 1; bytePos <= 2; bytePos++)
{
StartBit = TxData[bytePos];
}
for (bitPos = 0; bitPos < 16; bitPos++)
{
TxBit = (StartBit) & (0x8000 >> bitPos);
Serial.print(TxBit);
}
Serial.println("");
}
根据您的评论,代码
for (bytePos = 1; bytePos <= 2; bytePos++)
{
StartBit = TxData[bytePos];
}
应替换为:
StartBit = (TxData[1] << 8) + TxData[2];
重要的是,StartBit 必须定义为 int
或 short
而不是 char
,因为它必须包含 16 位。
在你后面的代码中,你用TxBit计算也没有多大意义。你应该明确预期的目标。